]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
Ensure that replication doesn't affect request->proxy
authorAlan T. DeKok <aland@freeradius.org>
Wed, 30 Jan 2013 14:30:49 +0000 (09:30 -0500)
committerAlan T. DeKok <aland@freeradius.org>
Wed, 30 Jan 2013 14:30:49 +0000 (09:30 -0500)
src/modules/rlm_replicate/rlm_replicate.c

index c3287416a2fa028ee191028b00e83992000c28a6..fae31c05208fbad8e6902fc0a7547cf816979735 100644 (file)
@@ -26,6 +26,7 @@ RCSID("$Id$")
 
 #include <freeradius-devel/radiusd.h>
 #include <freeradius-devel/modules.h>
+#include <freeradius-devel/rad_assert.h>
 
 
 static void cleanup(RADIUS_PACKET *packet)
@@ -49,6 +50,7 @@ static int replicate_packet(void *instance, REQUEST *request)
 
        instance = instance;    /* -Wunused */
        last = request->config_items;
+       rad_assert(request->proxy == NULL);
 
        /*
         *      Send as many packets as necessary to different
@@ -74,7 +76,8 @@ static int replicate_packet(void *instance, REQUEST *request)
                        RDEBUG2("ERROR: Cannot replicate unknown packet code %d",
                                request->packet->code);
                        cleanup(packet);
-                       return RLM_MODULE_FAIL;
+                       rcode = RLM_MODULE_FAIL;
+                       break;
                
                case PW_AUTHENTICATION_REQUEST:
                        pool = realm->auth_pool;
@@ -109,7 +112,10 @@ static int replicate_packet(void *instance, REQUEST *request)
                
                if (!packet) {
                        packet = rad_alloc(1);
-                       if (!packet) return RLM_MODULE_FAIL;
+                       if (!packet) {
+                               rcode = RLM_MODULE_FAIL;
+                               break;
+                       }
                        packet->sockfd = -1;
                        packet->code = request->packet->code;
                        packet->id = fr_rand() & 0xff;
@@ -118,14 +124,16 @@ static int replicate_packet(void *instance, REQUEST *request)
                        if (packet->sockfd < 0) {
                                RDEBUG("ERROR: Failed opening socket: %s", fr_strerror());
                                cleanup(packet);
-                               return RLM_MODULE_FAIL;
+                               rcode = RLM_MODULE_FAIL;
+                               break;
                        }
 
                        packet->vps = paircopy(request->packet->vps);
                        if (!packet->vps) {
                                RDEBUG("ERROR: Out of memory!");
                                cleanup(packet);
-                               return RLM_MODULE_FAIL;
+                               rcode = RLM_MODULE_FAIL;
+                               break;
                        }
 
                        /*
@@ -171,7 +179,8 @@ static int replicate_packet(void *instance, REQUEST *request)
                        RDEBUG("ERROR: Failed replicating packet: %s",
                               fr_strerror());
                        cleanup(packet);
-                       return RLM_MODULE_FAIL;
+                       rcode = RLM_MODULE_FAIL;
+                       break;
                }
 
                /*
@@ -181,6 +190,8 @@ static int replicate_packet(void *instance, REQUEST *request)
        }
 
        cleanup(packet);
+       rad_free(&request->proxy);
+
        return rcode;
 }