Return 0 from DNS_IPAddress2Name when name was truncated
This commit is contained in:
parent
902ed3c694
commit
b4b2491015
2 changed files with 18 additions and 11 deletions
27
nameserv.c
27
nameserv.c
|
@ -127,33 +127,32 @@ try_again:
|
||||||
|
|
||||||
/* ================================================== */
|
/* ================================================== */
|
||||||
|
|
||||||
void
|
int
|
||||||
DNS_IPAddress2Name(IPAddr *ip_addr, char *name, int len)
|
DNS_IPAddress2Name(IPAddr *ip_addr, char *name, int len)
|
||||||
{
|
{
|
||||||
|
char *result = NULL;
|
||||||
|
|
||||||
#ifdef HAVE_IPV6
|
#ifdef HAVE_IPV6
|
||||||
int result;
|
|
||||||
struct sockaddr_in in4;
|
struct sockaddr_in in4;
|
||||||
struct sockaddr_in6 in6;
|
struct sockaddr_in6 in6;
|
||||||
|
char hbuf[NI_MAXHOST];
|
||||||
|
|
||||||
switch (ip_addr->family) {
|
switch (ip_addr->family) {
|
||||||
case IPADDR_INET4:
|
case IPADDR_INET4:
|
||||||
memset(&in4, 0, sizeof (in4));
|
memset(&in4, 0, sizeof (in4));
|
||||||
in4.sin_family = AF_INET;
|
in4.sin_family = AF_INET;
|
||||||
in4.sin_addr.s_addr = htonl(ip_addr->addr.in4);
|
in4.sin_addr.s_addr = htonl(ip_addr->addr.in4);
|
||||||
result = getnameinfo((const struct sockaddr *)&in4, sizeof (in4), name, len, NULL, 0, 0);
|
if (!getnameinfo((const struct sockaddr *)&in4, sizeof (in4), hbuf, sizeof (hbuf), NULL, 0, 0))
|
||||||
|
result = hbuf;
|
||||||
break;
|
break;
|
||||||
case IPADDR_INET6:
|
case IPADDR_INET6:
|
||||||
memset(&in6, 0, sizeof (in6));
|
memset(&in6, 0, sizeof (in6));
|
||||||
in6.sin6_family = AF_INET6;
|
in6.sin6_family = AF_INET6;
|
||||||
memcpy(&in6.sin6_addr.s6_addr, ip_addr->addr.in6, sizeof (in6.sin6_addr.s6_addr));
|
memcpy(&in6.sin6_addr.s6_addr, ip_addr->addr.in6, sizeof (in6.sin6_addr.s6_addr));
|
||||||
result = getnameinfo((const struct sockaddr *)&in6, sizeof (in6), name, len, NULL, 0, 0);
|
if (!getnameinfo((const struct sockaddr *)&in6, sizeof (in6), hbuf, sizeof (hbuf), NULL, 0, 0))
|
||||||
|
result = hbuf;
|
||||||
break;
|
break;
|
||||||
default:
|
|
||||||
result = 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (result)
|
|
||||||
snprintf(name, len, "%s", UTI_IPToString(ip_addr));
|
|
||||||
#else
|
#else
|
||||||
struct hostent *host;
|
struct hostent *host;
|
||||||
uint32_t addr;
|
uint32_t addr;
|
||||||
|
@ -171,8 +170,16 @@ DNS_IPAddress2Name(IPAddr *ip_addr, char *name, int len)
|
||||||
default:
|
default:
|
||||||
host = NULL;
|
host = NULL;
|
||||||
}
|
}
|
||||||
snprintf(name, len, "%s", host ? host->h_name : UTI_IPToString(ip_addr));
|
if (host)
|
||||||
|
result = host->h_name;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (result == NULL)
|
||||||
|
result = UTI_IPToString(ip_addr);
|
||||||
|
if (snprintf(name, len, "%s", result) >= len)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ================================================== */
|
/* ================================================== */
|
||||||
|
|
|
@ -39,7 +39,7 @@ extern void DNS_SetAddressFamily(int family);
|
||||||
|
|
||||||
extern int DNS_Name2IPAddress(const char *name, IPAddr *addr, int retry);
|
extern int DNS_Name2IPAddress(const char *name, IPAddr *addr, int retry);
|
||||||
|
|
||||||
extern void DNS_IPAddress2Name(IPAddr *ip_addr, char *name, int len);
|
extern int DNS_IPAddress2Name(IPAddr *ip_addr, char *name, int len);
|
||||||
|
|
||||||
#endif /* GOT_NAMESERV_H */
|
#endif /* GOT_NAMESERV_H */
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue