In message <20050613223233.12642.qmail@squid-cache.org>
on 13 Jun 2005 22:32:33 -0000,
hno@squid-cache.org wrote:
> hno 2005/06/13 16:32:33 MDT
>
> Modified files: (Branch: SQUID_2_5)
> src client_side.c
> Log:
> Bug #1313: Core dump with STABLE10 and --ipf-transparent-proxy with
> FreeBSD 5.3 /5.4
>
> This corrects a crash if built with --ipf-transparent-proxy and opening
> the NAT device failed.
This problem existed on NetBSD, too. And there are some patches to
fix really --ipf-transparent-proxy support with IP Filter 4.x.
Attached patch includes a little more than theses changes and
essential changes are:
configure: check existence of <netinet/ipl.h>; this header should be
installed IP Filter 4.0alpha27 and later.
include/autoconf.h.in: Add HAVE_NETINET_IPL_H.
src/client_side.c:
- Include <netinet/ipl.h> if it exists.
- Use ipfobj structure for IP Filter 4.0alpha27 and later.
Best regards.
-- Takahiro Kambe <taca@back-street.net> ---------------------------------------------------------------- $NetBSD: patch-an,v 1.7 2005/06/07 14:19:10 taca Exp $ --- configure.in.orig 2005-05-17 07:41:14.000000000 +0900 +++ configure.in @@ -493,7 +493,7 @@ AC_ARG_ENABLE(snmp, [ if test "$enableval" = "yes" ; then echo "SNMP monitoring enabled" AC_DEFINE(SQUID_SNMP) - SNMPLIB='-L../snmplib -lsnmp' + SNMPLIB='../snmplib/libsnmp.a' AM_CONDITIONAL(USE_SNMP, true) SNMP_MAKEFILE=./snmplib/Makefile makesnmplib=snmplib @@ -1282,6 +1282,7 @@ AC_CHECK_HEADERS( \ libc.h \ limits.h \ linux/netfilter_ipv4.h \ + machine/byte_swap.h \ malloc.h \ math.h \ memory.h \ @@ -1296,6 +1297,7 @@ AC_CHECK_HEADERS( \ netinet/ip_fil_compat.h \ netinet/ip_fil.h \ netinet/ip_nat.h \ + netinet/ipl.h \ openssl/err.h \ openssl/md5.h \ openssl/ssl.h \ @@ -1507,8 +1509,17 @@ AC_CHECK_TYPE(pid_t, int) AC_CHECK_TYPE(size_t, unsigned int) AC_CHECK_TYPE(ssize_t, int) AC_CHECK_TYPE(off_t, int) -AC_CHECK_TYPE(mode_t, u_short) -AC_CHECK_TYPE(fd_mask, int) +AC_CHECK_TYPE(mode_t, unsigned short) + +dnl Check for type fd_mask +AC_CACHE_CHECK(for fd_set,ac_cv_have_fd_mask, [ + AC_TRY_COMPILE([#include <sys/types.h> +#include <sys/time.h> +#include <sys/unistd.h>], + [fd_mask fds;], + ac_cv_have_fd_mask="yes", + ac_cv_have_fd_mask="no") +]) AC_CHECK_SIZEOF_SYSTYPE(off_t, 4) AC_CHECK_SIZEOF_SYSTYPE(size_t, 4) @@ -1716,8 +1727,8 @@ if test "$GCC" = "yes"; then GCCVER=`$CC -v 2>&1 | awk '$2 == "version" {print $3}'` case "$GCCVER" in [2.95.[123]]) - echo "Removing -O for gcc on $host with GCC $GCCVER" - CFLAGS="`echo $CFLAGS | sed -e 's/-O[[0-9]]*//'`" + echo "Making -O\[[2-9\]] to -O for gcc on $host with GCC $GCCVER" + CFLAGS="`echo $CFLAGS | sed -e 's/-O[[0-9]]*/-O/'`" ;; esac fi ---------------------------------------------------------------- $NetBSD: patch-bb,v 1.6 2005/06/07 14:19:10 taca Exp $ --- include/autoconf.h.in.orig 2005-04-23 10:32:27.000000000 +0900 +++ include/autoconf.h.in @@ -665,6 +665,9 @@ /* Define if you have the <linux/netfilter_ipv4.h> header file. */ #undef HAVE_LINUX_NETFILTER_IPV4_H +/* Define if you have the <machine/byte_swap.h> header file. */ +#undef HAVE_MACHINE_BYTE_SWAP_H + /* Define if you have the <malloc.h> header file. */ #undef HAVE_MALLOC_H @@ -707,6 +710,9 @@ /* Define if you have the <netinet/ip_nat.h> header file. */ #undef HAVE_NETINET_IP_NAT_H +/* Define if you have the <netinet/ipl.h> header file. */ +#undef HAVE_NETINET_IPL_H + /* Define if you have the <netinet/tcp.h> header file. */ #undef HAVE_NETINET_TCP_H ---------------------------------------------------------------- $NetBSD: patch-cd,v 1.9 2005/06/07 14:19:10 taca Exp $ --- src/client_side.c.orig 2005-04-21 06:46:06.000000000 +0900 +++ src/client_side.c @@ -41,6 +41,9 @@ #endif #include <netinet/tcp.h> #include <net/if.h> +#if HAVE_NETINET_IPL_H +#include <netinet/ipl.h> +#endif #if HAVE_IP_FIL_COMPAT_H #include <ip_fil_compat.h> #elif HAVE_NETINET_IP_FIL_COMPAT_H @@ -2589,6 +2592,9 @@ parseHttpRequest(ConnStateData * conn, m static int natfd = -1; static int siocgnatl_cmd = SIOCGNATL & 0xff; int x; +#if defined(IPFILTER_VERSION) && (IPFILTER_VERSION >= 4000027) + struct ipfobj obj; +#endif #endif #if PF_TRANSPARENT struct pfioc_natlook nl; @@ -2731,6 +2737,13 @@ parseHttpRequest(ConnStateData * conn, m int vport; if (vhost_mode) { #if IPF_TRANSPARENT +#if defined(IPFILTER_VERSION) && (IPFILTER_VERSION >= 4000027) + obj.ipfo_rev = IPFILTER_VERSION; + obj.ipfo_size = sizeof(natLookup); + obj.ipfo_ptr = &natLookup; + obj.ipfo_type = IPFOBJ_NATLOOKUP; + obj.ipfo_offset = 0; +#endif natLookup.nl_inport = http->conn->me.sin_port; natLookup.nl_outport = http->conn->peer.sin_port; natLookup.nl_inip = http->conn->me.sin_addr; @@ -2739,8 +2752,8 @@ parseHttpRequest(ConnStateData * conn, m if (natfd < 0) { int save_errno; enter_suid(); -#ifdef IPL_NAME - natfd = open(IPL_NAME, O_RDONLY, 0); +#ifdef IPNAT_NAME + natfd = open(IPNAT_NAME, O_RDONLY, 0); #else natfd = open(IPL_NAT, O_RDONLY, 0); #endif @@ -2756,6 +2769,9 @@ parseHttpRequest(ConnStateData * conn, m cbdataFree(http); xfree(inbuf); } else { +#if defined(IPFILTER_VERSION) && (IPFILTER_VERSION >= 4000027) + x = ioctl(natfd, SIOCGNATL, &obj); +#else /* * IP-Filter changed the type for SIOCGNATL between * 3.3 and 3.4. It also changed the cmd value for @@ -2769,6 +2785,7 @@ parseHttpRequest(ConnStateData * conn, m } else { x = ioctl(natfd, SIOCGNATL, &natLookup); } +#endif if (x < 0) { if (errno != ESRCH) { debug(50, 1) ("parseHttpRequest: NAT lookup failed: ioctl(SIOCGNATL)\n");Received on Mon Jun 13 2005 - 20:23:05 MDT
This archive was generated by hypermail pre-2.1.9 : Thu Jun 30 2005 - 12:00:05 MDT