Date: Thu, 10 Apr 1997 21:08:52 +1000 (EST) From: proff@suburbia.net To: hackers@freebsd.org Subject: ipfilter-proff backported to 2.2.1 Message-ID: <19970410110853.6196.qmail@suburbia.net>
next in thread | raw e-mail | index | archive | help
Replace src/sys-ipfilter-proff.diff after unpacking the ipfilter-proff.shar distribution with the following patch against FreeBSD-2.2.1 (should work with -2.2 also) Index: conf/files =================================================================== RCS file: /usr/src/cvs/src/sys/conf/files,v retrieving revision 1.80.2.7 diff -u -r1.80.2.7 files --- files 1997/03/16 07:21:12 1.80.2.7 +++ src/sys/conf/files 1997/04/10 08:09:55 @@ -217,6 +217,12 @@ netinet/tcp_timer.c optional inet netinet/tcp_usrreq.c optional inet netinet/udp_usrreq.c optional inet +../contrib-sys/ipfilter/mlf_ipl.c optional ipfilter inet +../contrib-sys/ipfilter/ip_fil.c optional ipfilter inet +../contrib-sys/ipfilter/fil.c optional ipfilter inet +../contrib-sys/ipfilter/ip_nat.c optional ipfilter inet +../contrib-sys/ipfilter/ip_frag.c optional ipfilter inet +../contrib-sys/ipfilter/ip_state.c optional ipfilter inet netipx/ipx.c optional ipx netipx/ipx_cksum.c optional ipx netipx/ipx_error.c optional ipx Index: conf/options =================================================================== RCS file: /usr/src/cvs/src/sys/conf/options,v retrieving revision 1.18.2.5 diff -u -r1.18.2.5 sys/conf/options --- options 1997/02/28 15:41:25 1.18.2.5 +++ src/sys/conf/options 1997/04/10 08:01:09 @@ -84,3 +84,6 @@ IPFIREWALL opt_ipfw.h IPFIREWALL_VERBOSE opt_ipfw.h IPFIREWALL_VERBOSE_LIMIT opt_ipfw.h +IPFILTER opt_ipfilter.h +IPFILTER_LKM opt_ipfilter.h +IPFILTER_LOG opt_ipfilter.h Index: i386/conf/GENERIC =================================================================== RCS file: /usr/src/cvs/src/sys/i386/conf/GENERIC,v retrieving revision 1.77.2.4 diff -u -r1.77.2.4 i386/conf/GENERIC --- GENERIC 1997/02/22 20:31:24 1.77.2.4 +++ src/sys/i386/conf/GENERIC 1997/04/10 08:01:09 @@ -23,6 +23,7 @@ options MATH_EMULATE #Support for x87 emulation options INET #InterNETworking +options IPFILTER_LKM #Hooks for ipfilter lkm options FFS #Berkeley Fast Filesystem options NFS #Network Filesystem options MSDOSFS #MSDOS Filesystem Index: i386/conf/LINT =================================================================== RCS file: /usr/src/cvs/src/sys/i386/conf/LINT,v retrieving revision 1.286.2.19 diff -u -r1.286.2.19 LINT --- LINT 1997/03/19 03:01:49 1.286.2.19 +++ src/sys/i386/conf/LINT 1997/04/10 08:01:09 @@ -261,6 +261,13 @@ # dropped packets options "IPFIREWALL_VERBOSE_LIMIT=100" #limit verbosity options IPDIVERT #divert sockets +# new IPFILTER firewall +# you need to have the src/contrib-sys tree installed to compile +# kernel support for the in-kernel version +options IPFILTER #in-kernel version +options IPFILTER_LKM #module version +options IPFITLER_LOG #support logging (in-kernel) +# options TCPDEBUG Index: i386/conf/Makefile.i386 =================================================================== RCS file: /usr/src/cvs/src/sys/i386/conf/Makefile.i386,v retrieving revision 1.89.2.2 diff -u -r1.89.2.2 Makefile.i386 --- Makefile.i386 1997/02/14 00:07:52 1.89.2.2 +++ src/sys/i386/conf/Makefile.i386 1997/04/10 08:01:09 @@ -27,7 +27,7 @@ I386= ${S}/i386 COPTFLAGS?=-O -INCLUDES= -nostdinc -I- -I. -I$S +INCLUDES= -nostdinc -I- -I. -I$S -I${.IMPSRC:H} # This hack is to allow kernel compiles to succeed on machines w/out srcdist .if exists($S/../include) INCLUDES+= -I$S/../include Index: netinet/ip_input.c =================================================================== RCS file: /usr/src/cvs/src/sys/netinet/ip_input.c,v retrieving revision 1.50.2.4 diff -u -r1.50.2.4 ip_input.c --- ip_input.c 1997/02/06 11:33:38 1.50.2.4 +++ src/sys/netinet/ip_input.c 1997/04/10 08:01:09 @@ -37,6 +37,7 @@ #define _IP_VHL +#include "opt_ipfilter.h" #include "opt_ipfw.h" #include <stddef.h> @@ -134,6 +135,11 @@ ip_nat_ctl_t *ip_nat_ctl_ptr; #endif +#if defined(IPFILTER_LKM) || defined(IPFILTER) +int fr_check __P((struct ip *, int, struct ifnet *, int, struct mbuf **)); +int (*fr_checkp) __P((struct ip *, int, struct ifnet *, int, struct mbuf **)) = NULL; +#endif + /* * We need to save the IP options in case a protocol wants to respond * to an incoming packet over the same route if the packet got here @@ -310,7 +316,19 @@ * - Wrap: fake packet's addr/port <unimpl.> * - Encapsulate: put it in another IP and send out. <unimp.> */ +#if defined(IPFILTER) || defined(IPFILTER_LKM) + /* + * Check if we want to allow this packet to be processed. + * Consider it to be bad if not. + */ + if (fr_checkp) { + struct mbuf *m1 = m; + if ((*fr_checkp)(ip, hlen, m->m_pkthdr.rcvif, 0, &m1) || !m1) + return; + ip = mtod(m = m1, struct ip *); + } +#endif #ifdef COMPAT_IPFW if (ip_fw_chk_ptr) { int action; Index: netinet/ip_output.c =================================================================== RCS file: /usr/src/cvs/src/sys/netinet/ip_output.c,v retrieving revision 1.44.2.4 diff -u -r1.44.2.4 ip_output.c --- ip_output.c 1997/03/02 19:03:01 1.44.2.4 +++ src/sys/netinet/ip_output.c 1997/04/10 08:06:06 @@ -34,6 +34,9 @@ * $Id: ip_output.c,v 1.44.2.4 1997/03/02 19:03:01 fenner Exp $ */ +#include "opt_ipfw.h" +#include "opt_ipfilter.h" + #define _IP_VHL #include <sys/param.h> @@ -75,10 +78,17 @@ __P((struct ifnet *, struct mbuf *, struct sockaddr_in *)); static int ip_getmoptions __P((int, struct ip_moptions *, struct mbuf **)); -static int ip_optcopy __P((struct ip *, struct ip *)); static int ip_pcbopts __P((struct mbuf **, struct mbuf *)); static int ip_setmoptions __P((int, struct ip_moptions **, struct mbuf *)); +#if defined(IPFILTER_LKM) || defined(IPFILTER) +int ip_optcopy __P((struct ip *, struct ip *)); +extern int fr_check __P((struct ip *, int, struct ifnet *, int, struct mbuf **)); +extern int (*fr_checkp) __P((struct ip *, int, struct ifnet *, int, struct mbuf **)); +#else +static int ip_optcopy __P((struct ip *, struct ip *)); +#endif + extern struct protosw inetsw[]; @@ -331,6 +341,20 @@ } sendit: +#if defined(IPFILTER) || defined(IPFILTER_LKM) + /* + * looks like most checking has been done now...do a filter check + */ + if (fr_checkp) { + struct mbuf *m1 = m; + + if ((*fr_checkp)(ip, hlen, ifp, 1, &m1)) + error = EACCES; + if (error || !m1) + goto done; + ip = mtod(m = m1, struct ip *); + } +#endif /* * IpHack's section. * - Xlate: translate packet's addr/port (NAT). @@ -559,7 +583,10 @@ * Copy options from ip to jp, * omitting those not copied during fragmentation. */ -static int +#if !defined(IPFILTER) && !defined(IPFILTER_LKM) +static +#endif +int ip_optcopy(ip, jp) struct ip *ip, *jp; {
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?19970410110853.6196.qmail>