use getaddrinfo instead of getnodebyname{,2}
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@7628 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -37,37 +37,34 @@ RCSID("$Id$");
|
|||||||
|
|
||||||
static krb5_error_code
|
static krb5_error_code
|
||||||
add_addrs(krb5_context context,
|
add_addrs(krb5_context context,
|
||||||
krb5_addresses *a,
|
krb5_addresses *addr,
|
||||||
struct hostent *hostent, int af)
|
struct addrinfo *ai)
|
||||||
{
|
{
|
||||||
krb5_error_code ret;
|
krb5_error_code ret;
|
||||||
char **h;
|
|
||||||
unsigned n, i;
|
unsigned n, i;
|
||||||
void *tmp;
|
void *tmp;
|
||||||
|
struct addrinfo *a;
|
||||||
|
|
||||||
if (hostent == NULL)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
n = 0;
|
n = 0;
|
||||||
for (h = hostent->h_addr_list; *h != NULL; ++h)
|
for (a = ai; a != NULL; a = a->ai_next)
|
||||||
++n;
|
++n;
|
||||||
|
|
||||||
i = a->len;
|
i = addr->len;
|
||||||
a->len += n;
|
addr->len += n;
|
||||||
tmp = realloc(a->val, a->len * sizeof(*a->val));
|
tmp = realloc(addr->val, addr->len * sizeof(*addr->val));
|
||||||
if (tmp == NULL) {
|
if (tmp == NULL) {
|
||||||
ret = ENOMEM;
|
ret = ENOMEM;
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
a->val = tmp;
|
addr->val = tmp;
|
||||||
for (h = hostent->h_addr_list; *h != NULL; ++h) {
|
for (a = ai; a != NULL; a = a->ai_next) {
|
||||||
ret = krb5_h_addr2addr (af, *h, &a->val[i++]);
|
ret = krb5_sockaddr2address (a->ai_addr, &addr->val[i++]);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
fail:
|
fail:
|
||||||
krb5_free_addresses (context, a);
|
krb5_free_addresses (context, addr);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -133,26 +130,19 @@ krb5_get_forwarded_creds (krb5_context context,
|
|||||||
int32_t sec, usec;
|
int32_t sec, usec;
|
||||||
krb5_kdc_flags kdc_flags;
|
krb5_kdc_flags kdc_flags;
|
||||||
krb5_crypto crypto;
|
krb5_crypto crypto;
|
||||||
|
struct addrinfo *ai;
|
||||||
|
|
||||||
addrs.len = 0;
|
addrs.len = 0;
|
||||||
addrs.val = NULL;
|
addrs.val = NULL;
|
||||||
|
|
||||||
#ifdef HAVE_GETHOSTBYNAME2
|
ret = getaddrinfo (hostname, NULL, NULL, &ai);
|
||||||
#ifdef HAVE_IPV6
|
|
||||||
ret = add_addrs (context, &addrs, gethostbyname2(hostname, AF_INET6),
|
|
||||||
AF_INET6);
|
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
#endif
|
|
||||||
ret = add_addrs (context, &addrs, gethostbyname2(hostname, AF_INET),
|
ret = add_addrs (context, &addrs, ai);
|
||||||
AF_INET);
|
freeaddrinfo (ai);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
#else
|
|
||||||
ret = add_addrs (context, &addrs, roken_gethostbyname(hostname), AF_INET);
|
|
||||||
if (ret)
|
|
||||||
return ret;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
kdc_flags.i = flags;
|
kdc_flags.i = flags;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user