Date: Tue, 2 May 2000 12:40:03 -0700 (PDT) From: Darcy Buskermolen <darcy@ok-connect.com> To: freebsd-bugs@FreeBSD.org Subject: bin/18351 ipfw add with no rule number returns the wrong rule number Message-ID: <200005021940.MAA53802@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
The following reply was made to PR bin/18351; it has been noted by GNATS. From: Darcy Buskermolen <darcy@ok-connect.com> To: freebsd-gnats-submit@FreeBSD.org Cc: Subject: bin/18351 ipfw add with no rule number returns the wrong rule number Date: Tue, 02 May 2000 12:40:52 -0700 --=====================_957321652==_ Content-Type: text/plain; charset="us-ascii" Attached is my patch hopefully someone with a bit more hackers time can review and clean up this code \\DB --=====================_957321652==_ Content-Type: text/plain; charset="us-ascii" Content-Disposition: attachment; filename="ipfw.patch" *** ipfw.c.org Tue May 2 12:04:11 2000 --- ipfw.c Tue May 2 12:02:28 2000 *************** *** 1281,1300 **** int ac; char **av; { struct ip_fw rule; int i; u_char proto; struct protoent *pe; int saw_xmrc = 0, saw_via = 0; ! memset(&rule, 0, sizeof rule); av++; ac--; /* Rule number */ if (ac && isdigit(**av)) { rule.fw_number = atoi(*av); av++; ac--; } /* Action */ if (ac > 1 && !strncmp(*av, "prob", strlen(*av) ) ) { --- 1281,1341 ---- int ac; char **av; { + /* + struct ip_fw *rules; + + + void *data = NULL; + int pcwidth = 0; + int bcwidth = 0; + int n, num = 0; + + */ + struct dn_pipe *pipes; + int nbytes; + + struct ip_fw rule; + struct ip_fw *rules; int i; u_char proto; struct protoent *pe; + int num = 0; int saw_xmrc = 0, saw_via = 0; ! void *data=NULL; memset(&rule, 0, sizeof rule); av++; ac--; + { + const int unit = do_pipe ? sizeof(*pipes) : sizeof(*rules); + const int ocmd = do_pipe ? IP_DUMMYNET_GET : IP_FW_GET; + int nalloc = 0; + + while (num >= nalloc) { + nalloc = nalloc * 2 + 200; + nbytes = nalloc * unit; + if ((data = realloc(data, nbytes)) == NULL) + err(EX_OSERR, "realloc"); + if (getsockopt(s, IPPROTO_IP, ocmd, data, &nbytes) < 0) + err(EX_OSERR, "getsockopt(IP_%s_GET)", + do_pipe ? "DUMMYNET" : "FW"); + num = nbytes / unit; + } + } + /* Rule number */ if (ac && isdigit(**av)) { rule.fw_number = atoi(*av); av++; ac--; } + else { + rules = (struct ip_fw *) data; + num = 0; + while (rules[num].fw_number < 65535){ + num++; + } + rule.fw_number = num; + } /* Action */ if (ac > 1 && !strncmp(*av, "prob", strlen(*av) ) ) { --=====================_957321652==_-- To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200005021940.MAA53802>