mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2024-12-13 23:14:46 +00:00
[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:
parent
63b76be713
commit
bfca9e51b7
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user