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:
Assar Westerlund
1999-12-20 00:57:37 +00:00
parent f04459e7d0
commit b11d86b36c

View File

@@ -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;