From 76336d743b494406ed9e384bc4472723360cb6f2 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Fri, 17 Oct 2008 12:01:58 +0200 Subject: [PATCH] [BUG] cookie capture is declared in the frontend but checked on the backend Cookie capture would only work by pure luck on the request but did never work on responses since only the backend was checked. The fix consists in always checking frontend for cookie captures. (cherry picked from commit bfca9e51b77b856593a3c4a3215a8e0397e7cdba) --- src/proto_http.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/proto_http.c b/src/proto_http.c index eef626755..bffe7b91a 100644 --- a/src/proto_http.c +++ b/src/proto_http.c @@ -1959,7 +1959,7 @@ int process_cli(struct session *t) * the fields will stay coherent and the URI will not move. * This should only be performed in the backend. */ - if ((t->be->cookie_name || t->be->appsession_name || t->be->capture_name) + if ((t->be->cookie_name || t->be->appsession_name || t->fe->capture_name) && !(txn->flags & (TX_CLDENY|TX_CLTARPIT))) manage_client_side_cookies(t, req); @@ -2993,7 +2993,7 @@ int process_srv(struct session *t) /* * 4: check for server cookie. */ - if (t->be->cookie_name || t->be->appsession_name || t->be->capture_name + if (t->be->cookie_name || t->be->appsession_name || t->fe->capture_name || (t->be->options & PR_O_CHK_CACHE)) manage_server_side_cookies(t, rep); @@ -4346,10 +4346,12 @@ void manage_server_side_cookies(struct session *t, struct buffer *rtr) txn->flags |= TX_SCK_ANY; - /* maybe we only wanted to see if there was a set-cookie */ + /* maybe we only wanted to see if there was a set-cookie. Note that + * the cookie capture is declared on the frontend. + */ if (t->be->cookie_name == NULL && t->be->appsession_name == NULL && - t->be->capture_name == NULL) + t->fe->capture_name == NULL) return; p1 = cur_ptr + val; /* first non-space char after 'Set-Cookie:' */ @@ -4381,18 +4383,18 @@ void manage_server_side_cookies(struct session *t, struct buffer *rtr) */ /* first, let's see if we want to capture it */ - if (t->be->capture_name != NULL && + if (t->fe->capture_name != NULL && txn->srv_cookie == NULL && - (p4 - p1 >= t->be->capture_namelen) && - memcmp(p1, t->be->capture_name, t->be->capture_namelen) == 0) { + (p4 - p1 >= t->fe->capture_namelen) && + memcmp(p1, t->fe->capture_name, t->fe->capture_namelen) == 0) { int log_len = p4 - p1; if ((txn->srv_cookie = pool_alloc2(pool2_capture)) == NULL) { Alert("HTTP logging : out of memory.\n"); } - if (log_len > t->be->capture_len) - log_len = t->be->capture_len; + if (log_len > t->fe->capture_len) + log_len = t->fe->capture_len; memcpy(txn->srv_cookie, p1, log_len); txn->srv_cookie[log_len] = 0; } -- 2.47.3