From: Alan T. DeKok Date: Thu, 1 Feb 2024 15:41:11 +0000 (-0500) Subject: only mangle our entries X-Git-Tag: release_3_2_4~74 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c5b9bb62fffcd4bf031f6985d2593d13bfffabce;p=thirdparty%2Ffreeradius-server.git only mangle our entries --- diff --git a/src/main/state.c b/src/main/state.c index b115c054e6..23943f00de 100644 --- a/src/main/state.c +++ b/src/main/state.c @@ -40,6 +40,7 @@ typedef struct state_entry_t { struct state_entry_t *next; int tries; + bool ours; TALLOC_CTX *ctx; VALUE_PAIR *vps; @@ -401,6 +402,7 @@ static void state_entry_calc(REQUEST *request, state_entry_t *entry, VALUE_PAIR if (vp->vp_length == sizeof(entry->state) && (!request->proxy || (request->proxy->dst_port == 0))) { memcpy(entry->state, vp->vp_octets, sizeof(entry->state)); + entry->ours = true; /* * Too big? Get the MD5 hash, in order @@ -470,7 +472,7 @@ static state_entry_t *fr_state_entry_create(fr_state_t *state, REQUEST *request, /* * Track State */ - if (!vp) { + if (!vp && old->ours) { memcpy(entry->state, old->state, sizeof(entry->state)); entry->state[1] = entry->state[0] ^ entry->tries; @@ -514,7 +516,7 @@ static state_entry_t *fr_state_entry_create(fr_state_t *state, REQUEST *request, /* * Make unique for different virtual servers handling same request */ - *((uint32_t *)(&entry->state[4])) ^= fr_hash_string(request->server); + if (entry->ours) *((uint32_t *)(&entry->state[4])) ^= fr_hash_string(request->server); /* * Copy server to state in case it's needed for cleanup @@ -549,7 +551,7 @@ static state_entry_t *fr_state_find(REQUEST *request, fr_state_t *state, const c /* Make unique for different virtual servers handling same request */ - if (server) *((uint32_t *)(&my_entry.state[4])) ^= fr_hash_string(server); + if (server && my_entry.ours) *((uint32_t *)(&my_entry.state[4])) ^= fr_hash_string(server); entry = rbtree_finddata(state->tree, &my_entry);