David Powell wrote:
> David Powell wrote:
>> Tony Nguyen wrote:
>>> Dave,
>>>
>>> See my responses inline and the updated webrev at:
>>>
>>> http://cr.opensolaris.org/~tonyn/firewall13Jan2009-inc/
>>> http://cr.opensolaris.org/~tonyn/firewall13Jan2009/
>>
>> I'm still working through ipf_include.sh.
>
> ... and servinfo.c. Here's the rest:
>
> servinfo.c:
>
> uaddr2port:
>
> If there's only one dot in the provided address, you'll scan past
> the beginning of your buffer (and could end up writing past the end
> of 'port_str'). You need to ensure 'p' doesn't advance past
> 'addr'.
>
Universal addresses should have the format
h1.h2.h3.h4.p1.p2 (IPv4)
x1:x2:x3:x4:x5:x6:x7:x8.p1.p2 (IPv6)
However, I agree that we should better handle bad input and will make
the suggested change.
> Since the string pointed to by 'p' is 'l' bytes long, after the
> strncpy 'port_str' won't neccesarily be NUL terminated, which could
> cause atol to fail.
I thought the prior bzero call would prevent that problem, especially if
we make sure 'p' doesn't advance past 'addr'. Or would you prefer should
be replacing it with "strlcpy(port_str, p, l + 1)" ?
> svc_getrpcinfo:
>
> I'm still wondering where the "12" in "buf[12]" comes from. It
> should either be documented, or a constant (one hopefully derived
> from whatever determines the length of the buffer).
Yes, a constant would be more clear but I'm not sure what the optimal
size should be. The buffer holds either port number (2^16 value) or a
netid (currently limited to tcp, udp, tcp6, udp6) and an extra space.
Does 12 seems reasonable?
> You now silently exclude protocols or ports that don't fit on the
> line. I suppose it is unlikely, but I'm wondering if that was a
> concious choice.
>
Yes, it is a conscious choice.
> printf("%s\n", str) is more simply written as puts(str);
>
will do
All suggested changes to ipf_include.sh will be followed.
Much appreciated,
tony
> ipf_include.sh:
>
> Don't use &&/|| with { }; use if/then instead.
>
> Instead of
>
> command && return 0 || return 1
>
> when command returns 0 or 1, do
>
> command
> return $?
>
> inst_ipf_file:
> inst_nat_file:
>
> Instead of echoing the result of fmri_to_file to concatenate a
> suffix, pass the suffix as an argument to fmri_to_file to append
> for you. Then just call fmri_to_file.
>
> (On further inspection, inst_nat_file doesn't appear to be used,
> and other uses of inst_ipf_file have been replaced per my previous
> comments. They should just be removed.)
>
> service_check_state:
>
> Instead of
>
> while true
> condition && break
> sleep
>
> do
>
> while !condition
> sleep
>
> file_get_ports:
> get_active_ports:
>
> '/to.*port =/ s/\(.*to.* port =\) \([a-z0-9]*\).*/\2/p'
>
> can be simplified to
>
> 's/.*to.* port = \([a-z0-9]*\).*/\1/p'
>
> since 'p' will only print if a substitution is made, and the
> pattern is more restrictive than the address.
>
> prepend_new_rules:
>
> I don't think it's necessary to escape '@'.
>
> tuple_get_port:
>
> There's no need to escape ':' in 's/.*\://''
>
> tuple_get_proto:
>
> There's no need to escape ':' in 's/\:.*//''
>
> Use if/then/else here; it will be clearer.
>
> ipf_remove_lock:
>
> Why do you remove the lock in two steps instead of just 'rm -r' as
> you do in ipf_get_lock?
>
> Instead of 'while [ true ]' use 'while :'.
>
> replace_file:
>
> Why not always move?
>
> process_server_svc:
>
> All callers test for IPF_FMRI before calling this function. You
> don't need to test it again.
>
> All callers test service_is_enabled before calling this function.
> You don't need to test it again.
>
> process_nonsvc_progs:
>
> Instead of using port_is_range, just 'set -- $port' and test $#.
>
> create_services_rules:
>
> Instead of scraping the output of svcs, it is probably more stable
> and more efficient to get the list of services using:
>
> svcprop -cf -p general/enabled -p general_ovr/enabled '*'
> 2>/dev/null |
> sed -n 's,^\(svc:.*\)/:properties/.* true$,\1,p' | sort -u
>
> Since your 'service_is_enabled' predicate determines if the service
> is enabled *or* temporarily enabled, with the above you can get rid
> of that test from your loop.
>
> service_update_rules:
>
> I missed that you don't install rules for services that are in
> maintenance. If this is the case, the decision to install rules
> for services that are temporarily disabled doesn't really make
> sense. (I'd still replace the use of svcs, though.)
>
> service_update:
> create_services_rules:
>
> Both test the result of ipf_get_lock, but afaikt it will always
> succeed.
_______________________________________________
networking-discuss mailing list
[email protected]