]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
[BUG] cookie capture is declared in the frontend but checked on the backend
authorWilly Tarreau <w@1wt.eu>
Fri, 17 Oct 2008 10:01:58 +0000 (12:01 +0200)
committerWilly Tarreau <w@1wt.eu>
Mon, 3 Nov 2008 17:14:36 +0000 (18:14 +0100)
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

index eef6267551e0b391698cf536698ba3de2c49c6fa..bffe7b91a632260b161fa10316d7598bde0e7600 100644 (file)
@@ -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;
                        }