Merge remote-tracking branch 'freeradius/v3.0.x' into tr-upgrade
[freeradius.git] / src / main / client.c
index 5176f41..4888642 100644 (file)
@@ -219,7 +219,7 @@ int client_add(RADCLIENT_LIST *clients, RADCLIENT *client)
         *      Create a tree for it.
         */
        if (!clients->trees[client->ipaddr.prefix]) {
-               clients->trees[client->ipaddr.prefix] = rbtree_create(client_ipaddr_cmp, NULL, 0);
+               clients->trees[client->ipaddr.prefix] = rbtree_create(clients, client_ipaddr_cmp, NULL, 0);
                if (!clients->trees[client->ipaddr.prefix]) {
                        return 0;
                }
@@ -271,7 +271,7 @@ int client_add(RADCLIENT_LIST *clients, RADCLIENT *client)
 
 #ifdef WITH_STATS
        if (!tree_num) {
-               tree_num = rbtree_create(client_num_cmp, NULL, 0);
+               tree_num = rbtree_create(clients, client_num_cmp, NULL, 0);
        }
 
 #ifdef WITH_DYNAMIC_CLIENTS
@@ -500,7 +500,7 @@ static RADCLIENT *client_parse(CONF_SECTION *cs, int in_server)
        }
 
        /*
-        *      Global clients can set servers to use per-server clients cannot.
+        *      Global clients can set servers to use, per-server clients cannot.
         */
        if (in_server && c->server) {
                cf_log_err_cs(cs, "Clients inside of an server section cannot point to a server");
@@ -644,9 +644,15 @@ static RADCLIENT *client_parse(CONF_SECTION *cs, int in_server)
                cl_srcipaddr = NULL;
        }
 
-       FR_TIMEVAL_BOUND_CHECK("response_window", &c->response_window, >=, 0, 1000);
-       FR_TIMEVAL_BOUND_CHECK("response_window", &c->response_window, <=, 60, 0);
-       FR_TIMEVAL_BOUND_CHECK("response_window", &c->response_window, <=, main_config.max_request_time, 0);
+       /*
+        *      A response_window of zero is OK, and means that it's
+        *      ignored by the rest of the server timers.
+        */
+       if (timerisset(&c->response_window)) {
+               FR_TIMEVAL_BOUND_CHECK("response_window", &c->response_window, >=, 0, 1000);
+               FR_TIMEVAL_BOUND_CHECK("response_window", &c->response_window, <=, 60, 0);
+               FR_TIMEVAL_BOUND_CHECK("response_window", &c->response_window, <=, main_config.max_request_time, 0);
+       }
 
 #ifdef WITH_DYNAMIC_CLIENTS
        if (c->client_server) {