Look up home servers by type, too.
authorAlan T. DeKok <aland@freeradius.org>
Wed, 12 Aug 2009 12:15:58 +0000 (14:15 +0200)
committerAlan T. DeKok <aland@freeradius.org>
Wed, 12 Aug 2009 12:15:58 +0000 (14:15 +0200)
src/include/realms.h
src/main/client.c
src/main/realms.c

index 34d22a6..29cb7f3 100644 (file)
@@ -132,7 +132,7 @@ home_server *home_server_ldb(const char *realmname, home_pool_t *pool, REQUEST *
 home_server *home_server_find(fr_ipaddr_t *ipaddr, int port);
 int    home_server_create_listeners(void *head);
 #ifdef WITH_COA
-home_server *home_server_byname(const char *name);
+home_server *home_server_byname(const char *name, int type);
 #endif
 #ifdef WITH_STATS
 home_server *home_server_bynumber(int number);
index f099097..dc7a905 100644 (file)
@@ -717,9 +717,10 @@ static RADCLIENT *client_parse(CONF_SECTION *cs, int in_server)
        if (c->coa_name) {
                c->coa_pool = home_pool_byname(c->coa_name, HOME_TYPE_COA);
                if (!c->coa_pool) {
-                       c->coa_server = home_server_byname(c->coa_name);
+                       c->coa_server = home_server_byname(c->coa_name,
+                                                          HOME_TYPE_COA);
                }
-               if (!c->coa_server) {
+               if (!c->coa_pool && !c->coa_server) {
                        client_free(c);
                        cf_log_err(cf_sectiontoitem(cs), "No such home_server or home_server_pool \"%s\"", c->coa_name);
                        return NULL;
index a3c11e2..a0cb796 100644 (file)
@@ -2139,11 +2139,12 @@ home_server *home_server_find(fr_ipaddr_t *ipaddr, int port)
 }
 
 #ifdef WITH_COA
-home_server *home_server_byname(const char *name)
+home_server *home_server_byname(const char *name, int type)
 {
        home_server myhome;
 
        memset(&myhome, 0, sizeof(myhome));
+       myhome.type = type;
        myhome.name = name;
 
        return rbtree_finddata(home_servers_byname, &myhome);