diff options
Diffstat (limited to 'lib/krb5/addr_families.c')
-rw-r--r-- | lib/krb5/addr_families.c | 40 |
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; |