+bool receive_request(connection_t *c, char *request) {
+ int reqno = atoi(request);
+
+ cp();
+
+ if(reqno || *request == '0') {
+ if((reqno < 0) || (reqno >= LAST) || !request_handlers[reqno]) {
+ ifdebug(META)
+ logger(LOG_DEBUG, _("Unknown request from %s (%s): %s"),
+ c->name, c->hostname, request);
+ else
+ logger(LOG_ERR, _("Unknown request from %s (%s)"),
+ c->name, c->hostname);
+
+ return false;
+ } else {
+ ifdebug(PROTOCOL) {
+ ifdebug(META)
+ logger(LOG_DEBUG, _("Got %s from %s (%s): %s"),
+ request_name[reqno], c->name, c->hostname, request);
+ else
+ logger(LOG_DEBUG, _("Got %s from %s (%s)"),
+ request_name[reqno], c->name, c->hostname);
+ }
+ }
+
+ if((c->allow_request != ALL) && (c->allow_request != reqno)) {
+ logger(LOG_ERR, _("Unauthorized request from %s (%s)"), c->name,
+ c->hostname);
+ return false;
+ }
+
+ if(!request_handlers[reqno](c, request)) {
+ /* Something went wrong. Probably scriptkiddies. Terminate. */
+
+ logger(LOG_ERR, _("Error while processing %s from %s (%s)"),
+ request_name[reqno], c->name, c->hostname);
+ return false;
+ }
+ } else {
+ logger(LOG_ERR, _("Bogus data received from %s (%s)"),
+ c->name, c->hostname);
+ return false;
+ }
+
+ return true;