Skip to content

Commit 9c9aeea

Browse files
committed
push fallback virtual server to child thread. Fixes #5679
1 parent 8efdca0 commit 9c9aeea

2 files changed

Lines changed: 21 additions & 2 deletions

File tree

src/include/radiusd.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,7 @@ struct rad_request {
262262

263263
RAD_REQUEST_FUNP handle; //!< The function to call to move the request through the
264264
//!< various server configuration sections.
265+
RAD_REQUEST_FUNP original_handle; //!< as it says
265266
rlm_rcode_t rcode; //!< Last rcode returned by a module
266267
char const *module; //!< Module the request is currently being processed by.
267268
char const *component; //!< Section the request is in.

src/main/process.c

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3909,7 +3909,7 @@ static int proxy_to_virtual_server(REQUEST *request)
39093909
uint32_t error_cause = 0;
39103910

39113911
if (request->packet->dst_port == 0) {
3912-
WARN("Cannot proxy an internal request");
3912+
RWDEBUG("Cannot proxy an internal request");
39133913
return 0;
39143914
}
39153915

@@ -3968,6 +3968,17 @@ static int proxy_to_virtual_server(REQUEST *request)
39683968
return -1; /* so we call request_finish */
39693969
}
39703970

3971+
static int rad_proxy_to_virtual_server(REQUEST *request)
3972+
{
3973+
fr_assert(request->original_handle != NULL);
3974+
3975+
request->handle = request->original_handle;
3976+
request->original_handle = NULL;
3977+
3978+
(void) proxy_to_virtual_server(request);
3979+
3980+
return RLM_MODULE_OK;
3981+
}
39713982

39723983
static int request_proxy(REQUEST *request)
39733984
{
@@ -4145,10 +4156,17 @@ static int request_proxy_anew(REQUEST *request)
41454156
* server.
41464157
*/
41474158
if (home->virtual_server) {
4159+
if (request->packet->dst_port == 0) {
4160+
RWDEBUG("Cannot proxy an internal request");
4161+
goto post_proxy_fail;
4162+
}
4163+
41484164
request->home_server = home;
41494165
TALLOC_FREE(request->proxy);
41504166

4151-
(void) proxy_to_virtual_server(request);
4167+
request->original_handle = request->handle;
4168+
request->handle = rad_proxy_to_virtual_server;
4169+
request_queue_or_run(request, request->process);
41524170
return 0;
41534171
}
41544172

0 commit comments

Comments
 (0)