identity crisis of 6-STABLE in ipfw ipv6 ?

Yar Tikhiy yar at comp.chem.msu.su
Fri Aug 18 17:48:07 UTC 2006


On Wed, Aug 16, 2006 at 10:57:02AM -0400, John Baldwin wrote:
> On Wednesday 16 August 2006 04:53, David Malone wrote:
> > On Wed, Aug 16, 2006 at 08:13:20AM +0200, Kees Plonsz wrote:
> > > I just updated to 6-STABLE but my ipfw rules stopped working.
> > > It seems that "me6" is vanished into thin air.
> > > 
> > > # ipfw add 7000 allow ip from me6 to me6
> > > ipfw: hostname ``me6'' unknown
> > 
> > I think it was broken by some missing brackets in this commit:
> > 
> > 	http://www.freebsd.org/cgi/cvsweb.cgi/src/sbin/ipfw/ipfw2.c#rev1.88
> > 
> > Can you try the patch below? If it looks good, Max or I can commit
> > the fix.
> > 
> > 	David.
> 
> Note that the strcmp() != 0 doesn't need extra ()'s as != is higher than
> && in precedence.

Ditto for "ret == NULL" on the same line.  That can be spelled safely as:

	if (ret == NULL && strcmp(av, "any") != 0)

It's the precedence of && vs. || that can be mistaken easily.  The
rule is simple: && is multiplication and || is addition, with their
relative precedence the same as that of their arith counterparts.
However, it's usually safer to use more paretheses around them
because anybody but a die-hard C freak will have trouble interpreting
long chains of logical subexpressions connected by &&'s and ||'s,
with the meaning of some of them reversed by a bang. :-)

>            Operator                             Associativity
>            --------                             -------------
>            ...
>            == !=                                left to right
>            ...
>            &&                                   left to right
>            ||                                   left to right
> 
> > Index: ipfw2.c
> > ===================================================================
> > RCS file: /FreeBSD/FreeBSD-CVS/src/sbin/ipfw/ipfw2.c,v
> > retrieving revision 1.88
> > diff -u -r1.88 ipfw2.c
> > --- ipfw2.c	14 May 2006 03:53:04 -0000	1.88
> > +++ ipfw2.c	16 Aug 2006 08:50:04 -0000
> > @@ -3707,10 +3707,10 @@
> >  	    inet_pton(AF_INET6, host, &a))
> >  		ret = add_srcip6(cmd, av);
> >  	/* XXX: should check for IPv4, not !IPv6 */
> > -	if ((ret == NULL) && proto == IPPROTO_IP || strcmp(av, "me") == 0 ||
> > -	    !inet_pton(AF_INET6, host, &a))
> > +	if ((ret == NULL) && (proto == IPPROTO_IP || strcmp(av, "me") == 0 ||
> > +	    !inet_pton(AF_INET6, host, &a)))
> >  		ret = add_srcip(cmd, av);
> > -	if ((ret == NULL) && strcmp(av, "any") != 0)
> > +	if ((ret == NULL) && (strcmp(av, "any") != 0))
> >  		ret = cmd;
> >  
> >  	free(host);
> > @@ -3733,10 +3733,10 @@
> >  	    inet_pton(AF_INET6, host, &a))
> >  		ret = add_dstip6(cmd, av);
> >  	/* XXX: should check for IPv4, not !IPv6 */
> > -	if ((ret == NULL) && proto == IPPROTO_IP || strcmp(av, "me") == 0 ||
> > -	    !inet_pton(AF_INET6, av, &a))
> > +	if ((ret == NULL) && (proto == IPPROTO_IP || strcmp(av, "me") == 0 ||
> > +	    !inet_pton(AF_INET6, av, &a)))
> >  		ret = add_dstip(cmd, av);
> > -	if ((ret == NULL) && strcmp(av, "any") != 0)
> > +	if ((ret == NULL) && (strcmp(av, "any") != 0))
> >  		ret = cmd;
> >  
> >  	free(host);
> > _______________________________________________
> > freebsd-stable at freebsd.org mailing list
> > http://lists.freebsd.org/mailman/listinfo/freebsd-stable
> > To unsubscribe, send any mail to "freebsd-stable-unsubscribe at freebsd.org"
> > 
> 
> -- 
> John Baldwin
> _______________________________________________
> freebsd-stable at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-stable
> To unsubscribe, send any mail to "freebsd-stable-unsubscribe at freebsd.org"

-- 
Yar


More information about the freebsd-stable mailing list