MEDIUM: sessions: Introduce session flags.
Add session flags, and add a new flag, SESS_FL_PREFER_LAST, to be set when
we use NTLM authentication, and we should reuse the last connection. This
should fix using NTLM with HTX. This totally replaces TX_PREFER_LAST.
This should be backported to 1.9.
diff --git a/src/backend.c b/src/backend.c
index 88991a8..b8e56cf 100644
--- a/src/backend.c
+++ b/src/backend.c
@@ -647,14 +647,14 @@
s->target = NULL;
if ((s->be->lbprm.algo & BE_LB_KIND) != BE_LB_KIND_HI &&
- ((s->txn && s->txn->flags & TX_PREFER_LAST) ||
+ ((s->sess->flags & SESS_FL_PREFER_LAST) ||
(s->be->options & PR_O_PREF_LAST))) {
struct sess_srv_list *srv_list;
list_for_each_entry(srv_list, &s->sess->srv_list, srv_list) {
struct server *tmpsrv = objt_server(srv_list->target);
if (tmpsrv && tmpsrv->proxy == s->be &&
- ((s->txn && s->txn->flags & TX_PREFER_LAST) ||
+ ((s->sess->flags & SESS_FL_PREFER_LAST) ||
(!s->be->max_ka_queue ||
server_has_room(tmpsrv) || (
tmpsrv->nbpend + 1 < s->be->max_ka_queue))) &&
diff --git a/src/proto_http.c b/src/proto_http.c
index b47fbe6..bfdb199 100644
--- a/src/proto_http.c
+++ b/src/proto_http.c
@@ -3542,7 +3542,7 @@
* it's better to do it (at least it helps with debugging), at
* least for non-deterministic load balancing algorithms.
*/
- s->txn->flags |= TX_PREFER_LAST;
+ s->sess->flags |= SESS_FL_PREFER_LAST;
}
/* Never ever allow to reuse a connection from a non-reuse backend */
diff --git a/src/proto_htx.c b/src/proto_htx.c
index 27150a8..6c51055 100644
--- a/src/proto_htx.c
+++ b/src/proto_htx.c
@@ -1777,8 +1777,10 @@
ctx.blk = NULL;
while (http_find_header(htx, hdr, &ctx, 0)) {
if ((ctx.value.len >= 9 && word_match(ctx.value.ptr, ctx.value.len, "Negotiate", 9)) ||
- (ctx.value.len >= 4 && word_match(ctx.value.ptr, ctx.value.len, "NTLM", 4)))
+ (ctx.value.len >= 4 && word_match(ctx.value.ptr, ctx.value.len, "NTLM", 4))) {
+ sess->flags |= SESS_FL_PREFER_LAST;
srv_conn->flags |= CO_FL_PRIVATE;
+ }
}
}
diff --git a/src/session.c b/src/session.c
index c77f1e9..718b97f 100644
--- a/src/session.c
+++ b/src/session.c
@@ -59,6 +59,7 @@
_HA_ATOMIC_ADD(&jobs, 1);
LIST_INIT(&sess->srv_list);
sess->idle_conns = 0;
+ sess->flags = SESS_FL_NONE;
}
return sess;
}