From 38e989bc5d5ff556505dbd149a0757276774983d Mon Sep 17 00:00:00 2001 From: Jakub Hrozek Date: Fri, 27 May 2011 11:44:16 +0200 Subject: Add utility function to return IP address as string --- src/providers/ipa/ipa_common.c | 10 ++-------- src/providers/krb5/krb5_common.c | 11 ++--------- src/resolv/async_resolv.c | 24 ++++++++++++++++++++++++ src/resolv/async_resolv.h | 3 +++ 4 files changed, 31 insertions(+), 17 deletions(-) diff --git a/src/providers/ipa/ipa_common.c b/src/providers/ipa/ipa_common.c index 7d7f04665..2e54aa9e4 100644 --- a/src/providers/ipa/ipa_common.c +++ b/src/providers/ipa/ipa_common.c @@ -574,15 +574,9 @@ static void ipa_resolve_callback(void *private_data, struct fo_server *server) return; } - address = talloc_zero_size(service, 128); + address = resolv_get_string_address(service, srvaddr); if (address == NULL) { - DEBUG(1, ("talloc_zero failed.\n")); - return; - } - - if (inet_ntop(srvaddr->h_addrtype, srvaddr->h_addr_list[0], - address, 128) == NULL) { - DEBUG(1, ("inet_ntop failed [%d][%s].\n", errno, strerror(errno))); + DEBUG(1, ("resolv_get_string_address failed.\n")); return; } diff --git a/src/providers/krb5/krb5_common.c b/src/providers/krb5/krb5_common.c index 434fc7fbc..06c3cbac6 100644 --- a/src/providers/krb5/krb5_common.c +++ b/src/providers/krb5/krb5_common.c @@ -384,16 +384,9 @@ static void krb5_resolve_callback(void *private_data, struct fo_server *server) return; } - address = talloc_zero_size(krb5_service, 128); + address = resolv_get_string_address(krb5_service, srvaddr); if (address == NULL) { - DEBUG(1, ("talloc_zero failed.\n")); - return; - } - - if (inet_ntop(srvaddr->h_addrtype, srvaddr->h_addr_list[0], - address, 128) == NULL) { - ret = errno; - DEBUG(1, ("inet_ntop failed [%d][%s].\n", ret, strerror(ret))); + DEBUG(1, ("resolv_get_string_address failed.\n")); return; } diff --git a/src/resolv/async_resolv.c b/src/resolv/async_resolv.c index ff53aa441..13232097f 100644 --- a/src/resolv/async_resolv.c +++ b/src/resolv/async_resolv.c @@ -648,6 +648,30 @@ resolv_gethostbyname_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx, return EOK; } +char * +resolv_get_string_address(TALLOC_CTX *mem_ctx, struct hostent *hostent) +{ + char *address; + + if (!hostent) return NULL; + + address = talloc_zero_size(mem_ctx, 128); + if (address == NULL) { + DEBUG(1, ("talloc_zero failed.\n")); + return NULL; + } + + errno = 0; + if (inet_ntop(hostent->h_addrtype, hostent->h_addr_list[0], + address, 128) == NULL) { + DEBUG(1, ("inet_ntop failed [%d][%s].\n", errno, strerror(errno))); + talloc_free(address); + return NULL; + } + + return address; +} + static void ares_gethostbyname_wakeup(struct tevent_req *subreq) { diff --git a/src/resolv/async_resolv.h b/src/resolv/async_resolv.h index b6a13d7fa..d6cbe1494 100644 --- a/src/resolv/async_resolv.h +++ b/src/resolv/async_resolv.h @@ -76,6 +76,9 @@ int resolv_gethostbyname_recv(struct tevent_req *req, int *timeouts, struct hostent **hostent); +char * +resolv_get_string_address(TALLOC_CTX *mem_ctx, struct hostent *hostent); + /** Get SRV record **/ struct tevent_req *resolv_getsrv_send(TALLOC_CTX *mem_ctx, struct tevent_context *ev, -- cgit