From f65af97c86da4615704f5dfcc7e19908707e0e9e Mon Sep 17 00:00:00 2001 From: Sam Hartman Date: Thu, 29 Nov 2012 14:30:07 -0500 Subject: [PATCH] realms_realm_add Expose an interface for adding a realm. --- src/include/realms.h | 1 + src/main/realms.c | 64 ++++++++++++++++++++++++++++------------------------ 2 files changed, 36 insertions(+), 29 deletions(-) diff --git a/src/include/realms.h b/src/include/realms.h index 2cde465..82b51d9 100644 --- a/src/include/realms.h +++ b/src/include/realms.h @@ -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); diff --git a/src/main/realms.c b/src/main/realms.c index 3d34d9a..93d9555 100644 --- a/src/main/realms.c +++ b/src/main/realms.c @@ -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); -- 2.1.4