From 16d6bda3aa428a1d9d8b51598994e2b4bcc9ee52 Mon Sep 17 00:00:00 2001 From: Nicolas Williams Date: Wed, 14 Apr 2021 19:25:39 -0500 Subject: [PATCH] krb5: Add _krb5_parse_address_no_lookup() --- lib/krb5/addr_families.c | 42 +++++++++++++++++++++++---------- lib/krb5/libkrb5-exports.def.in | 1 + lib/krb5/version-script.map | 1 + 3 files changed, 32 insertions(+), 12 deletions(-) diff --git a/lib/krb5/addr_families.c b/lib/krb5/addr_families.c index 3432f55e7..4d235fff4 100644 --- a/lib/krb5/addr_families.c +++ b/lib/krb5/addr_families.c @@ -1143,6 +1143,32 @@ krb5_print_address (const krb5_address *addr, return 0; } +KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL +_krb5_parse_address_no_lookup(krb5_context context, + const char *string, + krb5_addresses *addresses) +{ + int i; + + addresses->len = 0; + addresses->val = NULL; + + for(i = 0; i < num_addrs; i++) { + if(at[i].parse_addr) { + krb5_address addr; + if((*at[i].parse_addr)(context, string, &addr) == 0) { + ALLOC_SEQ(addresses, 1); + if (addresses->val == NULL) + return krb5_enomem(context); + addresses->val[0] = addr; + return 0; + } + } + } + + return -1; +} + /** * krb5_parse_address returns the resolved hostname in string to the * krb5_addresses addresses . @@ -1161,6 +1187,7 @@ krb5_parse_address(krb5_context context, const char *string, krb5_addresses *addresses) { + krb5_error_code ret; int i, n; struct addrinfo *ai, *a; struct addrinfo hint; @@ -1170,18 +1197,9 @@ krb5_parse_address(krb5_context context, addresses->len = 0; addresses->val = NULL; - for(i = 0; i < num_addrs; i++) { - if(at[i].parse_addr) { - krb5_address addr; - if((*at[i].parse_addr)(context, string, &addr) == 0) { - ALLOC_SEQ(addresses, 1); - if (addresses->val == NULL) - return krb5_enomem(context); - addresses->val[0] = addr; - return 0; - } - } - } + ret = _krb5_parse_address_no_lookup(context, string, addresses); + if (ret == 0 || ret != -1) + return ret; /* if not parsed as numeric address, do a name lookup */ memset(&hint, 0, sizeof(hint)); diff --git a/lib/krb5/libkrb5-exports.def.in b/lib/krb5/libkrb5-exports.def.in index adae04360..73b6f1a94 100644 --- a/lib/krb5/libkrb5-exports.def.in +++ b/lib/krb5/libkrb5-exports.def.in @@ -504,6 +504,7 @@ EXPORTS krb5_pac_parse krb5_pac_verify krb5_padata_add + _krb5_parse_address_no_lookup krb5_parse_address krb5_parse_name krb5_parse_name_flags diff --git a/lib/krb5/version-script.map b/lib/krb5/version-script.map index c2b5c5c81..056ad1058 100644 --- a/lib/krb5/version-script.map +++ b/lib/krb5/version-script.map @@ -497,6 +497,7 @@ HEIMDAL_KRB5_2.0 { krb5_pac_parse; krb5_pac_verify; krb5_padata_add; + _krb5_parse_address_no_lookup; krb5_parse_address; krb5_parse_name; krb5_parse_name_flags;