From: Arran Cudbard-Bell Date: Fri, 19 Mar 2021 15:16:47 +0000 (+0000) Subject: Push the process function directly X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=972a732bc1ff1859b37f2d753d5f2715e7f2bd76;p=thirdparty%2Ffreeradius-server.git Push the process function directly --- diff --git a/src/lib/io/worker.c b/src/lib/io/worker.c index 281012cf5e8..39e134b7285 100644 --- a/src/lib/io/worker.c +++ b/src/lib/io/worker.c @@ -759,8 +759,7 @@ nak: /* * Set the entry point for this virtual server. */ - virtual_server_entry_point_set(request); - if (!request->async->process) { + if (virtual_server_entry_point_set(request) < 0) { RERROR("Protocol failed to set 'process' function"); worker_nak(worker, cd, now); return; diff --git a/src/lib/server/virtual_servers.c b/src/lib/server/virtual_servers.c index 39420eff113..21f70467819 100644 --- a/src/lib/server/virtual_servers.c +++ b/src/lib/server/virtual_servers.c @@ -492,17 +492,11 @@ static int server_parse(UNUSED TALLOC_CTX *ctx, void *out, UNUSED void *parent, return 0; } -static unlang_action_t null_method(UNUSED rlm_rcode_t *p_result, UNUSED module_ctx_t const *mctx, UNUSED request_t *request) -{ - RETURN_MODULE_OK; -} - - /** Set the request processing function. * * Short-term hack */ -void virtual_server_entry_point_set(request_t *request) +int virtual_server_entry_point_set(request_t *request) { fr_virtual_server_t *server; fr_process_module_t const *process; @@ -510,20 +504,16 @@ void virtual_server_entry_point_set(request_t *request) module_instance_t *mi = talloc_zero(request, module_instance_t); server = cf_data_value(cf_data_find(request->server_cs, fr_virtual_server_t, "vs")); - if (!server) return; + if (!server) return -1; mi->name = server->process_module->name; if (unlikely(track && track->dynamic && server->dynamic_client_module)) { process = (fr_process_module_t const *) server->dynamic_client_module->module->common; - request->async->process = process->process; - request->async->process_inst = server->dynamic_client_module->data; mi->dl_inst = server->dynamic_client_module; } else { process = (fr_process_module_t const *) server->process_module->module->common; - request->async->process = process->process; - request->async->process_inst = server->process_module->data; mi->dl_inst = server->process_module; } @@ -538,9 +528,9 @@ void virtual_server_entry_point_set(request_t *request) * src/lib/server/module.c, that reserves 0 for "nothing * is initialized". */ - if (unlang_module_push(&request->rcode, request, mi, null_method, true) < 0) { - fr_assert(0); - } + if (unlang_module_push(&request->rcode, request, mi, process->process, true) < 0) return -1; + + return 0; } /** Allow dynamic clients in this virtual server. diff --git a/src/lib/server/virtual_servers.h b/src/lib/server/virtual_servers.h index c68cc67fff6..017bbe68516 100644 --- a/src/lib/server/virtual_servers.h +++ b/src/lib/server/virtual_servers.h @@ -135,7 +135,7 @@ virtual_server_method_t const *virtual_server_section_methods(char const *name1, int virtual_server_get_process_by_name(CONF_SECTION *server, char const *type, module_method_t *method_p, void **ctx); -void virtual_server_entry_point_set(request_t *request); +int virtual_server_entry_point_set(request_t *request); int virtual_server_dynamic_clients_allow(CONF_SECTION *server_cs);