summaryrefslogtreecommitdiffstats
path: root/sbin/ipfw
diff options
context:
space:
mode:
authorkbyanc <kbyanc@FreeBSD.org>2002-12-23 20:08:21 +0000
committerkbyanc <kbyanc@FreeBSD.org>2002-12-23 20:08:21 +0000
commit9ac9c4ac0c352bd7527c4e2d11ce5b069ea22436 (patch)
treebe88533dbd66cd557c578274f229db7be09dda73 /sbin/ipfw
parentfccac156927434c5a1874f5b3dad773e7b73a744 (diff)
downloadFreeBSD-src-9ac9c4ac0c352bd7527c4e2d11ce5b069ea22436.zip
FreeBSD-src-9ac9c4ac0c352bd7527c4e2d11ce5b069ea22436.tar.gz
Make preprocessor support more generic by passing all command-line options
after -p except for the last (the ruleset file to process) to the preprocessor for interpretation. This allows command-line options besides -U and -D to be passed to cpp(1) and m4(1) as well as making it easier to use other preprocessors. Sponsored By: NTT Multimedia Communications Labs MFC after: 1 week
Diffstat (limited to 'sbin/ipfw')
-rw-r--r--sbin/ipfw/ipfw.812
-rw-r--r--sbin/ipfw/ipfw.c35
-rw-r--r--sbin/ipfw/ipfw2.c35
3 files changed, 32 insertions, 50 deletions
diff --git a/sbin/ipfw/ipfw.8 b/sbin/ipfw/ipfw.8
index 7fb8272..1d07fcd 100644
--- a/sbin/ipfw/ipfw.8
+++ b/sbin/ipfw/ipfw.8
@@ -51,10 +51,9 @@
.Op Fl q
.Oo
.Fl p Ar preproc
-.Oo Fl D
-.Ar macro Ns Op = Ns Ar value
+.Oo
+.Ar preproc-flags
.Oc
-.Op Fl U Ar macro
.Oc
.Ar pathname
.Sh DESCRIPTION
@@ -289,11 +288,8 @@ file systems are mounted (yet) by the time
is being run (e.g. when they are mounted over NFS).
Once
.Fl p
-has been specified, optional
-.Fl D
-and
-.Fl U
-specifications can follow and will be passed on to the preprocessor.
+has been specified, any additional arguments as passed on to the preprocessor
+for interpretation.
This allows for flexible configuration files (like conditionalizing
them on the local hostname) and the use of macros to centralize
frequently required arguments like IP addresses.
diff --git a/sbin/ipfw/ipfw.c b/sbin/ipfw/ipfw.c
index c4f00fd..740aba8 100644
--- a/sbin/ipfw/ipfw.c
+++ b/sbin/ipfw/ipfw.c
@@ -2529,28 +2529,8 @@ ipfw_readfile(int ac, char *av[])
pid_t preproc = 0;
int c;
- while ((c = getopt(ac, av, "D:U:p:q")) != -1)
+ while ((c = getopt(ac, av, "p:q")) != -1) {
switch(c) {
- case 'D':
- if (!pflag)
- errx(EX_USAGE, "-D requires -p");
- if (i > MAX_ARGS - 2)
- errx(EX_USAGE,
- "too many -D or -U options");
- args[i++] = "-D";
- args[i++] = optarg;
- break;
-
- case 'U':
- if (!pflag)
- errx(EX_USAGE, "-U requires -p");
- if (i > MAX_ARGS - 2)
- errx(EX_USAGE,
- "too many -D or -U options");
- args[i++] = "-U";
- args[i++] = optarg;
- break;
-
case 'p':
pflag = 1;
cmd = optarg;
@@ -2567,6 +2547,19 @@ ipfw_readfile(int ac, char *av[])
" summary ``ipfw''");
}
+ if (pflag)
+ break;
+ }
+
+ if (pflag) {
+ /* Pass all but the last argument to the preprocessor. */
+ while (optind < ac - 1) {
+ if (i >= MAX_ARGS)
+ errx(EX_USAGE, "too many preprocessor options");
+ args[i++] = av[optind++];
+ }
+ }
+
av += optind;
ac -= optind;
if (ac != 1)
diff --git a/sbin/ipfw/ipfw2.c b/sbin/ipfw/ipfw2.c
index e9ea0e1..c038dd3 100644
--- a/sbin/ipfw/ipfw2.c
+++ b/sbin/ipfw/ipfw2.c
@@ -3429,28 +3429,8 @@ ipfw_readfile(int ac, char *av[])
pid_t preproc = 0;
int c;
- while ((c = getopt(ac, av, "D:U:p:q")) != -1)
+ while ((c = getopt(ac, av, "p:q")) != -1) {
switch(c) {
- case 'D':
- if (!pflag)
- errx(EX_USAGE, "-D requires -p");
- if (i > MAX_ARGS - 2)
- errx(EX_USAGE,
- "too many -D or -U options");
- args[i++] = "-D";
- args[i++] = optarg;
- break;
-
- case 'U':
- if (!pflag)
- errx(EX_USAGE, "-U requires -p");
- if (i > MAX_ARGS - 2)
- errx(EX_USAGE,
- "too many -D or -U options");
- args[i++] = "-U";
- args[i++] = optarg;
- break;
-
case 'p':
pflag = 1;
cmd = optarg;
@@ -3467,6 +3447,19 @@ ipfw_readfile(int ac, char *av[])
" summary ``ipfw''");
}
+ if (pflag)
+ break;
+ }
+
+ if (pflag) {
+ /* Pass all but the last argument to the preprocessor. */
+ while (optind < ac - 1) {
+ if (i >= MAX_ARGS)
+ errx(EX_USAGE, "too many preprocessor options");
+ args[i++] = av[optind++];
+ }
+ }
+
av += optind;
ac -= optind;
if (ac != 1)
OpenPOWER on IntegriCloud