]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
Simplify state API
authorArran Cudbard-Bell <a.cudbardb@freeradius.org>
Mon, 28 May 2018 08:42:47 +0000 (14:42 +0600)
committerArran Cudbard-Bell <a.cudbardb@freeradius.org>
Mon, 28 May 2018 08:42:47 +0000 (14:42 +0600)
src/include/state.h
src/main/state.c
src/modules/proto_radius/proto_radius_auth.c
src/modules/proto_tacacs/proto_tacacs.c

index a291d492c509486ea29ed28f0a91b9a31b00bd70..f2d1eb52ab0b3600122288ca9ef7bb8b52c1ae9d 100644 (file)
@@ -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
index 3633f51adf3e6dcc4a71798744b115de2a3e22dd..ce29ffeeb7cabb419df3c81dc089ac92db5e7871 100644 (file)
@@ -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");
index 44ac1c7f22a9ff57cc8bfb0f80534a87d1fde13a..c8ef0cc760ef6086921b7ab44148a0b3fdce2457 100644 (file)
@@ -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);
                        }
                }
 
index df7a9272f96817a344832c75a8a9c2e6a307036c..4a2648398c303eb257d1b55b66b849dba8d586c8 100644 (file)
@@ -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);
                        }
                }