]> 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>
Thu, 22 Jul 2021 13:55:18 +0000 (09:55 -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 705b56996422019a7b4918c3a8b3ec662d75ac2d..6bc90e542646645a0207372f93b569b2fe4c5e86 100644 (file)
@@ -1445,7 +1445,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) {
@@ -2832,6 +2832,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;
        }
@@ -2932,7 +2933,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 d1d03ac771aad39a3bfa0749bda6e02c1ff3f252..a32a934ce2430cf57e9d101ecc990e12f427cffa 100644 (file)
@@ -3478,7 +3478,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;
 }