]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
add and use separate function for sending to a proxy listener
authorAlan T. DeKok <aland@freeradius.org>
Wed, 31 Mar 2021 13:05:16 +0000 (09:05 -0400)
committerAlan T. DeKok <aland@freeradius.org>
Fri, 2 Apr 2021 19:12:23 +0000 (15:12 -0400)
src/include/listen.h
src/main/listen.c
src/main/process.c

index 2d830168821af4514d55122ab889a974e8bcf7f0..a97511db83183f5e6d8deeb0c9a28ee4a87cdc8b 100644 (file)
@@ -85,6 +85,16 @@ struct rad_listen {
 
        rad_listen_recv_t recv;
        rad_listen_send_t send;
+
+       /*
+        *      We don't need a proxy_recv, because the main loop in
+        *      process.c calls listener->recv(), and we don't know
+        *      what kind of packet we're receiving until we receive
+        *      it.
+        */
+       rad_listen_send_t proxy_send;
+
+
        rad_listen_encode_t encode;
        rad_listen_decode_t decode;
        rad_listen_encode_t proxy_encode;
index ad9b8fe3d146cf9961d4810110da2dd9e3232106..46864415ddfeb28b98924bfa3624c5f7cf92c619 100644 (file)
@@ -1408,7 +1408,7 @@ static int acct_socket_send(rad_listen_t *listener, REQUEST *request)
 static int proxy_socket_send(rad_listen_t *listener, REQUEST *request)
 {
        rad_assert(request->proxy_listener == listener);
-       rad_assert(listener->send == proxy_socket_send);
+       rad_assert(listener->proxy_send == proxy_socket_send);
 
        if (rad_send(request->proxy, NULL,
                     request->home_server->secret) < 0) {
@@ -2795,6 +2795,7 @@ static rad_listen_t *listen_alloc(TALLOC_CTX *ctx, RAD_LISTEN_TYPE type)
                this->encode = master_listen[this->type].encode;
                this->decode = master_listen[this->type].decode;
        } else {
+               this->proxy_send = master_listen[this->type].send;
                this->proxy_encode = master_listen[this->type].encode;
                this->proxy_decode = master_listen[this->type].decode;
        }
@@ -2895,7 +2896,7 @@ rad_listen_t *proxy_new_listener(TALLOC_CTX *ctx, home_server_t *home, uint16_t
                }
 
                this->recv = proxy_tls_recv;
-               this->send = proxy_tls_send;
+               this->proxy_send = proxy_tls_send;
        }
 #endif
 #endif
index 4e98b88a1f45f341903fa1fef789837e0820c5e2..1e5cb6acc270310bd8645d540a1a5a1c51aff0ef 100644 (file)
@@ -3473,7 +3473,7 @@ static int request_proxy(REQUEST *request)
        /*
         *      And send the packet.
         */
-       request->proxy_listener->send(request->proxy_listener, request);
+       request->proxy_listener->proxy_send(request->proxy_listener, request);
        return 1;
 }