int librad_dodns = 0;
int librad_debug = 0;
-
/*
* Return a printable host name (or IP address in dot notation)
* for the supplied IP address.
const char *inet_ntop(int af, const void *src, char *dst, size_t cnt)
{
if (af == AF_INET) {
- uint32_t ipaddr;
+ struct in_addr *ipaddr = src;
- if (cnt <= 15) return NULL;
-
- ipaddr = *(uint32_t *) src;
- ipaddr = ntohl(ipaddr);
+ if (cnt <= INET_ADDRSTRLEN) return NULL;
snprintf(dst, cnt, "%d.%d.%d.%d",
- (ipaddr >> 24) & 0xff,
- (ipaddr >> 16) & 0xff,
- (ipaddr >> 8) & 0xff,
- (ipaddr ) & 0xff);
+ ipaddr.s_addr[0], ipaddr.s_addr[1],
+ ipaddr.s_addr[2], ipaddr.s_addr[3]);
+ return dst;
+ }
+
+ /*
+ * If the system doesn't define this, we define it
+ * in missing.h
+ */
+ if (af == AF_INET6) {
+ struct in6_addr *ipaddr = src;
+
+ if (cnt <= INET6_ADDRSTRLEN) return NULL;
+
+ snprintf(dst, cnt, "%x:%x:%x:%x:%x:%x:%x:%x",
+ ipaddr.s6_addr[0], ipaddr.s6_addr[1],
+ ipaddr.s6_addr[2], ipaddr.s6_addr[3],
+ ipaddr.s6_addr[4], ipaddr.s6_addr[5],
+ ipaddr.s6_addr[6], ipaddr.s6_addr[7],
+ ipaddr.s6_addr[8], ipaddr.s6_addr[9],
+ ipaddr.s6_addr[10], ipaddr.s6_addr[11],
+ ipaddr.s6_addr[12], ipaddr.s6_addr[13],
+ ipaddr.s6_addr[14], ipaddr.s6_addr[15]);
return dst;
}
return dst;
}
+
static const char *hextab = "0123456789abcdef";
/*
break;
case PW_TYPE_IPV6ADDR:
-#if defined(HAVE_INET_NTOP) && defined(AF_INET6)
a = inet_ntop(AF_INET6,
(const struct in6_addr *) vp->strvalue,
buf, sizeof(buf));
-#else
- /*
- * Do it really stupidly.
- */
- snprintf(buf, sizeof(buf), "%x:%x:%x:%x:%x:%x:%x:%x",
- (vp->strvalue[0] << 8) | vp->strvalue[1],
- (vp->strvalue[2] << 8) | vp->strvalue[3],
- (vp->strvalue[4] << 8) | vp->strvalue[5],
- (vp->strvalue[6] << 8) | vp->strvalue[7],
- (vp->strvalue[8] << 8) | vp->strvalue[9],
- (vp->strvalue[10] << 8) | vp->strvalue[11],
- (vp->strvalue[12] << 8) | vp->strvalue[13],
- (vp->strvalue[15] << 8) | vp->strvalue[15]);
- a = buf;
-#endif
break;
default: