More correct & shorter diff, against -current (21.12)

---------------------------------------------
diff 2 orig/pfctl_parser.h ../pfctl-current/pfctl_parser.h
--- orig/pfctl_parser.h Thu Nov 18 21:57:45 2004
+++ ../pfctl-current/pfctl_parser.h     Thu Nov 18 21:09:24 2004
@@ -149,4 +149,5 @@
        struct node_host                *host;
        char                            *file;
+       int                              flags;
 };
 
diff 2 orig/pfctl.h ../pfctl-current/pfctl.h
--- orig/pfctl.h        Thu Nov 18 21:57:42 2004
+++ ../pfctl-current/pfctl.h    Thu Nov 18 21:26:34 2004
@@ -34,4 +34,8 @@
 #define _PFCTL_H_
 
+/* append_addr() flags */
+#define PFAAF_NONETWORK                (1)
+#define PFAAF_INVERT           (2)
+
 enum { PFRB_TABLES = 1, PFRB_TSTATS, PFRB_ADDRS, PFRB_ASTATS,
        PFRB_IFACES, PFRB_TRANS, PFRB_MAX };
diff 2 orig/parse.y ../pfctl-current/parse.y
--- orig/parse.y        Thu Nov 18 21:57:39 2004
+++ ../pfctl-current/parse.y    Thu Nov 18 21:41:30 2004
@@ -396,4 +396,5 @@
 %token ICMP6TYPE CODE KEEP MODULATE STATE PORT RDR NAT BINAT ARROW NODF
 %token MINTTL ERROR ALLOWOPTS FASTROUTE FILENAME ROUTETO DUPTO REPLYTO NO LABEL
+%token FILENAMEINV
 %token NOROUTE FRAGMENT USER GROUP MAXMSS MAXIMUM TTL TOS DROP TABLE
 %token REASSEMBLE FRAGDROP FRAGCROP ANCHOR NATANCHOR RDRANCHOR BINATANCHOR
@@ -1105,4 +1106,15 @@
                        table_opts.init_addr = 1;
                }
+               | FILENAMEINV STRING    {
+                       struct node_tinit       *ti;
+
+                       if (!(ti = calloc(1, sizeof(*ti))))
+                               err(1, "table_opt: calloc");
+                       ti->file = $2;
+                       ti->flags |= PFAAF_INVERT;
+                       SIMPLEQ_INSERT_TAIL(&table_opts.init_nodes, ti,
+                           entries);
+                       table_opts.init_addr = 1;
+               }
                ;
 
@@ -3789,5 +3801,5 @@
        SIMPLEQ_FOREACH(ti, &opts->init_nodes, entries) {
                if (ti->file)
-                       if (pfr_buf_load(&ab, ti->file, 0, append_addr)) {
+                       if (pfr_buf_load(&ab, ti->file, ti->flags & 
PFAAF_INVERT, append_addr)) {
                                if (errno)
                                        yyerror("cannot load \"%s\": %s",
@@ -4499,4 +4511,5 @@
                { "fastroute",          FASTROUTE},
                { "file",               FILENAME},
+               { "file-inv",           FILENAMEINV},
                { "fingerprints",       FINGERPRINTS},
                { "flags",              FLAGS},
diff 2 orig/pfctl_radix.c ../pfctl-current/pfctl_radix.c
--- orig/pfctl_radix.c  Thu Nov 18 21:57:46 2004
+++ ../pfctl-current/pfctl_radix.c      Thu Nov 18 21:25:18 2004
@@ -556,5 +556,5 @@
 
 int
-pfr_buf_load(struct pfr_buffer *b, char *file, int nonetwork,
+pfr_buf_load(struct pfr_buffer *b, char *file, int flags,
     int (*append_addr)(struct pfr_buffer *, char *, int))
 {
@@ -573,5 +573,5 @@
        }
        while ((rv = pfr_next_token(buf, fp)) == 1)
-               if (append_addr(b, buf, nonetwork)) {
+               if (append_addr(b, buf, flags)) {
                        rv = -1;
                        break;
diff 2 orig/pfctl_parser.c ../pfctl-current/pfctl_parser.c
--- orig/pfctl_parser.c Thu Nov 18 21:57:45 2004
+++ ../pfctl-current/pfctl_parser.c     Thu Nov 18 22:06:08 2004
@@ -1494,4 +1494,5 @@
  * test:
  *     if set to 1, only simple addresses are accepted (no netblock, no "!").
+ *      bit 1 (PFAAF_INVERT flag) - add given address exclusion
  */
 int
@@ -1500,5 +1501,7 @@
        char                     *r;
        struct node_host        *h, *n;
-       int                      rv, not = 0;
+       int                      rv, not = (test & PFAAF_INVERT) ? 1:0;
+
+       test &= PFAAF_NONETWORK;
 
        for (r = s; *r == '!'; r++)
---------------------------------------------

Reply via email to