]> granicus.if.org Git - libnl/commitdiff
nl_addr_parse handling of 'default', 'any', and 'all'
authorJustin Mayfield <jmayfield@cradlepoint.com>
Sat, 18 Aug 2012 00:16:44 +0000 (18:16 -0600)
committerThomas Graf <tgraf@redhat.com>
Wed, 29 Aug 2012 10:17:24 +0000 (12:17 +0200)
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

index 3acd9e4a8892c6c1c5f330996155d9e279b901aa..6150d75adbb429568739f6a7ef5bd76b915f5a79 100644 (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: