From de28daf2269a5c7d55e6f1f50f1c1eff4db27a15 Mon Sep 17 00:00:00 2001 From: Justin Mayfield Date: Fri, 17 Aug 2012 18:16:44 -0600 Subject: 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. --- lib/addr.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'lib/addr.c') diff --git a/lib/addr.c b/lib/addr.c index 3acd9e4a..6150d75a 100644 --- a/lib/addr.c +++ b/lib/addr.c @@ -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: -- cgit v1.2.3