>From pf.conf(5):

        The anchor can also be populated by adding a load anchor rule after the
        anchor rule.  When pfctl(8) loads pf.conf, it will also load all the
        rules from the file /etc/pf-spam.conf into the anchor.

                anchor spam
                load anchor spam from "/etc/pf-spam.conf"

This is too much verbiage for nothing since we have `include'.
parse.y history shows

        revision 1.650
        date: 2016/06/16 15:46:20;  author: henning;  state: Exp;  lines: +1 -0;
        allow include in inline anchors
        with this,
        anchor foo {
                include "/path/to/rules"
        }
        works and "load anchor" is obsolete, to be removed somewhen later after
        release.
        co-production with reky at bsdcan, ok reyk mikeb benno sasha

Like this:

                anchor spam {
                        include /etc/pf-spam.conf
                }

OK to remove these duplicate semantics? Below is a diff for pfctl and
pf.conf(5).

pfctl regress still passes when I remove the `load anchor' tests and
adjust test 103 accordingly.

I'll send a separate regress diff after consense and OKs but before
committing.  Same for our pf FAQ.

current.html with instructions to switch to the simpler syntax will
follow, as well.

Feedback? OK?

Index: sbin/pfctl/parse.y
===================================================================
RCS file: /cvs/src/sbin/pfctl/parse.y,v
retrieving revision 1.688
diff -u -p -r1.688 parse.y
--- sbin/pfctl/parse.y  15 Nov 2018 03:22:01 -0000      1.688
+++ sbin/pfctl/parse.y  25 Dec 2018 15:37:37 -0000
@@ -394,15 +394,6 @@ int         map_tos(char *string, int *);
 int     rdomain_exists(u_int);
 int     filteropts_to_rule(struct pf_rule *, struct filter_opts *);
 
-TAILQ_HEAD(loadanchorshead, loadanchors)
-    loadanchorshead = TAILQ_HEAD_INITIALIZER(loadanchorshead);
-
-struct loadanchors {
-       TAILQ_ENTRY(loadanchors)         entries;
-       char                            *anchorname;
-       char                            *filename;
-};
-
 typedef struct {
        union {
                int64_t                  number;
@@ -547,7 +538,6 @@ ruleset             : /* empty */
                | ruleset option '\n'
                | ruleset pfrule '\n'
                | ruleset anchorrule '\n'
-               | ruleset loadrule '\n'
                | ruleset queuespec '\n'
                | ruleset varset '\n'
                | ruleset antispoof '\n'
@@ -949,37 +939,6 @@ anchorrule : ANCHOR anchorname dir quick
                }
                ;
 
-loadrule       : LOAD ANCHOR string FROM string        {
-                       struct loadanchors      *loadanchor;
-
-                       if (strlen(pf->anchor->path) + 1 +
-                           strlen($3) >= PATH_MAX) {
-                               yyerror("anchorname %s too long, max %u\n",
-                                   $3, PATH_MAX - 1);
-                               free($3);
-                               YYERROR;
-                       }
-                       loadanchor = calloc(1, sizeof(struct loadanchors));
-                       if (loadanchor == NULL)
-                               err(1, "loadrule: calloc");
-                       if ((loadanchor->anchorname = malloc(PATH_MAX)) ==
-                           NULL)
-                               err(1, "loadrule: malloc");
-                       if (pf->anchor->name[0])
-                               snprintf(loadanchor->anchorname, PATH_MAX,
-                                   "%s/%s", pf->anchor->path, $3);
-                       else
-                               strlcpy(loadanchor->anchorname, $3, PATH_MAX);
-                       if ((loadanchor->filename = strdup($5)) == NULL)
-                               err(1, "loadrule: strdup");
-
-                       TAILQ_INSERT_TAIL(&loadanchorshead, loadanchor,
-                           entries);
-
-                       free($3);
-                       free($5);
-               };
-
 scrub_opts     :       {
                                bzero(&scrub_opts, sizeof scrub_opts);
                        }
@@ -5755,23 +5714,6 @@ parseport(char *port, struct range *r, i
                return (0);
        }
        return (-1);
-}
-
-int
-pfctl_load_anchors(int dev, struct pfctl *pf, struct pfr_buffer *trans)
-{
-       struct loadanchors      *la;
-
-       TAILQ_FOREACH(la, &loadanchorshead, entries) {
-               if (pf->opts & PF_OPT_VERBOSE)
-                       fprintf(stderr, "\nLoading anchor %s from %s\n",
-                           la->anchorname, la->filename);
-               if (pfctl_rules(dev, la->filename, pf->opts, pf->optimize,
-                   la->anchorname, trans) == -1)
-                       return (-1);
-       }
-
-       return (0);
 }
 
 int
Index: sbin/pfctl/pfctl.c
===================================================================
RCS file: /cvs/src/sbin/pfctl/pfctl.c,v
retrieving revision 1.360
diff -u -p -r1.360 pfctl.c
--- sbin/pfctl/pfctl.c  18 Sep 2018 12:55:19 -0000      1.360
+++ sbin/pfctl/pfctl.c  25 Dec 2018 15:36:30 -0000
@@ -1668,11 +1665,6 @@ pfctl_rules(int dev, char *filename, int
        path = NULL;
 
        if (trans == NULL) {
-               /*
-                * process "load anchor" directives that might have used queues
-                */
-               if (pfctl_load_anchors(dev, &pf, t) == -1)
-                       ERRX("load anchors");
                pfctl_clear_queues(&qspecs);
                pfctl_clear_queues(&rootqs);
 
Index: sbin/pfctl/pfctl_parser.h
===================================================================
RCS file: /cvs/src/sbin/pfctl/pfctl_parser.h,v
retrieving revision 1.112
diff -u -p -r1.112 pfctl_parser.h
--- sbin/pfctl/pfctl_parser.h   6 Sep 2018 15:07:34 -0000       1.112
+++ sbin/pfctl/pfctl_parser.h   25 Dec 2018 15:36:42 -0000
@@ -234,7 +234,6 @@ int pfctl_set_interface_flags(struct pfc
 
 int    parse_config(char *, struct pfctl *);
 int    parse_flags(char *);
-int    pfctl_load_anchors(int, struct pfctl *, struct pfr_buffer *);
 
 int    pfctl_load_queues(struct pfctl *);
 int    pfctl_add_queue(struct pfctl *, struct pf_queuespec *);
Index: share/man/man5/pf.conf.5
===================================================================
RCS file: /cvs/src/share/man/man5/pf.conf.5,v
retrieving revision 1.577
diff -u -p -r1.577 pf.conf.5
--- share/man/man5/pf.conf.5    12 Jul 2018 05:54:49 -0000      1.577
+++ share/man/man5/pf.conf.5    25 Dec 2018 16:20:56 -0000
@@ -1803,21 +1803,6 @@ which blocks all packets from a specific
 # echo "block in quick from 1.2.3.4 to any" | pfctl -a spam -f -
 .Ed
 .Pp
-The anchor can also be populated by adding a
-.Ic load anchor
-rule after the anchor rule.
-When
-.Xr pfctl 8
-loads
-.Nm ,
-it will also load all the rules from the file
-.Pa /etc/pf-spam.conf
-into the anchor.
-.Bd -literal -offset indent
-anchor spam
-load anchor spam from "/etc/pf-spam.conf"
-.Ed
-.Pp
 An anchor rule can also contain a filter ruleset
 in a brace-delimited block.
 In that case, no separate loading of rules into the anchor
@@ -1888,10 +1873,7 @@ translation rules, for example, may also
 Anchor rules are evaluated relative to the anchor in which they are contained.
 For example,
 all anchor rules specified in the main ruleset will reference
-anchor attachment points underneath the main ruleset,
-and anchor rules specified in a file loaded from a
-.Ic load anchor
-rule will be attached under that anchor point.
+anchor attachment points underneath the main ruleset.
 .Pp
 Anchors may end with the asterisk
 .Pq Sq *
@@ -2778,8 +2760,6 @@ anchor-rule    = "anchor" [ string ] [ (
                  [ af ] [ protospec ] [ hosts ] [ filteropt-list ] [ "{" ]
 
 anchor-close   = "}"
-
-load-anchor    = "load anchor" string "from" filename
 
 queueopts-list = queueopts-list queueopts | queueopts
 queueopts      = ([ "bandwidth" bandwidth ] | [ "min" bandwidth ] |
===================================================================
Stats: --- 85 lines 2202 chars
Stats: +++ 1 lines 54 chars
Stats: -84 lines
Stats: -2148 chars

Reply via email to