aboutsummaryrefslogtreecommitdiff
path: root/lib/krb5/addr_families.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/krb5/addr_families.c')
-rw-r--r--lib/krb5/addr_families.c40
1 files changed, 16 insertions, 24 deletions
diff --git a/lib/krb5/addr_families.c b/lib/krb5/addr_families.c
index 5d321a7e917d..7ac0fa93f9d5 100644
--- a/lib/krb5/addr_families.c
+++ b/lib/krb5/addr_families.c
@@ -799,6 +799,7 @@ static struct addr_operations at[] = {
NULL,
NULL,
NULL,
+ NULL,
NULL
}
};
@@ -1160,6 +1161,7 @@ krb5_parse_address(krb5_context context,
{
int i, n;
struct addrinfo *ai, *a;
+ struct addrinfo hint;
int error;
int save_errno;
@@ -1171,18 +1173,18 @@ krb5_parse_address(krb5_context context,
krb5_address addr;
if((*at[i].parse_addr)(context, string, &addr) == 0) {
ALLOC_SEQ(addresses, 1);
- if (addresses->val == NULL) {
- krb5_set_error_message(context, ENOMEM,
- N_("malloc: out of memory", ""));
- return ENOMEM;
- }
+ if (addresses->val == NULL)
+ return krb5_enomem(context);
addresses->val[0] = addr;
return 0;
}
}
}
- error = getaddrinfo (string, NULL, NULL, &ai);
+ /* if not parsed as numeric address, do a name lookup */
+ memset(&hint, 0, sizeof(hint));
+ hint.ai_family = AF_UNSPEC;
+ error = getaddrinfo (string, NULL, &hint, &ai);
if (error) {
krb5_error_code ret2;
save_errno = errno;
@@ -1198,15 +1200,13 @@ krb5_parse_address(krb5_context context,
ALLOC_SEQ(addresses, n);
if (addresses->val == NULL) {
- krb5_set_error_message(context, ENOMEM,
- N_("malloc: out of memory", ""));
freeaddrinfo(ai);
- return ENOMEM;
+ return krb5_enomem(context);
}
addresses->len = 0;
for (a = ai, i = 0; a != NULL; a = a->ai_next) {
- if (krb5_sockaddr2address (context, ai->ai_addr, &addresses->val[i]))
+ if (krb5_sockaddr2address (context, a->ai_addr, &addresses->val[i]))
continue;
if(krb5_address_search(context, &addresses->val[i], addresses)) {
krb5_free_address(context, &addresses->val[i]);
@@ -1411,7 +1411,7 @@ krb5_copy_addresses(krb5_context context,
size_t i;
ALLOC_SEQ(outaddr, inaddr->len);
if(inaddr->len > 0 && outaddr->val == NULL)
- return ENOMEM;
+ return krb5_enomem(context);
for(i = 0; i < inaddr->len; i++)
krb5_copy_address(context, &inaddr->val[i], &outaddr->val[i]);
return 0;
@@ -1440,11 +1440,8 @@ krb5_append_addresses(krb5_context context,
size_t i;
if(source->len > 0) {
tmp = realloc(dest->val, (dest->len + source->len) * sizeof(*tmp));
- if(tmp == NULL) {
- krb5_set_error_message (context, ENOMEM,
- N_("malloc: out of memory", ""));
- return ENOMEM;
- }
+ if (tmp == NULL)
+ return krb5_enomem(context);
dest->val = tmp;
for(i = 0; i < source->len; i++) {
/* skip duplicates */
@@ -1483,19 +1480,14 @@ krb5_make_addrport (krb5_context context,
u_char *p;
*res = malloc (sizeof(**res));
- if (*res == NULL) {
- krb5_set_error_message (context, ENOMEM,
- N_("malloc: out of memory", ""));
- return ENOMEM;
- }
+ if (*res == NULL)
+ return krb5_enomem(context);
(*res)->addr_type = KRB5_ADDRESS_ADDRPORT;
ret = krb5_data_alloc (&(*res)->address, len);
if (ret) {
- krb5_set_error_message (context, ret,
- N_("malloc: out of memory", ""));
free (*res);
*res = NULL;
- return ret;
+ return krb5_enomem(context);
}
p = (*res)->address.data;
*p++ = 0;