From: Arran Cudbard-Bell Date: Tue, 30 Jan 2018 20:25:47 +0000 (-0700) Subject: unlang_push_section should take a top_frame argument X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=caa8390d17a6d818df8600d00441eae1e552f1c4;p=thirdparty%2Ffreeradius-server.git unlang_push_section should take a top_frame argument --- diff --git a/src/include/unlang.h b/src/include/unlang.h index d5df048b91d..8033ca62569 100644 --- a/src/include/unlang.h +++ b/src/include/unlang.h @@ -40,6 +40,9 @@ typedef enum { UNLANG_ACTION_STOP_PROCESSING //!< Break out of processing the current request (unwind). } unlang_action_t; +#define UNLANG_TOP_FRAME (true) +#define UNLANG_SUB_FRAME (false) + /** Function to call when first evaluating a frame * * @param[in] request The current request. @@ -120,7 +123,7 @@ typedef struct { void unlang_push_function(REQUEST *request, unlang_function_t func, unlang_function_t repeat, void *uctx); -void unlang_push_section(REQUEST *request, CONF_SECTION *cs, rlm_rcode_t default_action); +void unlang_push_section(REQUEST *request, CONF_SECTION *cs, rlm_rcode_t default_action, bool top_frame); rlm_rcode_t unlang_interpret_continue(REQUEST *request); diff --git a/src/main/unlang_interpret.c b/src/main/unlang_interpret.c index 20cbd9e988a..d23730e49ec 100644 --- a/src/main/unlang_interpret.c +++ b/src/main/unlang_interpret.c @@ -666,7 +666,7 @@ static unlang_group_t empty_group = { /** Push a configuration section onto the request stack for later interpretation. * */ -void unlang_push_section(REQUEST *request, CONF_SECTION *cs, rlm_rcode_t action) +void unlang_push_section(REQUEST *request, CONF_SECTION *cs, rlm_rcode_t action, bool top_frame) { unlang_t *instruction = NULL; unlang_stack_t *stack = request->stack; @@ -678,7 +678,7 @@ void unlang_push_section(REQUEST *request, CONF_SECTION *cs, rlm_rcode_t action) if (cs) { instruction = (unlang_t *)cf_data_value(cf_data_find(cs, unlang_group_t, NULL)); if (!instruction) { - RPEDEBUG("Failed to find pre-compiled unlang for section %s %s { ... }", + REDEBUG("Failed to find pre-compiled unlang for section %s %s { ... }", cf_section_name1(cs), cf_section_name2(cs)); } } @@ -689,7 +689,7 @@ void unlang_push_section(REQUEST *request, CONF_SECTION *cs, rlm_rcode_t action) * Push the default action, and the instruction which has * no action. */ - unlang_push(stack, NULL, action, UNLANG_NEXT_STOP, UNLANG_TOP_FRAME); + if (top_frame) unlang_push(stack, NULL, action, UNLANG_NEXT_STOP, UNLANG_TOP_FRAME); if (instruction) unlang_push(stack, instruction, RLM_MODULE_UNKNOWN, UNLANG_NEXT_CONTINUE, UNLANG_SUB_FRAME); RDEBUG4("** [%i] %s - substack begins", stack->depth, __FUNCTION__); @@ -715,7 +715,7 @@ rlm_rcode_t unlang_interpret(REQUEST *request, CONF_SECTION *cs, rlm_rcode_t act * This pushes a new frame onto the stack, which is the * start of a new unlang section... */ - unlang_push_section(request, cs, action); + unlang_push_section(request, cs, action, UNLANG_TOP_FRAME); return unlang_run(request); } diff --git a/src/modules/proto_detail/proto_detail_process.c b/src/modules/proto_detail/proto_detail_process.c index 8e1c0cb4667..fadff4f4ba5 100644 --- a/src/modules/proto_detail/proto_detail_process.c +++ b/src/modules/proto_detail/proto_detail_process.c @@ -68,7 +68,7 @@ static fr_io_final_t mod_process(REQUEST *request, fr_io_action_t action) } RDEBUG("Running 'recv' from file %s", cf_filename(unlang)); - unlang_push_section(request, unlang, RLM_MODULE_NOOP); + unlang_push_section(request, unlang, RLM_MODULE_NOOP, UNLANG_TOP_FRAME); request->request_state = REQUEST_RECV; /* FALL-THROUGH */ @@ -139,7 +139,7 @@ static fr_io_final_t mod_process(REQUEST *request, fr_io_action_t action) if (!unlang) goto send_reply; RDEBUG("Running 'send %s { ... }' from file %s", cf_section_name2(unlang), cf_filename(unlang)); - unlang_push_section(request, unlang, RLM_MODULE_NOOP); + unlang_push_section(request, unlang, RLM_MODULE_NOOP, UNLANG_TOP_FRAME); request->request_state = REQUEST_SEND; /* FALL-THROUGH */ diff --git a/src/modules/proto_ldap_sync/proto_ldap_sync.c b/src/modules/proto_ldap_sync/proto_ldap_sync.c index 6d17a379531..3cec5aaa36d 100644 --- a/src/modules/proto_ldap_sync/proto_ldap_sync.c +++ b/src/modules/proto_ldap_sync/proto_ldap_sync.c @@ -374,7 +374,7 @@ static void request_running(REQUEST *request, fr_state_signal_t action) RDEBUG("Running '%s %s' from file %s", cf_section_name1(unlang), cf_section_name2(unlang), cf_filename(unlang)); - unlang_push_section(request, unlang, RLM_MODULE_NOOP); + unlang_push_section(request, unlang, RLM_MODULE_NOOP, UNLANG_TOP_FRAME); request->request_state = REQUEST_RECV; /* FALL-THROUGH */ diff --git a/src/modules/proto_radius/proto_radius_acct.c b/src/modules/proto_radius/proto_radius_acct.c index cbd5e4a4061..b72b06cc238 100644 --- a/src/modules/proto_radius/proto_radius_acct.c +++ b/src/modules/proto_radius/proto_radius_acct.c @@ -64,7 +64,7 @@ static fr_io_final_t mod_process(REQUEST *request, fr_io_action_t action) } RDEBUG("Running 'recv Accounting-Request' from file %s", cf_filename(unlang)); - unlang_push_section(request, unlang, RLM_MODULE_NOOP); + unlang_push_section(request, unlang, RLM_MODULE_NOOP, UNLANG_TOP_FRAME); request->request_state = REQUEST_RECV; /* FALL-THROUGH */ @@ -118,7 +118,7 @@ static fr_io_final_t mod_process(REQUEST *request, fr_io_action_t action) if (!unlang) goto send_reply; RDEBUG("Running 'send %s' from file %s", cf_section_name2(unlang), cf_filename(unlang)); - unlang_push_section(request, unlang, RLM_MODULE_NOOP); + unlang_push_section(request, unlang, RLM_MODULE_NOOP, UNLANG_TOP_FRAME); request->request_state = REQUEST_SEND; /* FALL-THROUGH */ diff --git a/src/modules/proto_radius/proto_radius_auth.c b/src/modules/proto_radius/proto_radius_auth.c index aeacf54ae75..e722b395330 100644 --- a/src/modules/proto_radius/proto_radius_auth.c +++ b/src/modules/proto_radius/proto_radius_auth.c @@ -166,7 +166,7 @@ static fr_io_final_t mod_process(REQUEST *request, fr_io_action_t action) * Push the conf section into the unlang stack. */ RDEBUG("Running 'recv Access-Request' from file %s", cf_filename(unlang)); - unlang_push_section(request, unlang, RLM_MODULE_REJECT); + unlang_push_section(request, unlang, RLM_MODULE_REJECT, UNLANG_TOP_FRAME); request->request_state = REQUEST_RECV; /* FALL-THROUGH */ @@ -291,7 +291,7 @@ static fr_io_final_t mod_process(REQUEST *request, fr_io_action_t action) } RDEBUG("Running 'authenticate %s' from file %s", cf_section_name2(unlang), cf_filename(unlang)); - unlang_push_section(request, unlang, RLM_MODULE_NOTFOUND); + unlang_push_section(request, unlang, RLM_MODULE_NOTFOUND, UNLANG_TOP_FRAME); request->request_state = REQUEST_PROCESS; /* FALL-THROUGH */ @@ -425,7 +425,7 @@ static fr_io_final_t mod_process(REQUEST *request, fr_io_action_t action) } RDEBUG("Running 'send %s' from file %s", cf_section_name2(unlang), cf_filename(unlang)); - unlang_push_section(request, unlang, RLM_MODULE_NOOP); + unlang_push_section(request, unlang, RLM_MODULE_NOOP, UNLANG_TOP_FRAME); request->request_state = REQUEST_SEND; /* FALL-THROUGH */ diff --git a/src/modules/proto_radius/proto_radius_coa.c b/src/modules/proto_radius/proto_radius_coa.c index 2793c2f3f3a..c71612c7749 100644 --- a/src/modules/proto_radius/proto_radius_coa.c +++ b/src/modules/proto_radius/proto_radius_coa.c @@ -74,7 +74,7 @@ static fr_io_final_t mod_process(REQUEST *request, fr_io_action_t action) } RDEBUG("Running 'recv %s' from file %s", dv->alias, cf_filename(unlang)); - unlang_push_section(request, unlang, RLM_MODULE_NOOP); + unlang_push_section(request, unlang, RLM_MODULE_NOOP, UNLANG_TOP_FRAME); request->request_state = REQUEST_RECV; /* FALL-THROUGH */ @@ -132,7 +132,7 @@ static fr_io_final_t mod_process(REQUEST *request, fr_io_action_t action) */ rerun_nak: RDEBUG("Running 'send %s' from file %s", cf_section_name2(unlang), cf_filename(unlang)); - unlang_push_section(request, unlang, RLM_MODULE_NOOP); + unlang_push_section(request, unlang, RLM_MODULE_NOOP, UNLANG_TOP_FRAME); rad_assert(request->log.unlang_indent == 0); request->request_state = REQUEST_SEND; diff --git a/src/modules/proto_radius/proto_radius_dynamic_client.c b/src/modules/proto_radius/proto_radius_dynamic_client.c index d0ad96b85d6..0a65d94326e 100644 --- a/src/modules/proto_radius/proto_radius_dynamic_client.c +++ b/src/modules/proto_radius/proto_radius_dynamic_client.c @@ -61,7 +61,7 @@ static fr_io_final_t mod_process(REQUEST *request, fr_io_action_t action) } RDEBUG("Running 'new client' from file %s", cf_filename(unlang)); - unlang_push_section(request, unlang, RLM_MODULE_NOOP); + unlang_push_section(request, unlang, RLM_MODULE_NOOP, UNLANG_TOP_FRAME); request->request_state = REQUEST_RECV; /* FALL-THROUGH */ @@ -97,7 +97,7 @@ static fr_io_final_t mod_process(REQUEST *request, fr_io_action_t action) rerun_nak: RDEBUG("Running '%s client' from file %s", cf_section_name1(unlang), cf_filename(unlang)); - unlang_push_section(request, unlang, RLM_MODULE_NOOP); + unlang_push_section(request, unlang, RLM_MODULE_NOOP, UNLANG_TOP_FRAME); request->request_state = REQUEST_SEND; /* FALL-THROUGH */ diff --git a/src/modules/proto_radius/proto_radius_status.c b/src/modules/proto_radius/proto_radius_status.c index 8b9317329e0..a81072cfee4 100644 --- a/src/modules/proto_radius/proto_radius_status.c +++ b/src/modules/proto_radius/proto_radius_status.c @@ -64,7 +64,7 @@ static fr_io_final_t mod_process(REQUEST *request, fr_io_action_t action) } RDEBUG("Running 'recv Status-Server' from file %s", cf_filename(unlang)); - unlang_push_section(request, unlang, RLM_MODULE_NOOP); + unlang_push_section(request, unlang, RLM_MODULE_NOOP, UNLANG_TOP_FRAME); request->request_state = REQUEST_RECV; /* FALL-THROUGH */ @@ -112,7 +112,7 @@ static fr_io_final_t mod_process(REQUEST *request, fr_io_action_t action) rerun_nak: RDEBUG("Running 'send %s' from file %s", cf_section_name2(unlang), cf_filename(unlang)); - unlang_push_section(request, unlang, RLM_MODULE_NOOP); + unlang_push_section(request, unlang, RLM_MODULE_NOOP, UNLANG_TOP_FRAME); request->request_state = REQUEST_SEND; /* FALL-THROUGH */ diff --git a/src/modules/proto_tacacs/proto_tacacs.c b/src/modules/proto_tacacs/proto_tacacs.c index c87aad70eb9..a56dc27f482 100644 --- a/src/modules/proto_tacacs/proto_tacacs.c +++ b/src/modules/proto_tacacs/proto_tacacs.c @@ -195,7 +195,7 @@ static void tacacs_running(REQUEST *request, fr_state_signal_t action) } RDEBUG("Running 'recv %s' from file %s", cf_section_name2(unlang), cf_filename(unlang)); - unlang_push_section(request, unlang, RLM_MODULE_REJECT); + unlang_push_section(request, unlang, RLM_MODULE_REJECT, UNLANG_TOP_FRAME); request->request_state = REQUEST_RECV; /* FALL-THROUGH */ @@ -291,7 +291,7 @@ stop_processing: } RDEBUG("Running 'process %s' from file %s", cf_section_name2(unlang), cf_filename(unlang)); - unlang_push_section(request, unlang, RLM_MODULE_NOTFOUND); + unlang_push_section(request, unlang, RLM_MODULE_NOTFOUND, UNLANG_TOP_FRAME); request->request_state = REQUEST_PROCESS; /* FALL-THROUGH */ @@ -341,7 +341,7 @@ setup_send: if (!unlang) goto send_reply; RDEBUG("Running 'send %s' from file %s", cf_section_name2(unlang), cf_filename(unlang)); - unlang_push_section(request, unlang, RLM_MODULE_NOOP); + unlang_push_section(request, unlang, RLM_MODULE_NOOP, UNLANG_TOP_FRAME); request->request_state = REQUEST_SEND; /* FALL-THROUGH */ diff --git a/src/modules/proto_vmps/proto_vmps_all.c b/src/modules/proto_vmps/proto_vmps_all.c index 8fa5f35f511..9e41fc500c1 100644 --- a/src/modules/proto_vmps/proto_vmps_all.c +++ b/src/modules/proto_vmps/proto_vmps_all.c @@ -62,7 +62,7 @@ static fr_io_final_t mod_process(REQUEST *request, UNUSED fr_io_action_t action) } RDEBUG("Running 'recv %s' from file %s", cf_section_name2(unlang), cf_filename(unlang)); - unlang_push_section(request, unlang, RLM_MODULE_NOOP); + unlang_push_section(request, unlang, RLM_MODULE_NOOP, UNLANG_TOP_FRAME); request->request_state = REQUEST_RECV; /* FALL-THROUGH */ @@ -109,7 +109,7 @@ static fr_io_final_t mod_process(REQUEST *request, UNUSED fr_io_action_t action) rerun_nak: RDEBUG("Running 'send %s' from file %s", cf_section_name2(unlang), cf_filename(unlang)); - unlang_push_section(request, unlang, RLM_MODULE_NOOP); + unlang_push_section(request, unlang, RLM_MODULE_NOOP, UNLANG_TOP_FRAME); request->request_state = REQUEST_SEND; /* FALL-THROUGH */ diff --git a/src/modules/rlm_eap/types/rlm_eap_gtc/rlm_eap_gtc.c b/src/modules/rlm_eap/types/rlm_eap_gtc/rlm_eap_gtc.c index 73290c8ddf3..de330511e46 100644 --- a/src/modules/rlm_eap/types/rlm_eap_gtc/rlm_eap_gtc.c +++ b/src/modules/rlm_eap/types/rlm_eap_gtc/rlm_eap_gtc.c @@ -143,7 +143,7 @@ static rlm_rcode_t mod_process(void *instance, eap_session_t *eap_session) return RLM_MODULE_OK; } - unlang_push_section(request, unlang, RLM_MODULE_FAIL); + unlang_push_section(request, unlang, RLM_MODULE_FAIL, UNLANG_TOP_FRAME); eap_session->process = mod_process_auth_type; diff --git a/src/modules/rlm_eap/types/rlm_eap_mschapv2/rlm_eap_mschapv2.c b/src/modules/rlm_eap/types/rlm_eap_mschapv2/rlm_eap_mschapv2.c index b17978d1fac..e13eaf51456 100644 --- a/src/modules/rlm_eap/types/rlm_eap_mschapv2/rlm_eap_mschapv2.c +++ b/src/modules/rlm_eap/types/rlm_eap_mschapv2/rlm_eap_mschapv2.c @@ -670,7 +670,7 @@ packet_ready: if (!unlang) { rcode = process_authenticate(inst->auth_type_mschap, request); } else { - unlang_push_section(request, unlang, RLM_MODULE_FAIL); + unlang_push_section(request, unlang, RLM_MODULE_FAIL, UNLANG_TOP_FRAME); rcode = unlang_interpret_continue(request); /* diff --git a/src/modules/rlm_eap/types/rlm_eap_peap/peap.c b/src/modules/rlm_eap/types/rlm_eap_peap/peap.c index 3cfe530f03b..0c202d20e8e 100644 --- a/src/modules/rlm_eap/types/rlm_eap_peap/peap.c +++ b/src/modules/rlm_eap/types/rlm_eap_peap/peap.c @@ -939,7 +939,7 @@ rlm_rcode_t eap_peap_process(eap_session_t *eap_session, tls_session_t *tls_sess if (!unlang) { rcode = process_authenticate(enumv->value->vb_uint32, fake); } else { - unlang_push_section(request, unlang, RLM_MODULE_FAIL); + unlang_push_section(request, unlang, RLM_MODULE_FAIL, UNLANG_TOP_FRAME); rcode = unlang_interpret_continue(request); }