aboutsummaryrefslogtreecommitdiff
path: root/sbin/ipfw/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'sbin/ipfw/main.c')
-rw-r--r--sbin/ipfw/main.c132
1 files changed, 74 insertions, 58 deletions
diff --git a/sbin/ipfw/main.c b/sbin/ipfw/main.c
index f7aa6af5369c..1e5f4fbafc1d 100644
--- a/sbin/ipfw/main.c
+++ b/sbin/ipfw/main.c
@@ -16,8 +16,6 @@
* This software is provided ``AS IS'' without any warranties of any kind.
*
* Command line interface for IP firewall facility
- *
- * $FreeBSD$
*/
#include <sys/wait.h>
@@ -30,6 +28,7 @@
#include <string.h>
#include <sysexits.h>
#include <unistd.h>
+#include <libgen.h>
#include "ipfw2.h"
@@ -276,7 +275,7 @@ ipfw_main(int oldac, char **oldav)
optind = optreset = 1; /* restart getopt() */
if (is_ipfw()) {
- while ((ch = getopt(ac, av, "abcdDefhinNp:qs:STtv")) != -1)
+ while ((ch = getopt(ac, av, "abcdDefhinNp:qs:STtvx")) != -1)
switch (ch) {
case 'a':
do_acct = 1;
@@ -353,6 +352,10 @@ ipfw_main(int oldac, char **oldav)
g_co.verbose = 1;
break;
+ case 'x': /* debug output */
+ g_co.debug_only = 1;
+ break;
+
default:
free(save_av);
return 1;
@@ -519,62 +522,79 @@ ipfw_readfile(int ac, char *av[])
FILE *f = NULL;
pid_t preproc = 0;
- while ((c = getopt(ac, av, "cfNnp:qS")) != -1) {
- switch(c) {
- case 'c':
- g_co.do_compact = 1;
- break;
+ if (is_ipfw()) {
+ while ((c = getopt(ac, av, "cfNnp:qS")) != -1) {
+ switch(c) {
+ case 'c':
+ g_co.do_compact = 1;
+ break;
+
+ case 'f':
+ g_co.do_force = 1;
+ break;
- case 'f':
- g_co.do_force = 1;
- break;
+ case 'N':
+ g_co.do_resolv = 1;
+ break;
- case 'N':
- g_co.do_resolv = 1;
- break;
+ case 'n':
+ g_co.test_only = 1;
+ break;
- case 'n':
- g_co.test_only = 1;
- break;
+ case 'p':
+ /*
+ * ipfw -p cmd [args] filename
+ *
+ * We are done with getopt(). All arguments
+ * except the filename go to the preprocessor,
+ * so we need to do the following:
+ * - check that a filename is actually present;
+ * - advance av by optind-1 to skip arguments
+ * already processed;
+ * - decrease ac by optind, to remove the args
+ * already processed and the final filename;
+ * - set the last entry in av[] to NULL so
+ * popen() can detect the end of the array;
+ * - set optind=ac to let getopt() terminate.
+ */
+ if (optind == ac)
+ errx(EX_USAGE, "no filename argument");
+ cmd = optarg;
+ av[ac-1] = NULL;
+ av += optind - 1;
+ ac -= optind;
+ optind = ac;
+ break;
- case 'p':
- /*
- * ipfw -p cmd [args] filename
- *
- * We are done with getopt(). All arguments
- * except the filename go to the preprocessor,
- * so we need to do the following:
- * - check that a filename is actually present;
- * - advance av by optind-1 to skip arguments
- * already processed;
- * - decrease ac by optind, to remove the args
- * already processed and the final filename;
- * - set the last entry in av[] to NULL so
- * popen() can detect the end of the array;
- * - set optind=ac to let getopt() terminate.
- */
- if (optind == ac)
- errx(EX_USAGE, "no filename argument");
- cmd = optarg;
- av[ac-1] = NULL;
- av += optind - 1;
- ac -= optind;
- optind = ac;
- break;
-
- case 'q':
- g_co.do_quiet = 1;
- break;
-
- case 'S':
- g_co.show_sets = 1;
- break;
-
- default:
- errx(EX_USAGE, "bad arguments, for usage"
- " summary ``ipfw''");
+ case 'q':
+ g_co.do_quiet = 1;
+ break;
+
+ case 'S':
+ g_co.show_sets = 1;
+ break;
+
+ default:
+ errx(EX_USAGE, "bad arguments, for usage"
+ " summary ``ipfw''");
+ }
}
+ } else {
+ while ((c = getopt(ac, av, "nq")) != -1) {
+ switch(c) {
+ case 'n':
+ g_co.test_only = 1;
+ break;
+
+ case 'q':
+ g_co.do_quiet = 1;
+ break;
+ default:
+ errx(EX_USAGE, "bad arguments, for usage"
+ " summary ``dnctl''");
+ }
+ }
}
if (cmd == NULL && ac != optind + 1)
@@ -665,7 +685,7 @@ main(int ac, char *av[])
}
#endif
- if (strcmp(av[0], "dnctl") == 0)
+ if (strcmp("dnctl", basename(av[0])) == 0)
g_co.prog = cmdline_prog_dnctl;
else
g_co.prog = cmdline_prog_ipfw;
@@ -676,10 +696,6 @@ main(int ac, char *av[])
*/
if (ac > 1 && av[ac - 1][0] == '/') {
- if (! is_ipfw())
- errx(EX_USAGE, "usage: dnctl [options]\n"
- "do \"dnctl -h\" for details");
-
if (access(av[ac - 1], R_OK) == 0)
ipfw_readfile(ac, av);
else