[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 a83c5ba9315a7c47cda2698280b7e49a9d3eb374)
This commit is contained in:
Willy Tarreau 2008-10-17 12:01:58 +02:00
parent 63b76be713
commit bfca9e51b7

View File

@ -2009,7 +2009,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);
@ -3193,7 +3193,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);
@ -4600,10 +4600,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:' */
@ -4635,18 +4637,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;
}