util: require inet_pton()
Always use inet_pton() for converting IP addresses. It should be available on all currently supported systems.
This commit is contained in:
parent
579d8c9907
commit
7a02371698
2 changed files with 4 additions and 17 deletions
|
@ -28,6 +28,7 @@
|
||||||
#ifndef GOT_SYSINCL_H
|
#ifndef GOT_SYSINCL_H
|
||||||
#define GOT_SYSINCL_H
|
#define GOT_SYSINCL_H
|
||||||
|
|
||||||
|
#include <arpa/inet.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
@ -61,11 +62,6 @@
|
||||||
#include <sys/timex.h>
|
#include <sys/timex.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef FEAT_IPV6
|
|
||||||
/* For inet_ntop() */
|
|
||||||
#include <arpa/inet.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_GETRANDOM
|
#ifdef HAVE_GETRANDOM
|
||||||
#include <sys/random.h>
|
#include <sys/random.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
15
util.c
15
util.c
|
@ -325,9 +325,10 @@ UTI_IPToString(const IPAddr *addr)
|
||||||
int
|
int
|
||||||
UTI_StringToIP(const char *addr, IPAddr *ip)
|
UTI_StringToIP(const char *addr, IPAddr *ip)
|
||||||
{
|
{
|
||||||
#ifdef FEAT_IPV6
|
|
||||||
struct in_addr in4;
|
struct in_addr in4;
|
||||||
|
#ifdef FEAT_IPV6
|
||||||
struct in6_addr in6;
|
struct in6_addr in6;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (inet_pton(AF_INET, addr, &in4) > 0) {
|
if (inet_pton(AF_INET, addr, &in4) > 0) {
|
||||||
ip->family = IPADDR_INET4;
|
ip->family = IPADDR_INET4;
|
||||||
|
@ -336,23 +337,13 @@ UTI_StringToIP(const char *addr, IPAddr *ip)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef FEAT_IPV6
|
||||||
if (inet_pton(AF_INET6, addr, &in6) > 0) {
|
if (inet_pton(AF_INET6, addr, &in6) > 0) {
|
||||||
ip->family = IPADDR_INET6;
|
ip->family = IPADDR_INET6;
|
||||||
ip->_pad = 0;
|
ip->_pad = 0;
|
||||||
memcpy(ip->addr.in6, in6.s6_addr, sizeof (ip->addr.in6));
|
memcpy(ip->addr.in6, in6.s6_addr, sizeof (ip->addr.in6));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
unsigned long a, b, c, d, n;
|
|
||||||
|
|
||||||
n = sscanf(addr, "%lu.%lu.%lu.%lu", &a, &b, &c, &d);
|
|
||||||
if (n == 4) {
|
|
||||||
ip->family = IPADDR_INET4;
|
|
||||||
ip->_pad = 0;
|
|
||||||
ip->addr.in4 = ((a & 0xff) << 24) | ((b & 0xff) << 16) |
|
|
||||||
((c & 0xff) << 8) | (d & 0xff);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Reference in a new issue