diff options
-rw-r--r-- | source3/utils/net_ads.c | 7 | ||||
-rw-r--r-- | source3/utils/net_dns.c | 29 |
2 files changed, 31 insertions, 5 deletions
diff --git a/source3/utils/net_ads.c b/source3/utils/net_ads.c index f4c25e1bf17..5feecc911f0 100644 --- a/source3/utils/net_ads.c +++ b/source3/utils/net_ads.c @@ -1751,9 +1751,10 @@ static int net_ads_dns_gethostbyname(struct net_context *c, int argc, const char } err = do_gethostbyname(argv[0], argv[1]); - - d_printf(_("do_gethostbyname returned %s (%d)\n"), - dns_errstr(err), ERROR_DNS_V(err)); + if (!ERR_DNS_IS_OK(err)) { + d_printf(_("do_gethostbyname returned %s (%d)\n"), + dns_errstr(err), ERROR_DNS_V(err)); + } #endif return 0; } diff --git a/source3/utils/net_dns.c b/source3/utils/net_dns.c index 3b9730a5313..207dfa51b20 100644 --- a/source3/utils/net_dns.c +++ b/source3/utils/net_dns.c @@ -212,14 +212,39 @@ DNS_ERROR do_gethostbyname(const char *server, const char *host) struct dns_connection *conn = NULL; struct dns_request *req, *resp; DNS_ERROR err; + int ans = 0; err = dns_open_connection(server, DNS_UDP, NULL, &conn); - if (!ERR_DNS_IS_OK(err)) goto error; + if (!ERR_DNS_IS_OK(err)) { + goto error; + } err = dns_create_query(conn, host, QTYPE_A, DNS_CLASS_IN, &req); - if (!ERR_DNS_IS_OK(err)) goto error; + if (!ERR_DNS_IS_OK(err)) { + goto error; + } err = dns_transaction(conn, conn, req, &resp); + if (!ERR_DNS_IS_OK(err)) { + goto error; + } + + if (resp->num_answers == 0) { + printf("%s", "No answers!\n"); + goto error; + } + + for (ans = 0; ans < resp->num_answers; ans++) { + struct in_addr resp_ip; + + if (ans > 0) + printf("%s", " "); + + resp_ip.s_addr = *((uint32_t *)resp->answers[ans]->data); + printf("%s", inet_ntoa(resp_ip)); + } + + printf("%s", "\n"); error: TALLOC_FREE(conn); |