Import of Darren Reed's IPFilter 3.3.11. See sbin/ipf/HISTORY for detailed
authorkjell <kjell@openbsd.org>
Mon, 13 Mar 2000 23:40:17 +0000 (23:40 +0000)
committerkjell <kjell@openbsd.org>
Mon, 13 Mar 2000 23:40:17 +0000 (23:40 +0000)
changelog. Documentation changes are now way behind. Volunteers?

45 files changed:
sbin/ipf/HISTORY
sbin/ipf/facpri.c
sbin/ipf/facpri.h
sbin/ipf/ifaddr.c
sbin/ipf/ifaddr.h
sbin/ipf/ipf.c
sbin/ipf/ipf.h
sbin/ipf/opt.c
sbin/ipf/parse.c
sbin/ipfstat/fils.c
sbin/ipfstat/kmem.c
sbin/ipfstat/kmem.h
sbin/ipnat/ipnat.c
sbin/ipnat/natparse.c
sys/netinet/fil.c
sys/netinet/ip_auth.c
sys/netinet/ip_auth.h
sys/netinet/ip_fil.c
sys/netinet/ip_fil.h
sys/netinet/ip_fil_compat.h
sys/netinet/ip_frag.c
sys/netinet/ip_frag.h
sys/netinet/ip_ftp_pxy.c
sys/netinet/ip_log.c
sys/netinet/ip_nat.c
sys/netinet/ip_nat.h
sys/netinet/ip_proxy.c
sys/netinet/ip_proxy.h
sys/netinet/ip_raudio_pxy.c
sys/netinet/ip_rcmd_pxy.c
sys/netinet/ip_state.c
sys/netinet/ip_state.h
sys/netinet/ipl.h
usr.sbin/ipftest/ipft_ef.c
usr.sbin/ipftest/ipft_hx.c
usr.sbin/ipftest/ipft_pc.c
usr.sbin/ipftest/ipft_sn.c
usr.sbin/ipftest/ipft_td.c
usr.sbin/ipftest/ipft_tx.c
usr.sbin/ipftest/ipt.c
usr.sbin/ipftest/ipt.h
usr.sbin/ipftest/misc.c
usr.sbin/ipftest/pcap.h
usr.sbin/ipftest/snoop.h
usr.sbin/ipmon/ipmon.c

index f9111ba..84b5927 100644 (file)
@@ -1,4 +1,4 @@
-#      $OpenBSD: HISTORY,v 1.4 2000/02/16 22:34:21 kjell Exp $
+#      $OpenBSD: HISTORY,v 1.5 2000/03/13 23:40:19 kjell Exp $
 #
 # NOTE: Quite a few patches and suggestions come from other sources, to whom
 #       I'm greatly indebted, even if no names are mentioned.
 # and especially those who have found the time to port IP Filter to new
 # platforms.
 #
+3.3.11 04/03/2000 - Released
+
+make "or-block" work with lines that start with "log"
+
+fix up parsing and printing of rules with syslog levels in them
+
+fix from Cy Schubert for calling of apr_fini only if non-null
+
+3.3.10 24/02/2000 - Released
+
+* fix back from guido for state tracking interfaces
+
+* update for NetBSD pfil interface changes
+
+* if attaching fails and we can abort, then cleanup when doing so.
+
+Julian Yip (julian@computer.org):
+* solaris.c (fr_precheck): After calling freemsg on mt, set it point to *mp.
+* ipf.c (packetlogon): use flag to store the return value from get_flags.
+* ipmon.c (init_tabs): Generate cleanup so we do not have to cast
+  an int s->s_port to u_int port and try to check if the u_int port
+  is less than zero.
+
 3.3.9  15/02/2000 - Released
 
 fix scheduling of bad locking in fr_addstate() used when we attach onto
index 9801ce8..00434b4 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: facpri.c,v 1.3 2000/02/16 22:34:21 kjell Exp $        */
+/*     $OpenBSD: facpri.c,v 1.4 2000/03/13 23:40:19 kjell Exp $        */
 
 /*
  * Copyright (C) 1993-1998 by Darren Reed.
index d340c9f..8f81913 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: facpri.h,v 1.3 2000/02/16 22:34:21 kjell Exp $        */
+/*     $OpenBSD: facpri.h,v 1.4 2000/03/13 23:40:19 kjell Exp $        */
 
 /*
  * Copyright (C) 1999 by Darren Reed.
index e9ed65f..e34116d 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: ifaddr.c,v 1.3 2000/02/16 22:34:21 kjell Exp $ */
+/* $OpenBSD: ifaddr.c,v 1.4 2000/03/13 23:40:19 kjell Exp $ */
 #include <sys/types.h>
 #include <sys/ioctl.h>
 #include <sys/socket.h>
index 054f957..8810aac 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: ifaddr.h,v 1.3 2000/02/16 22:34:21 kjell Exp $ */
+/* $OpenBSD: ifaddr.h,v 1.4 2000/03/13 23:40:19 kjell Exp $ */
 
 #ifndef        __IFADDR_H__
 #define        __IFADDR_H__
index e3fe71a..17cf2d3 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: ipf.c,v 1.22 2000/02/16 22:34:21 kjell Exp $  */
+/*     $OpenBSD: ipf.c,v 1.23 2000/03/13 23:40:19 kjell Exp $  */
 
 /*
  * Copyright (C) 1993-1998 by Darren Reed.
@@ -45,7 +45,7 @@
 
 #if !defined(lint)
 static const char sccsid[] = "@(#)ipf.c        1.23 6/5/96 (C) 1993-1995 Darren Reed";
-static const char rcsid[] = "@(#)$IPFilter: ipf.c,v 2.2 1999/08/06 15:26:08 darrenr Exp $";
+static const char rcsid[] = "@(#)$IPFilter: ipf.c,v 2.2.2.1 2000/02/16 14:40:39 darrenr Exp $";
 #endif
 
 #if    SOLARIS
@@ -365,8 +365,8 @@ char        *opt;
 {
        int     flag, err;
 
-       err = get_flags();
-       if (err != 0) {
+       flag = get_flags();
+       if (flag != 0) {
                if ((opts & (OPT_DONOTHING|OPT_VERBOSE)) == OPT_VERBOSE)
                        printf("log flag is currently %#x\n", flag);
        }
index 799f560..f4f8c5d 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: ipf.h,v 1.13 2000/02/16 22:34:21 kjell Exp $  */
+/*     $OpenBSD: ipf.h,v 1.14 2000/03/13 23:40:19 kjell Exp $  */
 
 /*
  * Copyright (C) 1993-1998 by Darren Reed.
index 334f459..99fbcda 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: opt.c,v 1.13 2000/02/16 22:34:21 kjell Exp $  */
+/*     $OpenBSD: opt.c,v 1.14 2000/03/13 23:40:19 kjell Exp $  */
 
 /*
  * Copyright (C) 1993-1998 by Darren Reed.
index c8e29f9..8196186 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: parse.c,v 1.32 2000/02/16 22:34:21 kjell Exp $        */
+/*     $OpenBSD: parse.c,v 1.33 2000/03/13 23:40:19 kjell Exp $        */
 
 /*
  * Copyright (C) 1993-1998 by Darren Reed.
@@ -43,7 +43,7 @@
 
 #if !defined(lint)
 static const char sccsid[] = "@(#)parse.c      1.44 6/5/96 (C) 1993-1996 Darren Reed";
-static const char rcsid[] = "@(#)$IPFilter: parse.c,v 2.1.2.8 2000/01/27 08:49:42 darrenr Exp $";
+static const char rcsid[] = "@(#)$IPFilter: parse.c,v 2.1.2.11 2000/03/04 05:19:25 darrenr Exp $";
 #endif
 
 extern struct  ipopt_names     ionames[], secclass[];
@@ -68,10 +68,13 @@ void        optprint __P((u_short *, u_long, u_long));
 int    countbits __P((u_32_t));
 char   *portname __P((int, int));
 int    ratoi __P((char *, int *, int, int));
+int    loglevel __P((char **, u_short *, int));
+void   printlog __P((frentry_t *));
 #if defined(__OpenBSD__)
 extern int     if_addr __P((char *, struct in_addr *));
 #endif
 
+
 char   *proto = NULL;
 char   flagset[] = "FSRPAU";
 u_char flags[] = { TH_FIN, TH_SYN, TH_RST, TH_PUSH, TH_ACK, TH_URG };
@@ -188,42 +191,16 @@ int     linenum;
                }
                if (!strcasecmp(*(cpp+1), "first")) {
                        fil.fr_flags |= FR_LOGFIRST;
+                       cpp++;
+               }
+               if (*cpp && !strcasecmp(*(cpp+1), "or-block")) {
+                       fil.fr_flags |= FR_LOGORBLOCK;
+                       cpp++;
                }
                if (!strcasecmp(*(cpp+1), "level")) {
-                       int fac, pri;
-                       char *s;
-
-                       fac = 0;
-                       pri = 0;
-                       if (!*++cpp) {
-                               fprintf(stderr, "%d: %s\n", linenum,
-                                       "missing identifier after level");
+                       cpp++;
+                       if (loglevel(cpp, &fil.fr_loglevel, linenum) == -1)
                                return NULL;
-                       }
-                       s = index(*cpp, '.');
-                       if (s) {
-                               *s++ = '\0';
-                               fac = fac_findname(*cpp);
-                               if (fac == -1) {
-                                       fprintf(stderr, "%d: %s %s\n", linenum,
-                                               "Unknown facility", *cpp);
-                                       return NULL;
-                               }
-                               pri = pri_findname(s);
-                               if (pri == -1) {
-                                       fprintf(stderr, "%d: %s %s\n", linenum,
-                                               "Unknown priority", s);
-                                       return NULL;
-                               }
-                       } else {
-                               pri = pri_findname(*cpp);
-                               if (pri == -1) {
-                                       fprintf(stderr, "%d: %s %s\n", linenum,
-                                               "Unknown priority", *cpp);
-                                       return NULL;
-                               }
-                       }
-                       fil.fr_loglevel = fac|pri;
                        cpp++;
                }
        } else {
@@ -324,6 +301,12 @@ int     linenum;
                        fil.fr_loglevel = fac|pri;
                        cpp++;
                }
+               if (*cpp && !strcasecmp(*cpp, "level")) {
+                       if (loglevel(cpp, &fil.fr_loglevel, linenum) == -1)
+                               return NULL;
+                       cpp++;
+                       cpp++;
+               }
        }
 
        if (*cpp && !strcasecmp("quick", *cpp)) {
@@ -645,6 +628,50 @@ int     linenum;
 }
 
 
+int loglevel(cpp, facpri, linenum)
+char **cpp;
+u_short *facpri;
+int linenum;
+{
+       int fac, pri;
+       char *s;
+
+       fac = 0;
+       pri = 0;
+       if (!*++cpp) {
+               fprintf(stderr, "%d: %s\n", linenum,
+                       "missing identifier after level");
+               return -1;
+       }
+
+       s = index(*cpp, '.');
+       if (s) {
+               *s++ = '\0';
+               fac = fac_findname(*cpp);
+               if (fac == -1) {
+                       fprintf(stderr, "%d: %s %s\n", linenum,
+                               "Unknown facility", *cpp);
+                       return -1;
+               }
+               pri = pri_findname(s);
+               if (pri == -1) {
+                       fprintf(stderr, "%d: %s %s\n", linenum,
+                               "Unknown priority", s);
+                       return -1;
+               }
+       } else {
+               pri = pri_findname(*cpp);
+               if (pri == -1) {
+                       fprintf(stderr, "%d: %s %s\n", linenum,
+                               "Unknown priority", *cpp);
+                       return -1;
+               }
+       }
+       *facpri = fac|pri;
+       return 0;
+}
+
+
 int to_interface(fdp, to, linenum)
 frdest_t *fdp;
 char *to;
@@ -1302,6 +1329,12 @@ int     linenum;
        }
 
        (*cp)++;
+       if (!**cp) {
+               fprintf(stderr, "%d: Missing state/frag after keep\n",
+                       linenum);
+               return -1;
+       }
+
        if (**cp && strcasecmp(**cp, "state") && strcasecmp(**cp, "frags")) {
                fprintf(stderr, "%d: Unrecognised state keyword \"%s\"\n",
                        linenum, **cp);
@@ -1386,7 +1419,7 @@ struct    frentry *fp;
                                    "<>", "><"};
        struct  protoent        *p;
        int     ones = 0, pr;
-       char    *s, *u;
+       char    *s;
        u_char  *t;
        u_short sec[2];
 
@@ -1409,11 +1442,7 @@ struct   frentry *fp;
                } else if ((fp->fr_flags & FR_RETMASK) == FR_RETRST)
                        printf(" return-rst");
        } else if ((fp->fr_flags & FR_LOGMASK) == FR_LOG) {
-               printf("log");
-               if (fp->fr_flags & FR_LOGBODY)
-                       printf(" body");
-               if (fp->fr_flags & FR_LOGFIRST)
-                       printf(" first");
+               printlog(fp);
        } else if (fp->fr_flags & FR_ACCOUNT)
                printf("count");
        else if (fp->fr_flags & FR_AUTH)
@@ -1430,29 +1459,8 @@ struct   frentry *fp;
 
        if (((fp->fr_flags & FR_LOGB) == FR_LOGB) ||
            ((fp->fr_flags & FR_LOGP) == FR_LOGP)) {
-               printf("log ");
-               if (fp->fr_flags & FR_LOGBODY)
-                       printf("body ");
-               if (fp->fr_flags & FR_LOGFIRST)
-                       printf("first ");
-               if (fp->fr_flags & FR_LOGORBLOCK)
-                       printf("or-block ");
-               if (fp->fr_loglevel != 0xffff) {
-                       if (fp->fr_loglevel & LOG_FACMASK) {
-                               s = fac_toname(fp->fr_loglevel);
-                               if (s == NULL)
-                                       s = "!!!";
-                       } else
-                               s = "";
-                       u = pri_toname(fp->fr_loglevel);
-                       if (u == NULL)
-                               u = "!!!";
-                       if (*s)
-                               printf("level %s.%s ", s, u);
-                       else
-                               printf("level %s ", u);
-               }
-                       
+               printlog(fp);
+               putchar(' ');
        }
        if (fp->fr_flags & FR_QUICK)
                printf("quick ");
@@ -1603,6 +1611,37 @@ struct frentry *fp;
 }
 
 
+void printlog(fp)
+frentry_t *fp;
+{
+       char *s, *u;
+
+       printf("log");
+       if (fp->fr_flags & FR_LOGBODY)
+               printf(" body");
+       if (fp->fr_flags & FR_LOGFIRST)
+               printf(" first");
+       if (fp->fr_flags & FR_LOGORBLOCK)
+               printf(" or-block");
+       if (fp->fr_loglevel != 0xffff) {
+               printf(" level ");
+               if (fp->fr_loglevel & LOG_FACMASK) {
+                       s = fac_toname(fp->fr_loglevel);
+                       if (s == NULL)
+                               s = "!!!";
+               } else
+                       s = "";
+               u = pri_toname(fp->fr_loglevel);
+               if (u == NULL)
+                       u = "!!!";
+               if (*s)
+                       printf("%s.%s", s, u);
+               else
+                       printf("%s", u);
+       }
+}
+
+
 int    ratoi(ps, pi, min, max)
 char   *ps;
 int    *pi, min, max;
index 65bfc97..548c021 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: fils.c,v 1.19 2000/02/16 22:34:22 kjell Exp $ */
+/*     $OpenBSD: fils.c,v 1.20 2000/03/13 23:40:19 kjell Exp $ */
 
 /*
  * Copyright (C) 1993-1998 by Darren Reed.
@@ -53,7 +53,7 @@
 
 #if !defined(lint)
 static const char sccsid[] = "@(#)fils.c       1.21 4/20/96 (C) 1993-1996 Darren Reed";
-static const char rcsid[] = "@(#)$IPFilter: fils.c,v 2.2.2.5 2000/01/27 08:49:40 darrenr Exp $";
+static const char rcsid[] = "@(#)$IPFilter: fils.c,v 2.2.2.6 2000/02/23 11:16:35 darrenr Exp $";
 #endif
 
 #define        F_IN    0
@@ -244,6 +244,8 @@ struct      friostat        *fp;
                        fp->f_st[0].fr_notip, fp->f_st[1].fr_notip);
        printf("   bad packets:\t\tin %lu\tout %lu\n",
                        fp->f_st[0].fr_bad, fp->f_st[1].fr_bad);
+       printf("copied messages:\tin %lu\tout %lu\n",
+                       fp->f_st[0].fr_copy, fp->f_st[1].fr_copy);
 #endif
        printf(" input packets:\t\tblocked %lu passed %lu nomatch %lu",
                        fp->f_st[0].fr_block, fp->f_st[0].fr_pass,
index b80807f..0e04df3 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: kmem.c,v 1.14 2000/02/16 22:34:22 kjell Exp $ */
+/*     $OpenBSD: kmem.c,v 1.15 2000/03/13 23:40:19 kjell Exp $ */
 
 /*
  * Copyright (C) 1993-1998 by Darren Reed.
index f14d5ab..bc01009 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: kmem.h,v 1.11 2000/02/16 22:34:22 kjell Exp $ */
+/*     $OpenBSD: kmem.h,v 1.12 2000/03/13 23:40:19 kjell Exp $ */
 
 /*
  * Copyright (C) 1993-1998 by Darren Reed.
index 60ac2d9..491fee1 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: ipnat.c,v 1.35 2000/02/16 22:34:22 kjell Exp $        */
+/*     $OpenBSD: ipnat.c,v 1.36 2000/03/13 23:40:19 kjell Exp $        */
 
 /*
  * Copyright (C) 1993-1998 by Darren Reed.
index f4aa481..1f9d2bf 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: natparse.c,v 1.3 2000/02/16 22:34:22 kjell Exp $      */
+/*     $OpenBSD: natparse.c,v 1.4 2000/03/13 23:40:19 kjell Exp $      */
 
 /*
  * Copyright (C) 1993-1998 by Darren Reed.
index 1f47b6b..22d275b 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: fil.c,v 1.21 2000/02/16 22:34:17 kjell Exp $  */
+/*     $OpenBSD: fil.c,v 1.22 2000/03/13 23:40:17 kjell Exp $  */
 
 /*
  * Copyright (C) 1993-1998 by Darren Reed.
@@ -9,7 +9,7 @@
  */
 #if !defined(lint)
 static const char sccsid[] = "@(#)fil.c        1.36 6/5/96 (C) 1993-1996 Darren Reed";
-static const char rcsid[] = "@(#)$IPFilter: fil.c,v 2.3.2.16 2000/01/27 08:49:37 darrenr Exp $";
+static const char rcsid[] = "@(#)$IPFilter: fil.c,v 2.3.2.17 2000/03/03 14:51:16 darrenr Exp $";
 #endif
 
 #include <sys/errno.h>
@@ -542,6 +542,8 @@ void *m;
 #ifdef  IPFILTER_LOG
                if ((passt & FR_LOGMASK) == FR_LOG) {
                        if (!IPLLOG(passt, ip, fin, m)) {
+                               if (passt & FR_LOGORBLOCK)
+                                       passt |= FR_BLOCK|FR_QUICK;
                                ATOMIC_INC(frstats[fin->fin_out].fr_skip);
                        }
                        ATOMIC_INC(frstats[fin->fin_out].fr_pkl);
@@ -1189,7 +1191,7 @@ nodata:
  * SUCH DAMAGE.
  *
  *     @(#)uipc_mbuf.c 8.2 (Berkeley) 1/4/94
- * $IPFilter: fil.c,v 2.3.2.16 2000/01/27 08:49:37 darrenr Exp $
+ * $IPFilter: fil.c,v 2.3.2.17 2000/03/03 14:51:16 darrenr Exp $
  */
 /*
  * Copy data from an mbuf chain starting "off" bytes from the beginning,
index c67dcbf..6f4d88b 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: ip_auth.c,v 1.11 2000/02/16 22:34:17 kjell Exp $      */
+/*     $OpenBSD: ip_auth.c,v 1.12 2000/03/13 23:40:17 kjell Exp $      */
 
 /*
  * Copyright (C) 1998 by Darren Reed & Guido van Rooij.
index 063158f..3a23b0f 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: ip_auth.h,v 1.6 2000/02/16 22:34:18 kjell Exp $       */
+/*     $OpenBSD: ip_auth.h,v 1.7 2000/03/13 23:40:17 kjell Exp $       */
 
 /*
  * Copyright (C) 1997-1998 by Darren Reed & Guido Van Rooij.
index dbbf7cc..42370ca 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: ip_fil.c,v 1.31 2000/02/18 07:47:02 kjell Exp $       */
+/*     $OpenBSD: ip_fil.c,v 1.32 2000/03/13 23:40:17 kjell Exp $       */
 
 /*
  * Copyright (C) 1993-1998 by Darren Reed.
@@ -9,7 +9,7 @@
  */
 #if !defined(lint)
 static const char sccsid[] = "@(#)ip_fil.c     2.41 6/5/96 (C) 1993-1995 Darren Reed";
-static const char rcsid[] = "@(#)$IPFilter: ip_fil.c,v 2.4.2.17 2000/02/10 01:47:28 darrenr Exp $";
+static const char rcsid[] = "@(#)$IPFilter: ip_fil.c,v 2.4.2.18 2000/02/22 11:40:06 darrenr Exp $";
 #endif
 
 #ifndef        SOLARIS
@@ -227,8 +227,8 @@ int iplattach()
 {
        char *defpass;
        int s;
-# ifdef __sgi
-       int error;
+# if defined(__sgi) || (defined(NETBSD_PF) && (__NetBSD_Version__ >= 104200000))
+       int error = 0;
 # endif
 
        SPL_NET(s);
@@ -249,13 +249,27 @@ int iplattach()
                return -1;
 
 # ifdef NETBSD_PF
+#  if __NetBSD_Version__ >= 104200000
+       error = pfil_add_hook((void *)fr_check, PFIL_IN|PFIL_OUT,
+                             &inetsw[ip_protox[IPPROTO_IP]].pr_pfh);
+       if (error) {
+               appr_unload();
+               ip_natunload();
+               fr_stateunload();
+               return error;
+       }
+#  else
        pfil_add_hook((void *)fr_check, PFIL_IN|PFIL_OUT);
+#  endif
 # endif
 
 # ifdef __sgi
        error = ipfilter_sgi_attach();
        if (error) {
                SPL_X(s);
+               appr_unload();
+               ip_natunload();
+               fr_stateunload();
                return error;
        }
 # endif
@@ -302,6 +316,9 @@ int iplattach()
 int ipldetach()
 {
        int s, i = FR_INQUE|FR_OUTQUE;
+#if defined(NETBSD_PF) && (__NetBSD_Version__ >= 104200000)
+       int error = 0;
+#endif
 
 #ifdef _KERNEL
 # if (__FreeBSD_version >= 300000)
@@ -327,13 +344,21 @@ int ipldetach()
        fr_running = 0;
 
 # ifdef NETBSD_PF
+#  if __NetBSD_Version__ >= 104200000
+       error = pfil_remove_hook((void *)fr_check, PFIL_IN|PFIL_OUT,
+                             &inetsw[ip_protox[IPPROTO_IP]].pr_pfh);
+       if (error)
+               return error;
+#  else
        pfil_remove_hook((void *)fr_check, PFIL_IN|PFIL_OUT);
+#  endif
 # endif
 
 # ifdef __sgi
        ipfilter_sgi_detach();
 # endif
 
+       appr_unload();
        ipfr_unload();
        ip_natunload();
        fr_stateunload();
index 55067f8..0659077 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: ip_fil.h,v 1.16 2000/02/16 22:34:18 kjell Exp $       */
+/*     $OpenBSD: ip_fil.h,v 1.17 2000/03/13 23:40:17 kjell Exp $       */
 
 /*
  * Copyright (C) 1993-1998 by Darren Reed.
@@ -8,7 +8,7 @@
  * to the original author and the contributors.
  *
  * @(#)ip_fil.h        1.35 6/5/96
- * $IPFilter: ip_fil.h,v 2.3.2.7 2000/01/27 08:49:41 darrenr Exp $
+ * $IPFilter: ip_fil.h,v 2.3.2.8 2000/02/23 11:16:36 darrenr Exp $
  */
 
 #ifndef        __IP_FIL_H__
@@ -295,6 +295,7 @@ typedef     struct  filterstats {
        u_long  fr_bad;         /* bad IP packets to the filter */
        u_long  fr_notip;       /* packets passed through no on ip queue */
        u_long  fr_drop;        /* packets dropped - no info for them! */
+       u_long  fr_copy;        /* messages copied due to db_ref > 1 */
 #endif
 } filterstats_t;
 
index 4353222..0ad32f2 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: ip_fil_compat.h,v 1.13 2000/02/16 22:34:18 kjell Exp $        */
+/*     $OpenBSD: ip_fil_compat.h,v 1.14 2000/03/13 23:40:18 kjell Exp $        */
 
 /*
  * Copyright (C) 1993-1998 by Darren Reed.
index 7ee09e1..e2780d3 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: ip_frag.c,v 1.16 2000/02/16 22:34:18 kjell Exp $      */
+/*     $OpenBSD: ip_frag.c,v 1.17 2000/03/13 23:40:18 kjell Exp $      */
 
 /*
  * Copyright (C) 1993-1998 by Darren Reed.
index a171169..a2efb59 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: ip_frag.h,v 1.11 2000/02/16 22:34:19 kjell Exp $      */
+/*     $OpenBSD: ip_frag.h,v 1.12 2000/03/13 23:40:18 kjell Exp $      */
 
 /*
  * Copyright (C) 1993-1998 by Darren Reed.
index 4e2f109..8080ad9 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: ip_ftp_pxy.c,v 1.7 2000/02/16 22:34:19 kjell Exp $    */
+/*     $OpenBSD: ip_ftp_pxy.c,v 1.8 2000/03/13 23:40:18 kjell Exp $    */
 
 /*
  * Simple FTP transparent proxy for in-kernel use.  For use with the NAT
index 092e4ac..554032e 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: ip_log.c,v 1.7 2000/02/16 22:34:19 kjell Exp $        */
+/*     $OpenBSD: ip_log.c,v 1.8 2000/03/13 23:40:18 kjell Exp $        */
 
 /*
  * Copyright (C) 1997-1998 by Darren Reed.
index db49eeb..49b1912 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: ip_nat.c,v 1.27 2000/02/16 22:34:19 kjell Exp $       */
+/*     $OpenBSD: ip_nat.c,v 1.28 2000/03/13 23:40:18 kjell Exp $       */
 
 /*
  * Copyright (C) 1995-1998 by Darren Reed.
index 162938b..09fb932 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: ip_nat.h,v 1.15 2000/02/16 22:34:19 kjell Exp $       */
+/*     $OpenBSD: ip_nat.h,v 1.16 2000/03/13 23:40:18 kjell Exp $       */
 
 /*
  * Copyright (C) 1995-1998 by Darren Reed.
index 070c223..bb3f623 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: ip_proxy.c,v 1.7 2000/02/16 22:34:19 kjell Exp $      */
+/*     $OpenBSD: ip_proxy.c,v 1.8 2000/03/13 23:40:18 kjell Exp $      */
 
 /*
  * Copyright (C) 1997-1998 by Darren Reed.
@@ -8,7 +8,7 @@
  * to the original author and the contributors.
  */
 #if !defined(lint)
-static const char rcsid[] = "@(#)$IPFilter: ip_proxy.c,v 2.2.2.1 1999/09/19 12:18:19 darrenr Exp $";
+static const char rcsid[] = "@(#)$IPFilter: ip_proxy.c,v 2.2.2.3 2000/02/29 22:47:17 darrenr Exp $";
 #endif
 
 #if defined(__FreeBSD__) && defined(KERNEL) && !defined(_KERNEL)
@@ -102,15 +102,15 @@ ap_session_t      *ap_sess_tab[AP_SESS_SIZE];
 ap_session_t   *ap_sess_list = NULL;
 aproxy_t       ap_proxies[] = {
 #ifdef IPF_FTP_PROXY
-       { "ftp", (char)IPPROTO_TCP, 0, 0, ippr_ftp_init, NULL,
+       { "ftp", (char)IPPROTO_TCP, 0, 0, ippr_ftp_init, NULL, NULL,
          ippr_ftp_in, ippr_ftp_out },
 #endif
 #ifdef IPF_RCMD_PROXY
-       { "rcmd", (char)IPPROTO_TCP, 0, 0, ippr_rcmd_init, ippr_rcmd_new,
-         NULL, ippr_rcmd_out },
+       { "rcmd", (char)IPPROTO_TCP, 0, 0, ippr_rcmd_init, NULL,
+         ippr_rcmd_new, NULL, ippr_rcmd_out },
 #endif
 #ifdef IPF_RAUDIO_PROXY
-       { "raudio", (char)IPPROTO_TCP, 0, 0, ippr_raudio_init,
+       { "raudio", (char)IPPROTO_TCP, 0, 0, ippr_raudio_init, NULL,
          ippr_raudio_new, ippr_raudio_in, ippr_raudio_out },
 #endif
        { "", '\0', 0, 0, NULL, NULL }
@@ -387,3 +387,13 @@ int appr_init()
        }
        return err;
 }
+
+
+void appr_unload()
+{
+       aproxy_t *ap;
+
+       for (ap = ap_proxies; ap->apr_p; ap++)
+               if (ap->apr_fini)
+                       (*ap->apr_fini)();
+}
index ef5ac5a..204ca73 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: ip_proxy.h,v 1.6 2000/02/16 22:34:19 kjell Exp $      */
+/*     $OpenBSD: ip_proxy.h,v 1.7 2000/03/13 23:40:18 kjell Exp $      */
 
 /*
  * Copyright (C) 1997-1998 by Darren Reed.
@@ -7,7 +7,7 @@
  * provided that this notice is preserved and due credit is given
  * to the original author and the contributors.
  *
- * $IPFilter: ip_proxy.h,v 2.1.2.1 1999/09/19 12:18:20 darrenr Exp $
+ * $IPFilter: ip_proxy.h,v 2.1.2.2 2000/02/22 11:41:15 darrenr Exp $
  */
 
 #ifndef        __IP_PROXY_H__
@@ -74,6 +74,7 @@ typedef       struct  aproxy  {
        int     apr_ref;        /* +1 per rule referencing it */
        int     apr_flags;
        int     (* apr_init) __P((void));
+       void    (* apr_fini) __P((void));
        int     (* apr_new) __P((fr_info_t *, ip_t *,
                                 ap_session_t *, struct nat *));
        int     (* apr_inpkt) __P((fr_info_t *, ip_t *,
@@ -122,6 +123,7 @@ extern      ap_session_t    *ap_sess_list;
 extern aproxy_t        ap_proxies[];
 
 extern int     appr_init __P((void));
+extern void    appr_unload __P((void));
 extern int     appr_ok __P((ip_t *, tcphdr_t *, struct ipnat *));
 extern void    appr_free __P((aproxy_t *));
 extern void    aps_free __P((ap_session_t *));
index 89fe6da..f43e05b 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: ip_raudio_pxy.c,v 1.5 2000/02/16 22:34:20 kjell Exp $ */
+/*     $OpenBSD: ip_raudio_pxy.c,v 1.6 2000/03/13 23:40:18 kjell Exp $ */
 
 #if SOLARIS && defined(_KERNEL)
 extern kmutex_t        ipf_rw;
index 4213182..0edfba9 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: ip_rcmd_pxy.c,v 1.3 2000/02/16 22:34:20 kjell Exp $   */
+/*     $OpenBSD: ip_rcmd_pxy.c,v 1.4 2000/03/13 23:40:18 kjell Exp $   */
 
 /*
  * Simple RCMD transparent proxy for in-kernel use.  For use with the NAT
index bac0de9..d9ca888 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: ip_state.c,v 1.19 2000/02/16 22:34:20 kjell Exp $     */
+/*     $OpenBSD: ip_state.c,v 1.20 2000/03/13 23:40:18 kjell Exp $     */
 
 /*
  * Copyright (C) 1995-1998 by Darren Reed.
@@ -9,7 +9,7 @@
  */
 #if !defined(lint)
 static const char sccsid[] = "@(#)ip_state.c   1.8 6/5/96 (C) 1993-1995 Darren Reed";
-static const char rcsid[] = "@(#)$IPFilter: ip_state.c,v 2.3.2.21 2000/02/15 08:04:01 darrenr Exp $";
+static const char rcsid[] = "@(#)$IPFilter: ip_state.c,v 2.3.2.22 2000/02/23 15:23:24 darrenr Exp $";
 #endif
 
 #include <sys/errno.h>
@@ -380,7 +380,6 @@ u_int flags;
                pass = fr_flags;
        WRITE_ENTER(&ipf_state);
 
-       is->is_rout = pass & FR_OUTQUE ? 1 : 0;
        is->is_pass = pass;
        is->is_pkts = 1;
        is->is_bytes = ip->ip_len;
@@ -565,7 +564,7 @@ tcphdr_t *tcp;
 
        if (rev == 0) {
                if (!out) {
-                       if (is->is_ifpin == ifp)
+                       if (is->is_ifpin == NULL || is->is_ifpin == ifp)
                                ret = 1;
                } else {
                        if (is->is_ifpout == NULL || is->is_ifpout == ifp)
@@ -573,7 +572,7 @@ tcphdr_t *tcp;
                }
        } else {
                if (out) {
-                       if (is->is_ifpin == ifp)
+                       if (is->is_ifpin == NULL || is->is_ifpin == ifp)
                                ret = 1;
                } else {
                        if (is->is_ifpout == NULL || is->is_ifpout == ifp)
@@ -639,7 +638,7 @@ tcphdr_t *tcp;
        }
 
        if (!rev) {
-               if (out && (out == is->is_rout)) {
+               if (out) {
                        if (!is->is_ifpout)
                                is->is_ifpout = ifp;
                } else {
@@ -647,7 +646,7 @@ tcphdr_t *tcp;
                                is->is_ifpin = ifp;
                }
        } else {
-               if (!out && (out != is->is_rout)) {
+               if (out) {
                        if (!is->is_ifpin)
                                is->is_ifpin = ifp;
                } else {
index bc7a7b3..5cc276d 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: ip_state.h,v 1.12 2000/02/16 22:34:20 kjell Exp $     */
+/*     $OpenBSD: ip_state.h,v 1.13 2000/03/13 23:40:18 kjell Exp $     */
 
 /*
  * Copyright (C) 1995-1998 by Darren Reed.
@@ -8,7 +8,7 @@
  * to the original author and the contributors.
  *
  * @(#)ip_state.h      1.3 1/12/96 (C) 1995 Darren Reed
- * $IPFilter: ip_state.h,v 2.1.2.3 2000/02/15 08:04:03 darrenr Exp $
+ * $IPFilter: ip_state.h,v 2.1.2.4 2000/02/23 15:23:27 darrenr Exp $
  */
 #ifndef        __IP_STATE_H__
 #define        __IP_STATE_H__
@@ -58,7 +58,6 @@ typedef struct ipstate {
        struct  in_addr is_src;
        struct  in_addr is_dst;
        u_char  is_p;                   /* Protocol */
-       u_char  is_rout;                /* Is rule in/out ? */
        u_32_t  is_flags;
        u_32_t  is_opt;                 /* packet options set */
        u_32_t  is_optmsk;              /*    "      "    mask */
index 275cd92..dbde999 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: ipl.h,v 1.5 2000/02/16 22:34:20 kjell Exp $   */
+/*     $OpenBSD: ipl.h,v 1.6 2000/03/13 23:40:18 kjell Exp $   */
 
 /*
  * Copyright (C) 1993-1999 by Darren Reed.
@@ -13,6 +13,6 @@
 #ifndef        __IPL_H__
 #define        __IPL_H__
 
-#define        IPL_VERSION     "IP Filter: v3.3.9"
+#define        IPL_VERSION     "IP Filter: v3.3.11"
 
 #endif
index e7f6960..15f6ae1 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: ipft_ef.c,v 1.13 2000/02/16 22:34:23 kjell Exp $      */
+/*     $OpenBSD: ipft_ef.c,v 1.14 2000/03/13 23:40:20 kjell Exp $      */
 
 /*
  * Copyright (C) 1993-1998 by Darren Reed.
index b26d559..46d00da 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: ipft_hx.c,v 1.11 2000/02/16 22:34:23 kjell Exp $      */
+/*     $OpenBSD: ipft_hx.c,v 1.12 2000/03/13 23:40:20 kjell Exp $      */
 
 /*
  * Copyright (C) 1995-1998 by Darren Reed.
index 124b3bc..425a89e 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: ipft_pc.c,v 1.15 2000/02/16 22:34:23 kjell Exp $      */
+/*     $OpenBSD: ipft_pc.c,v 1.16 2000/03/13 23:40:20 kjell Exp $      */
 
 /*
  * Copyright (C) 1993-1998 by Darren Reed.
index c497da1..f9dd995 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: ipft_sn.c,v 1.12 2000/02/16 22:34:23 kjell Exp $      */
+/*     $OpenBSD: ipft_sn.c,v 1.13 2000/03/13 23:40:20 kjell Exp $      */
 
 /*
  * Copyright (C) 1993-1998 by Darren Reed.
index 5a9e8ee..1129f83 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: ipft_td.c,v 1.13 2000/02/16 22:34:23 kjell Exp $      */
+/*     $OpenBSD: ipft_td.c,v 1.14 2000/03/13 23:40:20 kjell Exp $      */
 
 /*
  * Copyright (C) 1993-1998 by Darren Reed.
index 928c3e7..23397c5 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: ipft_tx.c,v 1.15 2000/02/16 22:34:24 kjell Exp $      */
+/*     $OpenBSD: ipft_tx.c,v 1.16 2000/03/13 23:40:20 kjell Exp $      */
 
 /*
  * Copyright (C) 1995-1998 by Darren Reed.
index f901dc3..4e6f6aa 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: ipt.c,v 1.16 2000/02/16 22:34:24 kjell Exp $  */
+/*     $OpenBSD: ipt.c,v 1.17 2000/03/13 23:40:20 kjell Exp $  */
 
 /*
  * Copyright (C) 1993-1998 by Darren Reed.
index a78beba..8b1fc42 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: ipt.h,v 1.9 2000/02/16 22:34:24 kjell Exp $   */
+/*     $OpenBSD: ipt.h,v 1.10 2000/03/13 23:40:20 kjell Exp $  */
 
 /*
  * Copyright (C) 1993-1998 by Darren Reed.
index ea79b1f..cc2aa4c 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: misc.c,v 1.11 2000/02/16 22:34:24 kjell Exp $ */
+/*     $OpenBSD: misc.c,v 1.12 2000/03/13 23:40:20 kjell Exp $ */
 
 /*
  * Copyright (C) 1993-1998 by Darren Reed.
index 8766023..cd30a4f 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: pcap.h,v 1.9 2000/02/16 22:34:25 kjell Exp $  */
+/*     $OpenBSD: pcap.h,v 1.10 2000/03/13 23:40:20 kjell Exp $ */
 
 /*
  * Copyright (C) 1993-1998 by Darren Reed.
index b52d117..a7847ca 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: snoop.h,v 1.8 2000/02/16 22:34:25 kjell Exp $ */
+/*     $OpenBSD: snoop.h,v 1.9 2000/03/13 23:40:20 kjell Exp $ */
 
 /*
  * Copyright (C) 1993-1998 by Darren Reed.
index ac367ae..31b4255 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: ipmon.c,v 1.22 2000/02/16 22:34:23 kjell Exp $        */
+/*     $OpenBSD: ipmon.c,v 1.23 2000/03/13 23:40:20 kjell Exp $        */
 
 /*
  * Copyright (C) 1993-1998 by Darren Reed.
@@ -9,7 +9,7 @@
  */
 #if !defined(lint)
 static const char sccsid[] = "@(#)ipmon.c      1.21 6/5/96 (C)1993-1998 Darren Reed";
-static const char rcsid[] = "@(#)$IPFilter: ipmon.c,v 2.3.2.4 2000/01/24 12:45:25 darrenr Exp $";
+static const char rcsid[] = "@(#)$IPFilter: ipmon.c,v 2.3.2.5 2000/02/16 14:40:39 darrenr Exp $";
 #endif
 
 #ifndef SOLARIS
@@ -178,7 +178,7 @@ static void init_tabs()
        struct  protoent        *p;
        struct  servent *s;
        char    *name, **tab;
-       u_int   port;
+       int     port;
 
        if (protocols != NULL) {
                free(protocols);
@@ -217,11 +217,11 @@ static void init_tabs()
                if (s->s_proto == NULL)
                        continue;
                else if (!strcmp(s->s_proto, "tcp")) {
-                       port = (u_int)s->s_port;
+                       port = s->s_port;
                        name = s->s_name;
                        tab = tcp_ports;
                } else if (!strcmp(s->s_proto, "udp")) {
-                       port = (u_int)s->s_port;
+                       port = s->s_port;
                        name = s->s_name;
                        tab = udp_ports;
                } else