From owner-freebsd-audit Fri Jan 24 9: 2:45 2003 Delivered-To: freebsd-audit@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id ADAE537B401; Fri, 24 Jan 2003 09:02:41 -0800 (PST) Received: from relay1.macomnet.ru (relay1.macomnet.ru [195.128.64.10]) by mx1.FreeBSD.org (Postfix) with ESMTP id 170A343F3F; Fri, 24 Jan 2003 09:02:40 -0800 (PST) (envelope-from maxim@FreeBSD.org) Received: from news1.macomnet.ru (news1.macomnet.ru [195.128.64.14]) by relay1.macomnet.ru (8.11.6/8.11.6) with ESMTP id h0OH2cj9632235; Fri, 24 Jan 2003 20:02:38 +0300 (MSK) Date: Fri, 24 Jan 2003 20:02:38 +0300 (MSK) From: Maxim Konovalov To: Giorgos Keramidas Cc: freebsd-audit@FreeBSD.org, "" , "" Subject: Re: (fwd) bin/47196: ipfw won't format correctly output from 'ipfw show' command In-Reply-To: <20030123195335.GC678@gothmog.gr> Message-ID: <20030124194701.P19393@news1.macomnet.ru> References: <20030123034022.GA587@gothmog.gr> <20030123184329.T77556@news1.macomnet.ru> <20030123195335.GC678@gothmog.gr> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: owner-freebsd-audit@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG On 21:53+0200, Jan 23, 2003, Giorgos Keramidas wrote: > On 2003-01-23 19:10, Maxim Konovalov wrote: > > On 05:40+0200, Jan 23, 2003, Giorgos Keramidas wrote: > > > I've sent the following 2 days ago to ipfw@ but received no reply. > > > Does anyone feel like testing/reviewing or committing this? This > > > change should be all we need to fix & close PR bin/47196 :-) > > > > Formatting was broken in rev. 1.103 ipfw.c in -CURRENT and ipfw2 > > in -CURRENT and -STABLE inherited the bug later. > > > > I think we should rever this part of rev. 1.103 of ipfw.c in ipfw2.c: > > Not quite. See inline comments. Yes, you are right. Revert 1.103 a little more. Note we always show packets/bytes for dynamic rules. Index: ipfw2.c =================================================================== RCS file: /home/ncvs/src/sbin/ipfw/ipfw2.c,v retrieving revision 1.21 diff -u -r1.21 ipfw2.c --- ipfw2.c 12 Jan 2003 03:31:10 -0000 1.21 +++ ipfw2.c 24 Jan 2003 16:34:48 -0000 @@ -802,7 +802,7 @@ } static void -show_ipfw(struct ip_fw *rule) +show_ipfw(struct ip_fw *rule, int pcwidth, int bcwidth) { static int twidth = 0; int l; @@ -823,7 +823,7 @@ printf("%05u ", rule->rulenum); if (do_acct) - printf("%10qu %10qu ", rule->pcnt, rule->bcnt); + printf("%*qu %*qu ", pcwidth, rule->pcnt, bcwidth, rule->bcnt); if (do_time) { char timestr[30]; @@ -1202,7 +1202,7 @@ } static void -show_dyn_ipfw(ipfw_dyn_rule *d) +show_dyn_ipfw(ipfw_dyn_rule *d, int pcwidth, int bcwidth) { struct protoent *pe; struct in_addr a; @@ -1212,8 +1212,8 @@ return; } - printf("%05d %10qu %10qu (%ds)", - d->rulenum, d->pcnt, d->bcnt, d->expire); + printf("%05d %*qu %*qu (%ds)", d->rulenum, pcwidth, d->pcnt, bcwidth, + d->bcnt, d->expire); switch (d->dyn_type) { case O_LIMIT_PARENT: printf(" PARENT %d", d->count); @@ -1557,7 +1557,7 @@ ipfw_dyn_rule *dynrules, *d; void *lim, *data = NULL; - int n, nbytes, nstat, ndyn; + int bcwidth, n, nbytes, nstat, ndyn, pcwidth, width; int exitval = EX_OK; int lac; char **lav; @@ -1607,16 +1607,43 @@ n = (void *)r - data; ndyn = (nbytes - n) / sizeof *dynrules; + /* if showing stats, figure out column widths ahead of time */ + bcwidth = pcwidth = 0; + if (do_acct) { + for (n = 0, r = data; n < nstat; + n++, r = (void *)r + RULESIZE(r)) { + /* packet counter */ + width = snprintf(NULL, 0, "%qu", r->pcnt); + if (width > pcwidth) + pcwidth = width; + + /* byte counter */ + width = snprintf(NULL, 0, "%qu", r->bcnt); + if (width > bcwidth) + bcwidth = width; + } + } + if (do_dynamic && ndyn) { + for (n = 0, d = dynrules; n < ndyn; n++, d++) { + width = snprintf(NULL, 0, "%qu", d->pcnt); + if (width > pcwidth) + pcwidth = width; + + width = snprintf(NULL, 0, "%qu", d->bcnt); + if (width > bcwidth) + bcwidth = width; + } + } /* if no rule numbers were specified, list all rules */ if (ac == 0) { for (n = 0, r = data; n < nstat; n++, r = (void *)r + RULESIZE(r) ) - show_ipfw(r); + show_ipfw(r, pcwidth, bcwidth); if (do_dynamic && ndyn) { printf("## Dynamic rules (%d):\n", ndyn); for (n = 0, d = dynrules; n < ndyn; n++, d++) - show_dyn_ipfw(d); + show_dyn_ipfw(d, pcwidth, bcwidth); } goto done; } @@ -1636,7 +1663,7 @@ if (r->rulenum > rnum) break; if (r->rulenum == rnum) { - show_ipfw(r); + show_ipfw(r, pcwidth, bcwidth); seen = 1; } } @@ -1659,7 +1686,7 @@ if (d->rulenum > rnum) break; if (d->rulenum == rnum) - show_dyn_ipfw(d); + show_dyn_ipfw(d, pcwidth, bcwidth); } } } @@ -3221,7 +3248,7 @@ if (getsockopt(s, IPPROTO_IP, IP_FW_ADD, rule, &i) == -1) err(EX_UNAVAILABLE, "getsockopt(%s)", "IP_FW_ADD"); if (!do_quiet) - show_ipfw(rule); + show_ipfw(rule, 10, 10); } static void %%% -- Maxim Konovalov, maxim@macomnet.ru, maxim@FreeBSD.org To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-audit" in the body of the message