]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
[MAJOR] invalid header offset broke cookies and authentication
authorWilly Tarreau <w@1wt.eu>
Mon, 22 Jan 2007 07:55:47 +0000 (08:55 +0100)
committerWilly Tarreau <w@1wt.eu>
Mon, 22 Jan 2007 07:55:47 +0000 (08:55 +0100)
Since the request is no longer part of the headers, cookies and
authentication did not work anymore. Obvious fix is to add the
request offset to the start pointer.

src/proto_http.c

index fe5917043da386f2b8d21e4de0a4900c649f652d..94d354cbaed35f5a4f1742d358504a4316ad2172 100644 (file)
@@ -3933,10 +3933,10 @@ void manage_client_side_cookies(struct session *t, struct buffer *req)
        /* Iterate through the headers.
         * we start with the start line.
         */
-       old_idx = cur_idx = 0;
-       cur_next = req->data + hreq->req.sor;
+       old_idx = 0;
+       cur_next = req->data + hreq->req.sor + hdr_idx_first_pos(&hreq->hdr_idx);
 
-       while ((cur_idx = hreq->hdr_idx.v[cur_idx].next)) {
+       while ((cur_idx = hreq->hdr_idx.v[old_idx].next)) {
                struct hdr_idx_elem *cur_hdr;
 
                cur_hdr  = &hreq->hdr_idx.v[cur_idx];
@@ -4380,7 +4380,7 @@ int stats_check_uri_auth(struct session *t, struct proxy *backend)
 
                /* FIXME: this should move to an earlier place */
                cur_idx = 0;
-               h = t->req->data + hreq->req.sor;
+               h = t->req->data + hreq->req.sor + hdr_idx_first_pos(&hreq->hdr_idx);
                while ((cur_idx = hreq->hdr_idx.v[cur_idx].next)) {
                        int len = hreq->hdr_idx.v[cur_idx].len;
                        if (len > 14 &&