From: Matthew Newton Date: Fri, 28 May 2021 22:52:08 +0000 (+0100) Subject: store virtual server with state X-Git-Tag: release_3_0_23~42 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=07d6fcbdb69ef574f2bda43a4f0c508c7487db0b;p=thirdparty%2Ffreeradius-server.git store virtual server with state --- diff --git a/src/main/state.c b/src/main/state.c index 732cf89deab..15a19458e48 100644 --- a/src/main/state.c +++ b/src/main/state.c @@ -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);