When httpd proxies a request to another server, it first creates
an AF_INET socket, then resolves the server name to a sockaddr,
then connects to it. This fails if the server name resolves to
an IPv6 address.
 This patch ensures that the socket is created with the correct
address family (AF_INET6 if the server resolves to an IPv6 address
and AF_INET otherwise).
---
 networking/httpd.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/networking/httpd.c b/networking/httpd.c
index d301d598d..cfcd2a06e 100644
--- a/networking/httpd.c
+++ b/networking/httpd.c
@@ -2396,12 +2396,12 @@ static void handle_incoming_and_exit(const 
len_and_sockaddr *fromAddr)
                int proxy_fd;
                len_and_sockaddr *lsa;
 
-               proxy_fd = socket(AF_INET, SOCK_STREAM, 0);
-               if (proxy_fd < 0)
-                       send_headers_and_exit(HTTP_INTERNAL_SERVER_ERROR);
                lsa = host2sockaddr(proxy_entry->host_port, 80);
                if (lsa == NULL)
                        send_headers_and_exit(HTTP_INTERNAL_SERVER_ERROR);
+               proxy_fd = socket(lsa->u.sa.sa_family, SOCK_STREAM, 0);
+               if (proxy_fd < 0)
+                       send_headers_and_exit(HTTP_INTERNAL_SERVER_ERROR);
                if (connect(proxy_fd, &lsa->u.sa, lsa->len) < 0)
                        send_headers_and_exit(HTTP_INTERNAL_SERVER_ERROR);
                fdprintf(proxy_fd, "%s %s%s%s%s HTTP/%c.%c\r\n",
-- 
2.11.0.rc2

_______________________________________________
busybox mailing list
busybox@busybox.net
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to