From owner-freebsd-ports@FreeBSD.ORG Wed Jan 31 09:12:13 2007 Return-Path: X-Original-To: freebsd-ports@freebsd.org Delivered-To: freebsd-ports@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id D631716A403 for ; Wed, 31 Jan 2007 09:12:13 +0000 (UTC) (envelope-from jhay@meraka.csir.co.za) Received: from zibbi.meraka.csir.co.za (zibbi.meraka.csir.co.za [146.64.24.58]) by mx1.freebsd.org (Postfix) with ESMTP id 606A613C471 for ; Wed, 31 Jan 2007 09:12:13 +0000 (UTC) (envelope-from jhay@meraka.csir.co.za) Received: by zibbi.meraka.csir.co.za (Postfix, from userid 3973) id B64E233CA7; Wed, 31 Jan 2007 10:54:42 +0200 (SAST) Date: Wed, 31 Jan 2007 10:54:42 +0200 From: John Hay To: freebsd-ports@freebsd.org Message-ID: <20070131085442.GB27356@zibbi.meraka.csir.co.za> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4.2.1i Subject: patch for www/ffproxy X-BeenThere: freebsd-ports@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting software to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 31 Jan 2007 09:12:13 -0000 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