Allow parsing of IPv6 addresses as domain names
authorAlan T. DeKok <aland@freeradius.org>
Tue, 8 Jun 2010 05:55:07 +0000 (07:55 +0200)
committerAlan T. DeKok <aland@freeradius.org>
Tue, 8 Jun 2010 05:55:07 +0000 (07:55 +0200)
src/lib/valuepair.c

index 8cdf673..a5de57c 100644 (file)
@@ -1103,12 +1103,21 @@ VALUE_PAIR *pairparsevalue(VALUE_PAIR *vp, const char *value)
                        break;
 
                case PW_TYPE_IPV6ADDR:
-                       if (inet_pton(AF_INET6, value, &vp->vp_ipv6addr) <= 0) {
-                               fr_strerror_printf("failed to parse IPv6 address "
-                                          "string \"%s\"", value);
-                               return NULL;
+                       {
+                               fr_ipaddr_t ipaddr;
+
+                               if (ip_hton(value, AF_INET6, &ipaddr) < 0) {
+                                       char buffer[1024];
+
+                                       strlcpy(buffer, fr_strerror(), sizeof(buffer));
+
+                                       fr_strerror_printf("failed to parse IPv6 address "
+                                                           "string \"%s\": %s", value, buffer);
+                                       return NULL;
+                               }
+                               vp->vp_ipv6addr = ipaddr.ipaddr.ip6addr;
+                               vp->length = 16; /* length of IPv6 address */
                        }
-                       vp->length = 16; /* length of IPv6 address */
                        break;
 
                case PW_TYPE_IPV6PREFIX: