]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
store virtual server with state
authorMatthew Newton <matthew-git@newtoncomputing.co.uk>
Fri, 28 May 2021 22:52:08 +0000 (23:52 +0100)
committerAlan T. DeKok <aland@freeradius.org>
Mon, 31 May 2021 12:27:14 +0000 (08:27 -0400)
src/main/state.c

index 732cf89deab2a9d6e8fed368b08da3b4928bf696..15a19458e48ffe9800d569390145692a6385f896 100644 (file)
@@ -43,6 +43,8 @@ typedef struct state_entry_t {
        TALLOC_CTX              *ctx;
        VALUE_PAIR              *vps;
 
+       char            *server;
+
        void            *opaque;
        void            (*free_opaque)(void *opaque);
 } state_entry_t;
@@ -319,7 +321,17 @@ static state_entry_t *fr_state_create(fr_state_t *state, REQUEST *request, RADIU
 
        /*      Make unique for different virtual servers handling same request
         */
-       if (request->server) *((uint32_t *)(&entry->state[4])) ^= fr_hash_string(request->server);
+       if (request->server) {
+               /*
+                *      Make unique for different virtual servers handling same request
+                */
+               *((uint32_t *)(&entry->state[4])) ^= fr_hash_string(request->server);
+
+               /*
+                *      Copy server to state in case it's needed for cleanup
+                */
+               entry->server = talloc_strdup(entry, request->server);
+       }
 
        if (!rbtree_insert(state->tree, entry)) {
                talloc_free(entry);