From: Alan T. DeKok Date: Fri, 2 Apr 2021 19:34:55 +0000 (-0400) Subject: for non-proxy sockets, run CoA / Disconnect through recv_coa_server X-Git-Tag: release_3_0_24~139 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b6d4178d8bfbee3ed19c366d5591b6d87791b097;p=thirdparty%2Ffreeradius-server.git for non-proxy sockets, run CoA / Disconnect through recv_coa_server which is the CoA server used to send CoA requests to the NAS, but whatever. It's copied from the virtual server in the listener, and is NOT the same as home->virtual_server --- diff --git a/src/main/process.c b/src/main/process.c index 63b2a6d24c9..31185a94c60 100644 --- a/src/main/process.c +++ b/src/main/process.c @@ -2545,7 +2545,11 @@ static int process_proxy_reply(REQUEST *request, RADIUS_PACKET *reply) request->server = request->home_server->virtual_server; #ifdef WITH_COA_TUNNEL - } else if (request->home_server && request->home_server->recv_coa_server) { + } else if (request->proxy_listener && (request->proxy_listener->type != RAD_LISTEN_PROXY)) { + rad_assert((request->proxy->code == PW_CODE_COA_REQUEST) || + (request->proxy->code == PW_CODE_DISCONNECT_REQUEST)); + rad_assert(request->home_server != NULL); + rad_assert(request->home_server->recv_coa_server != NULL); request->server = request->home_server->recv_coa_server; #endif @@ -3324,6 +3328,15 @@ add_proxy_state: if (request->home_server && request->home_server->virtual_server) { request->server = request->home_server->virtual_server; +#ifdef WITH_COA_TUNNEL + } else if (request->proxy_listener && (request->proxy_listener->type != RAD_LISTEN_PROXY)) { + rad_assert((request->packet->code == PW_CODE_COA_REQUEST) || + (request->packet->code == PW_CODE_DISCONNECT_REQUEST)); + rad_assert(request->home_server != NULL); + rad_assert(request->home_server->recv_coa_server != NULL); + request->server = request->home_server->recv_coa_server; +#endif + } else { char buffer[128]; @@ -4497,6 +4510,15 @@ set_packet_type: if (coa->home_server && coa->home_server->virtual_server) { coa->server = coa->home_server->virtual_server; +#ifdef WITH_COA_TUNNEL + } else if (coa->proxy_listener && (coa->proxy_listener->type != RAD_LISTEN_PROXY)) { + rad_assert((coa->proxy->code == PW_CODE_COA_REQUEST) || + (coa->proxy->code == PW_CODE_DISCONNECT_REQUEST)); + rad_assert(coa->home_server != NULL); + rad_assert(coa->home_server->recv_coa_server != NULL); + coa->server = coa->home_server->recv_coa_server; +#endif + } else if (coa->home_pool && coa->home_pool->virtual_server) { coa->server = coa->home_pool->virtual_server; }