https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=217620

            Bug ID: 217620
           Summary: ipfw flow specification parsing
           Product: Base System
           Version: 11.0-STABLE
          Hardware: Any
                OS: Any
            Status: New
          Severity: Affects Only Me
          Priority: ---
         Component: bin
          Assignee: freebsd-bugs@FreeBSD.org
          Reporter: l...@donnerhacke.de

Parsing of port-numbers explicitly set to "0" does not work.
BTW: The whole code is broken for parsing named ports.

How to repeat:
root@server:~ # ipfw table test create type
flow:src-ip,src-port,dst-ip,dst-port,proto
root@server:~ # ipfw table all info
--- table(test), set(0) ---
 kindex: 1, type: flow:src-ip,proto,src-port,dst-ip,dst-port
 references: 0, valtype: legacy
 algorithm: flow:hash
 items: 0, size: 296
root@server:~ # ipfw table test add 0.0.0.0,0,0,0.0.0.0,0
ipfw: Unknown service: 0

After the patch:
root@server:~ # ipfw table test add 0.0.0.0,0,0,0.0.0.0,0
added: 0.0.0.0,0,0,0.0.0.0,0 0
root@server:~ # ipfw table test list
--- table(test), set(0) ---
0.0.0.0,0,0,0.0.0.0,0 0

--- sbin/ipfw/ipfw2.h   (revision 314807)
+++ sbin/ipfw/ipfw2.h   (working copy)
@@ -1236,12 +1269,11 @@
                        if ((p = strchr(arg, ',')) != NULL)
                                *p++ = '\0';

-                       if ((port = htons(strtol(arg, NULL, 10))) == 0) {
+                       port = htons(strtol(arg, &pp, 10));
+                       if(*pp != '\0') {
                                if ((sent = getservbyname(arg, NULL)) == NULL)
-                                       errx(EX_DATAERR, "Unknown service: %s",
-                                           arg);
-                               else
-                                       key = sent->s_port;
+                                       errx(EX_DATAERR, "Unknown service: %s",
arg);
+                               port = sent->s_port;
                        }

                        tfe->sport = port;
@@ -1280,12 +1312,11 @@
                        if ((p = strchr(arg, ',')) != NULL)
                                *p++ = '\0';

-                       if ((port = htons(strtol(arg, NULL, 10))) == 0) {
+                       port = htons(strtol(arg, &pp, 10));
+                       if (*pp != '\0') {
                                if ((sent = getservbyname(arg, NULL)) == NULL)
-                                       errx(EX_DATAERR, "Unknown service: %s",
-                                           arg);
-                               else
-                                       key = sent->s_port;
+                                       errx(EX_DATAERR, "Unknown service: %s",
arg);
+                               port = sent->s_port;
                        }

                        tfe->dport = port;

-- 
You are receiving this mail because:
You are the assignee for the bug.
_______________________________________________
freebsd-bugs@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-bugs
To unsubscribe, send any mail to "freebsd-bugs-unsubscr...@freebsd.org"

Reply via email to