BUG/MINOR: rhttp: initialize session origin after preconnect reversal

Since the following commit, session is initialized early for rhttp
preconnect.

  12c40c25a9
  MEDIUM: rhttp: create session for active preconnect

Session origin member was not set. However, this prevents several
session fetches to not work as expected. Worst, this caused a regression
as previously session was created after reversal with origin member
defined. This was reported by user William Manley on the mailing-list
which rely on set-dst.

One possible fix would be to set origin on session_new(). However, as
this is done before reversal, some session members may be incorrectly
initialized, in particular source and destination address.

Thus, session origin is only set after reversal is completed. This
ensures that session fetches have the same behavior on standard
connections and reversable ones.

This does not need to be backported.
This commit is contained in:
Amaury Denoyelle 2024-05-23 15:06:52 +02:00
parent 47168e217a
commit 98ed11b0c5
2 changed files with 6 additions and 0 deletions

View File

@ -2798,6 +2798,9 @@ int conn_reverse(struct connection *conn)
conn->target = &l->obj_type;
conn->flags |= CO_FL_ACT_REVERSING;
task_wakeup(l->rx.rhttp.task, TASK_WOKEN_RES);
/* Initialize session origin after reversal. Mandatory for several fetches. */
sess->origin = &conn->obj_type;
}
/* Invert source and destination addresses if already set. */

View File

@ -62,6 +62,9 @@ static struct connection *new_reverse_conn(struct listener *l, struct server *sr
HA_ATOMIC_INC(&th_ctx->nb_rhttp_conns);
/* session origin is only set after reversal. This ensures fetches
* will be functional only after reversal, in particular src/dst.
*/
sess = session_new(l->bind_conf->frontend, l, NULL);
if (!sess)
goto err;