realms_realm_add
authorSam Hartman <hartmans@debian.org>
Thu, 29 Nov 2012 19:30:07 +0000 (14:30 -0500)
committerSam Hartman <hartmans@debian.org>
Tue, 13 Aug 2013 15:42:52 +0000 (11:42 -0400)
Expose an interface for adding a realm.

src/include/realms.h
src/main/realms.c

index 2cde465..82b51d9 100644 (file)
@@ -152,6 +152,7 @@ REALM *realm_find(char const *name); /* name is from a packet */
 REALM *realm_find2(char const *name); /* ... with name taken from realm_find */
   int realms_home_server_add(home_server *home, CONF_SECTION *cs, int dual);
   int realms_pool_add(home_pool_t *pool, CONF_SECTION *cs);
+  int realms_realm_add( REALM *r, CONF_SECTION *cs);
 
 
 void home_server_update_request(home_server *home, REQUEST *request);
index 3d34d9a..93d9555 100644 (file)
@@ -1553,6 +1553,38 @@ static int add_pool_to_realm(realm_config_t *rc, CONF_SECTION *cs,
 #endif
 
 
+int realms_realm_add (REALM *r, CONF_SECTION *cs)
+{
+       #ifdef HAVE_REGEX_H
+       /*
+        *      It's a regex.  Add it to a separate list.
+        */
+       if (r->name[0] == '~') {
+               realm_regex_t *rr, **last;
+
+               rr = rad_malloc(sizeof(*rr));
+               
+               last = &realms_regex;
+               while (*last) last = &((*last)->next);  /* O(N^2)... sue me. */
+
+               rr->realm = r;
+               rr->next = NULL;
+
+               *last = rr;
+
+               return 1;
+       }
+#endif
+
+       if (!rbtree_insert(realms_byname, r)) {
+               rad_assert("Internal sanity check failed");
+               return 0;
+       }
+
+       return 1;
+}
+
+
 static int realm_add(realm_config_t *rc, CONF_SECTION *cs)
 {
        char const *name2;
@@ -1758,38 +1790,12 @@ static int realm_add(realm_config_t *rc, CONF_SECTION *cs)
                goto error;
        }
 
-#ifdef HAVE_REGEX_H
-       /*
-        *      It's a regex.  Add it to a separate list.
-        */
-       if (name2[0] == '~') {
-               realm_regex_t *rr, **last;
-
-               rr = rad_malloc(sizeof(*rr));
-               
-               last = &realms_regex;
-               while (*last) last = &((*last)->next);  /* O(N^2)... sue me. */
-
-               r->name = name2;
-               rr->realm = r;
-               rr->next = NULL;
-
-               *last = rr;
+       if ( !realms_realm_add(r, cs))
+               goto error;
 
                cf_log_info(cs, " }");
                return 1;
-       }
-#endif
-
-       if (!rbtree_insert(realms_byname, r)) {
-               rad_assert("Internal sanity check failed");
-               goto error;
-       }
-
-       cf_log_info(cs, " }");
-
-       return 1;
-
+               
  error:
        cf_log_info(cs, " } # realm %s", name2);
        free(r);