Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 31 Jan 2007 10:54:42 +0200
From:      John Hay <jhay@meraka.org.za>
To:        freebsd-ports@freebsd.org
Subject:   patch for www/ffproxy
Message-ID:  <20070131085442.GB27356@zibbi.meraka.csir.co.za>

next in thread | raw e-mail | index | archive | help
Hi,

I found that an ipv6 client's ipv6 address would show up wrong in the
logs and that the address could not be resolved. Access control also
did not work. On FreeBSD struct sockaddr is too small to hold an ipv6
address. With this patch everything seems to work... for me. :-)


--- socket.c.orig	Fri Dec 31 10:59:54 2004
+++ socket.c	Thu Nov  9 20:19:53 2006
@@ -58,7 +58,7 @@
 open_socket(void)
 {
 	extern struct cfg config;
-	struct sockaddr claddr;
+	struct sockaddr_storage claddr;
 	struct addrinfo hints[2], *res;
 	struct clinfo  *clinfo;
 	struct pollfd	s[2];
@@ -135,7 +135,6 @@
 	if (config.bind_ipv6)
 		info("waiting for requests on %s port %d (IPv6)", *config.ipv6 ? config.ipv6 : "(any)", config.port);
 
-	claddr_len = sizeof(claddr);
 	config.ccount = 0;
 	cl = 0;
 	isipv4 = config.bind_ipv4;
@@ -160,13 +159,14 @@
 			}
 		} else
 			st = s[0].fd;
+		claddr_len = sizeof(claddr);
 		if ((cl = accept(st, (struct sockaddr *) & claddr, &claddr_len)) == -1) {
 			DEBUG(("open_socket() => accept() failed"));
 			continue;
 		}
 
 		DEBUG(("open_socket() => connection, checking access"));
-		clinfo = identify(&claddr, (socklen_t) isipv4 ? sizeof(struct sockaddr_in) : sizeof(struct sockaddr_in6));
+		clinfo = identify((struct sockaddr *)&claddr, claddr_len);
 		if (check_access(clinfo) != 0) {
 			DEBUG(("open_socket() => no access"));
 			if (config.logrequests)


John
-- 
John Hay -- John.Hay@meraka.csir.co.za / jhay@FreeBSD.org



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20070131085442.GB27356>