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-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=922e071b9cf3c70f896fd448dd2f3dfbd85fdb27;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 193e2e8bab..0cd6cdb919 100644 --- a/src/main/process.c +++ b/src/main/process.c @@ -2540,7 +2540,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 @@ -3319,6 +3323,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]; @@ -4482,6 +4495,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; }