nl_addr_parse handling of 'default', 'any', and 'all'

I found a small bug in the nl_addr_parse function when being passed the
strings "default", "any", or "all".  Currently nl_addr_parse will create
a zeroed nl_addr with a length corresponding to the family/hint or
AF_INET if omitted.  This behavior when used in conjunction with the
libnl-route library to add default routes to the system has the side
effect of creating a route to the host address 0.0.0.0/32.

Attached is a patch that matches the iproute2 behavior more closely
where we do set the family but the length of the nl_addr is set to 0.
This commit is contained in:
Justin Mayfield 2012-08-17 18:16:44 -06:00 committed by Thomas Graf
parent 97d2460fab
commit de28daf226

View file

@ -279,7 +279,9 @@ int nl_addr_parse(const char *addrstr, int hint, struct nl_addr **result)
if (!strcasecmp(str, "default") ||
!strcasecmp(str, "all") ||
!strcasecmp(str, "any")) {
len = 0;
switch (hint) {
case AF_INET:
case AF_UNSPEC:
@ -287,17 +289,14 @@ int nl_addr_parse(const char *addrstr, int hint, struct nl_addr **result)
* no hint given the user wants to have a IPv4
* address given back. */
family = AF_INET;
len = 4;
goto prefix;
case AF_INET6:
family = AF_INET6;
len = 16;
goto prefix;
case AF_LLC:
family = AF_LLC;
len = 6;
goto prefix;
default: