Run packet through processing ONLY if we have a reply
authorAlan T. DeKok <aland@freeradius.org>
Mon, 15 Jun 2009 07:51:38 +0000 (09:51 +0200)
committerAlan T. DeKok <aland@freeradius.org>
Mon, 15 Jun 2009 07:51:38 +0000 (09:51 +0200)
src/main/event.c

index bfcac1f..a7a48df 100644 (file)
@@ -1952,21 +1952,34 @@ static int proxy_to_virtual_server(REQUEST *request)
        radius_handle_request(fake, fun);
        RDEBUG2("<<< Received proxied response code %d from internal virtual server.", fake->reply->code);
 
-       request->proxy_reply = fake->reply;
-       fake->reply = NULL;
+       if (fake->reply->code != 0) {
+               request->proxy_reply = fake->reply;
+               fake->reply = NULL;
+       } else {
+               /*
+                *      There was no response
+                */
+               setup_post_proxy_fail(request);
+       }
 
        ev_request_free(&fake);
 
        process_proxy_reply(request);
 
-       if (request->server) RDEBUG("server %s {",
-                                   request->server != NULL ?
-                                   request->server : ""); 
-       fun(request);
-       
-       if (request->server) RDEBUG("} # server %s",
-                                   request->server != NULL ?
-                                   request->server : "");
+       /*
+        *      Process it through the normal section again, but ONLY
+        *      if we received a proxy reply..
+        */
+       if (!request->proxy_reply) {
+               if (request->server) RDEBUG("server %s {",
+                                           request->server != NULL ?
+                                           request->server : ""); 
+               fun(request);
+               
+               if (request->server) RDEBUG("} # server %s",
+                                           request->server != NULL ?
+                                           request->server : "");
+       }
 
        return 2;               /* success, but NOT '1' !*/
 }