summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source3/utils/net_ads.c7
-rw-r--r--source3/utils/net_dns.c29
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);