]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: connection: make proxy protocol v1 support the UNKNOWN protocol
authorWilly Tarreau <w@1wt.eu>
Sat, 14 Jun 2014 09:41:36 +0000 (11:41 +0200)
committerWilly Tarreau <w@1wt.eu>
Sat, 14 Jun 2014 09:46:02 +0000 (11:46 +0200)
If haproxy receives a connection over a unix socket and forwards it to
another haproxy instance using proxy protocol v1, it sends an UNKNOWN
protocol, which is rejected by the other side. Make the receiver accept
the UNKNOWN protocol as per the spec, and only use the local connection's
address for this.

src/connection.c

index 91ad0b63ddc4dfc299df9b869418045d2ada073c..93db7e5acc3814080990fabfdea5121a413102fe 100644 (file)
@@ -286,7 +286,7 @@ int conn_recv_proxy(struct connection *conn, int flag)
        }
 
        line += 6;
-       if (trash.len < 18) /* shortest possible line */
+       if (trash.len < 9) /* shortest possible line */
                goto missing;
 
        if (!memcmp(line, "TCP4 ", 5) != 0) {
@@ -391,8 +391,12 @@ int conn_recv_proxy(struct connection *conn, int flag)
                ((struct sockaddr_in6 *)&conn->addr.to)->sin6_port          = htons(dport);
                conn->flags |= CO_FL_ADDR_FROM_SET | CO_FL_ADDR_TO_SET;
        }
+       else if (memcmp(line, "UNKNOWN\r\n", 9) == 0) {
+               /* This can be a UNIX socket forwarded by an haproxy upstream */
+               line += 9;
+       }
        else {
-               /* The protocol does not match something known (TCP4/TCP6) */
+               /* The protocol does not match something known (TCP4/TCP6/UNKNOWN) */
                conn->err_code = CO_ER_PRX_BAD_PROTO;
                goto fail;
        }