More debug messages in request_reject
authoraland <aland>
Wed, 20 Oct 2004 18:09:41 +0000 (18:09 +0000)
committeraland <aland>
Wed, 20 Oct 2004 18:09:41 +0000 (18:09 +0000)
Better messages on timeout, when a module is "locked", and doesn't
respond.

src/include/radiusd.h
src/main/radiusd.c
src/main/request_list.c
src/main/util.c

index b96fbd2..bf0050a 100644 (file)
@@ -275,7 +275,7 @@ typedef enum request_fail_t {
   REQUEST_FAIL_HOME_SERVER2,   /* another case of the above */
   REQUEST_FAIL_HOME_SERVER3,   /* another case of the above */
   REQUEST_FAIL_NORMAL_REJECT,  /* authentication failure */
-  
+  REQUEST_FAIL_SERVER_TIMEOUT  /* the server took too long to process the request */
 } request_fail_t;
 
 /*
index 8654fba..8a2d2d9 100644 (file)
@@ -1596,6 +1596,15 @@ int rad_respond(REQUEST *request, RAD_REQUEST_FUNP fun)
                  pairfree(&request->reply->vps);
                  request->reply->code = 0;
                  (*fun)(request);
+                 
+                 /*
+                  *    If the request took too long to process, don't do
+                  *    anything else.
+                  */
+                 if (request->options & RAD_REQUEST_OPTION_REJECTED) {
+                         finished = TRUE;
+                         goto postpone_request;
+                 }
          }
        }
 
index f598958..3b97161 100644 (file)
@@ -1144,10 +1144,8 @@ static int refresh_request(REQUEST *request, void *data)
                         */
                } else if ((child_pid != NO_SUCH_CHILD_PID) &&
                           ((request->options & RAD_REQUEST_OPTION_LOGGED_CHILD) == 0)) {
-                       radlog(L_ERR, "WARNING: Unresponsive child (id %lu) for request %d, in module %s in section %s",
-                              (unsigned long)child_pid, number,
-                              (request->module == NULL) ? "<none>" : request->module,
-                              (request->module == NULL) ? "<none>" : request->component);
+                       radlog(L_ERR, "WARNING: Unresponsive child (id %lu) for request %d",
+                              (unsigned long)child_pid, number);
 
                        /*
                         *  Set the option that we've sent a log message,
@@ -1161,8 +1159,11 @@ static int refresh_request(REQUEST *request, void *data)
                 *  Send a reject message for the request, mark it
                 *  finished, and forget about the child.
                 */
-               request_reject(request, REQUEST_FAIL_NORMAL_REJECT);
+               request_reject(request,
+                              REQUEST_FAIL_SERVER_TIMEOUT);
+               
                request->child_pid = NO_SUCH_CHILD_PID;
+
                if (mainconfig.kill_unresponsive_children)
                        request->finished = TRUE;
                return RL_WALK_CONTINUE;
index 122f72a..d7a9dd4 100644 (file)
@@ -575,4 +575,33 @@ static LRAD_NAME_NUMBER request_fail_reason[] = {
         *      Remember that it was rejected.
         */
        request->options |= RAD_REQUEST_OPTION_REJECTED;
+
+       switch (reason) {
+       case REQUEST_FAIL_NO_THREADS:
+               DEBUG("WARNING: We recommend that you fix any TIMEOUT errors, or increase the value for \"max_servers\".");
+               break;
+
+       case REQUEST_FAIL_DECODE:
+               DEBUG("WARNING: Someone may be attacking your RADIUS server.");
+               break;
+
+       case REQUEST_FAIL_NO_RESPONSE:
+               DEBUG("WARNING: You did not configure the server to accept, or reject the user.  Double-check Auth-Type.");
+               break;
+
+       case REQUEST_FAIL_HOME_SERVER: /* Hmm... we may want only one */
+       case REQUEST_FAIL_HOME_SERVER2:
+       case REQUEST_FAIL_HOME_SERVER3:
+               break;
+
+       case REQUEST_FAIL_SERVER_TIMEOUT:
+               radlog(L_ERR, "TIMEOUT for request %d in module %s, component %s",
+                      request->number,
+                      request->module ? request->module : "<server core>",
+                      request->component ? request->component : "<server core>");
+               break;
+
+       default:                /* no additional messages, or things to do */
+               break;
+       }
 }