Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 07 Mar 2017 21:39:19 +0000
From:      bugzilla-noreply@freebsd.org
To:        freebsd-bugs@FreeBSD.org
Subject:   [Bug 217620] ipfw flow specification parsing
Message-ID:  <bug-217620-8@https.bugs.freebsd.org/bugzilla/>

next in thread | raw e-mail | index | archive | help
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D217620

            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: lutz@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 =3D strchr(arg, ',')) !=3D NULL)
                                *p++ =3D '\0';

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

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

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

                        tfe->dport =3D port;

--=20
You are receiving this mail because:
You are the assignee for the bug.=



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?bug-217620-8>