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;
/*
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;
+ }
}
}
*/
} 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,
* 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;
* 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;
+ }
}