From: Arran Cudbard-Bell Date: Mon, 28 May 2018 08:42:47 +0000 (+0600) Subject: Simplify state API X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=fb3f59bfebb0c009b79dce161815f94942a60961;p=thirdparty%2Ffreeradius-server.git Simplify state API --- diff --git a/src/include/state.h b/src/include/state.h index a291d492c50..f2d1eb52ab0 100644 --- a/src/include/state.h +++ b/src/include/state.h @@ -18,7 +18,7 @@ /** * $Id$ * - * @file include/stats.h + * @file include/state.h * @brief Track overarching 'state' of the authentication session over multiple packets. * * @copyright 2014 The FreeRADIUS server project @@ -35,10 +35,10 @@ extern fr_state_tree_t *global_state; fr_state_tree_t *fr_state_tree_init(TALLOC_CTX *ctx, uint32_t max_sessions, uint32_t timeout); -void fr_state_discard(fr_state_tree_t *state, REQUEST *request, RADIUS_PACKET *original); +void fr_state_discard(fr_state_tree_t *state, REQUEST *request); -void fr_state_to_request(fr_state_tree_t *state, REQUEST *request, RADIUS_PACKET *packet); -int fr_request_to_state(fr_state_tree_t *state, REQUEST *request, RADIUS_PACKET *original, RADIUS_PACKET *packet); +void fr_state_to_request(fr_state_tree_t *state, REQUEST *request); +int fr_request_to_state(fr_state_tree_t *state, REQUEST *request); /* * Stats diff --git a/src/main/state.c b/src/main/state.c index 3633f51adf3..ce29ffeeb7c 100644 --- a/src/main/state.c +++ b/src/main/state.c @@ -530,12 +530,12 @@ static fr_state_entry_t *state_entry_find(fr_state_tree_t *state, REQUEST *reque /** Called when sending an Access-Accept/Access-Reject to discard state information * */ -void fr_state_discard(fr_state_tree_t *state, REQUEST *request, RADIUS_PACKET *original) +void fr_state_discard(fr_state_tree_t *state, REQUEST *request) { fr_state_entry_t *entry; PTHREAD_MUTEX_LOCK(&state->mutex); - entry = state_entry_find(state, request, original); + entry = state_entry_find(state, request, request->packet); if (!entry) { PTHREAD_MUTEX_UNLOCK(&state->mutex); return; @@ -568,7 +568,7 @@ void fr_state_discard(fr_state_tree_t *state, REQUEST *request, RADIUS_PACKET *o * * @note Called with the mutex free. */ -void fr_state_to_request(fr_state_tree_t *state, REQUEST *request, RADIUS_PACKET *packet) +void fr_state_to_request(fr_state_tree_t *state, REQUEST *request) { fr_state_entry_t *entry; TALLOC_CTX *old_ctx = NULL; @@ -586,7 +586,7 @@ void fr_state_to_request(fr_state_tree_t *state, REQUEST *request, RADIUS_PACKET PTHREAD_MUTEX_LOCK(&state->mutex); - entry = state_entry_find(state, request, packet); + entry = state_entry_find(state, request, request->packet); if (entry) { (void)talloc_get_type_abort(entry, fr_state_entry_t); if (entry->thawed) { @@ -634,7 +634,7 @@ void fr_state_to_request(fr_state_tree_t *state, REQUEST *request, RADIUS_PACKET * * Also creates a new state entry. */ -int fr_request_to_state(fr_state_tree_t *state, REQUEST *request, RADIUS_PACKET *original, RADIUS_PACKET *packet) +int fr_request_to_state(fr_state_tree_t *state, REQUEST *request) { fr_state_entry_t *entry, *old; request_data_t *data; @@ -650,9 +650,9 @@ int fr_request_to_state(fr_state_tree_t *state, REQUEST *request, RADIUS_PACKET PTHREAD_MUTEX_LOCK(&state->mutex); - old = original ? state_entry_find(state, request, original) : NULL; + old = request->packet ? state_entry_find(state, request, request->packet) : NULL; - entry = state_entry_create(state, request, packet, old); + entry = state_entry_create(state, request, request->reply, old); if (!entry) { PTHREAD_MUTEX_UNLOCK(&state->mutex); RERROR("Creating state entry failed"); diff --git a/src/modules/proto_radius/proto_radius_auth.c b/src/modules/proto_radius/proto_radius_auth.c index 44ac1c7f22a..c8ef0cc760e 100644 --- a/src/modules/proto_radius/proto_radius_auth.c +++ b/src/modules/proto_radius/proto_radius_auth.c @@ -219,7 +219,7 @@ static fr_io_final_t mod_process(void const *instance, REQUEST *request, fr_io_a /* * Grab the VPS and data associated with the State attribute. */ - if (!request->parent) fr_state_to_request(global_state, request, request->packet); + if (!request->parent) fr_state_to_request(global_state, request); /* * Push the conf section into the unlang stack. @@ -535,12 +535,12 @@ static fr_io_final_t mod_process(void const *instance, REQUEST *request, fr_io_a /* * We can't create a valid response */ - if (fr_request_to_state(global_state, request, request->packet, request->reply) < 0) { + if (fr_request_to_state(global_state, request) < 0) { request->reply->code = FR_CODE_DO_NOT_RESPOND; return FR_IO_REPLY; } } else { - fr_state_discard(global_state, request, request->packet); + fr_state_discard(global_state, request); } } diff --git a/src/modules/proto_tacacs/proto_tacacs.c b/src/modules/proto_tacacs/proto_tacacs.c index df7a9272f96..4a2648398c3 100644 --- a/src/modules/proto_tacacs/proto_tacacs.c +++ b/src/modules/proto_tacacs/proto_tacacs.c @@ -236,7 +236,7 @@ static void tacacs_running(REQUEST *request, fr_state_signal_t action) /* FIXME only for seq_id greater than 1 */ if (tacacs_type(request->packet) == TAC_PLUS_AUTHEN) { state_add(request, request->packet); - fr_state_to_request(global_state, request, request->packet); + fr_state_to_request(global_state, request); } RDEBUG("Running 'recv %s' from file %s", cf_section_name2(unlang), cf_filename(unlang)); @@ -251,7 +251,7 @@ static void tacacs_running(REQUEST *request, fr_state_signal_t action) if (request->master_state == REQUEST_STOP_PROCESSING) { stop_processing: if (tacacs_type(request->packet) == TAC_PLUS_AUTHEN) - fr_state_discard(global_state, request, request->packet); + fr_state_discard(global_state, request); goto done; } @@ -413,7 +413,7 @@ send_reply: case TAC_PLUS_AUTHEN_STATUS_RESTART: case TAC_PLUS_AUTHEN_STATUS_ERROR: case TAC_PLUS_AUTHEN_STATUS_FOLLOW: - fr_state_discard(global_state, request, request->packet); + fr_state_discard(global_state, request); break; default: vp = fr_pair_find_by_da(request->packet->vps, @@ -426,7 +426,7 @@ send_reply: /* authentication would continue but seq_no cannot continue */ if (vp->vp_uint8 == 253) { RWARN("Sequence number would wrap, restarting authentication"); - fr_state_discard(global_state, request, request->packet); + fr_state_discard(global_state, request); fr_pair_list_free(&request->reply->vps); MEM(pair_update_reply(&vp, attr_tacacs_authentication_status) >= 0); @@ -434,12 +434,11 @@ send_reply: } else { state_add(request, request->reply); request->reply->code = 1; /* FIXME: util.c:request_verify() */ - fr_request_to_state(global_state, request, - request->packet, request->reply); + fr_request_to_state(global_state, request); } } } else { - fr_state_discard(global_state, request, request->packet); + fr_state_discard(global_state, request); } }