Author: luigi
Date: Thu Mar  4 16:55:32 2010
New Revision: 204717
URL: http://svn.freebsd.org/changeset/base/204717

Log:
  fix handling of sets

Modified:
  head/sbin/ipfw/ipfw2.c

Modified: head/sbin/ipfw/ipfw2.c
==============================================================================
--- head/sbin/ipfw/ipfw2.c      Thu Mar  4 16:54:56 2010        (r204716)
+++ head/sbin/ipfw/ipfw2.c      Thu Mar  4 16:55:32 2010        (r204717)
@@ -1625,13 +1625,21 @@ ipfw_sets_handler(char *av[])
        if (av[0] == NULL)
                errx(EX_USAGE, "set needs command");
        if (_substrcmp(*av, "show") == 0) {
-               void *data;
+               void *data = NULL;
                char const *msg;
+               int nalloc;
 
-               nbytes = sizeof(struct ip_fw);
+               nalloc = nbytes = sizeof(struct ip_fw);
+               while (nbytes >= nalloc) {
+                       if (data)
+                               free(data);
+                       nalloc = nalloc * 2 + 200;
+                       nbytes = nalloc;
                data = safe_calloc(1, nbytes);
                if (do_cmd(IP_FW_GET, data, (uintptr_t)&nbytes) < 0)
                        err(EX_OSERR, "getsockopt(IP_FW_GET)");
+               }
+
                bcopy(&((struct ip_fw *)data)->next_rule,
                        &set_disable, sizeof(set_disable));
 
@@ -1661,7 +1669,7 @@ ipfw_sets_handler(char *av[])
                i = do_cmd(IP_FW_DEL, masks, sizeof(uint32_t));
        } else if (_substrcmp(*av, "move") == 0) {
                av++;
-               if (!av[0] && _substrcmp(*av, "rule") == 0) {
+               if (av[0] && _substrcmp(*av, "rule") == 0) {
                        cmd = 2;
                        av++;
                } else
@@ -1685,7 +1693,7 @@ ipfw_sets_handler(char *av[])
                av++;
                masks[0] = masks[1] = 0;
 
-               while (!av[0]) {
+               while (av[0]) {
                        if (isdigit(**av)) {
                                i = atoi(*av);
                                if (i < 0 || i > RESVD_SET)
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"

Reply via email to