]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: listener: use sockaddr_in6 for IPv6
authorWilly Tarreau <w@1wt.eu>
Fri, 4 Dec 2020 13:28:23 +0000 (14:28 +0100)
committerWilly Tarreau <w@1wt.eu>
Fri, 4 Dec 2020 13:28:23 +0000 (14:28 +0100)
A copy-paste bug between {tcp,udp}{4,6}_add_listener() resulted in
using a struct sockaddr_in to set the TCP/UDP port while it ought to
be a struct sockaddr_in6. Fortunately, the port has the same offset
(2) in both so it was harmless. A cleaner way to proceed would be
to have a set_port function exported by the address family layer.

This needs to be backported to 2.3.

src/proto_tcp.c
src/proto_udp.c

index 06adf9b4789e6b4e3da86e1db1cda6f89f21e7cf..e8e6c766c919fab2dd0a47d3e59c724338be48c4 100644 (file)
@@ -743,7 +743,7 @@ static void tcpv6_add_listener(struct listener *listener, int port)
                return;
        listener_set_state(listener, LI_ASSIGNED);
        listener->rx.proto = &proto_tcpv6;
-       ((struct sockaddr_in *)(&listener->rx.addr))->sin_port = htons(port);
+       ((struct sockaddr_in6 *)(&listener->rx.addr))->sin6_port = htons(port);
        LIST_ADDQ(&proto_tcpv6.receivers, &listener->rx.proto_list);
        proto_tcpv6.nb_receivers++;
 }
index ae5562afb2e6345754bb8ad2d44f6898dcd48972..e38ab0d114f0294588b21e8698faabadcf31a253 100644 (file)
@@ -167,7 +167,7 @@ static void udp6_add_listener(struct listener *listener, int port)
                return;
        listener_set_state(listener, LI_ASSIGNED);
        listener->rx.proto = &proto_udp6;
-       ((struct sockaddr_in *)(&listener->rx.addr))->sin_port = htons(port);
+       ((struct sockaddr_in6 *)(&listener->rx.addr))->sin6_port = htons(port);
        LIST_ADDQ(&proto_udp6.receivers, &listener->rx.proto_list);
        proto_udp6.nb_receivers++;
 }