From 295051b421d2d438ec92d4c98532ed78a0fd1a74 Mon Sep 17 00:00:00 2001
From: Justin Stephenson <jstephen@redhat.com>
Date: Wed, 10 Aug 2016 11:42:28 -0400
Subject: [PATCH] [PATCH] Make resolv_is_address() function public and create
 some basic tests

Resolves:
https://fedorahosted.org/sssd/ticket/2789
---
 src/resolv/async_resolv.c           |  4 +---
 src/resolv/async_resolv.h           |  2 ++
 src/tests/cmocka/test_resolv_fake.c | 25 +++++++++++++++++++++++++
 3 files changed, 28 insertions(+), 3 deletions(-)

diff --git a/src/resolv/async_resolv.c b/src/resolv/async_resolv.c
index 58d5c6e550bb34cbaa50517323133fad4f900980..e8595567708d1b7fb26d6d4e8dc569631c27f560 100644
--- a/src/resolv/async_resolv.c
+++ b/src/resolv/async_resolv.c
@@ -1062,8 +1062,6 @@ resolv_gethostbyname_address(TALLOC_CTX *mem_ctx, const char *address,
                              struct resolv_hostent **_rhostent);
 static inline int
 resolv_gethostbyname_family_init(enum restrict_family family_order);
-static bool
-resolv_is_address(const char *name);
 static errno_t
 resolv_gethostbyname_step(struct tevent_req *req);
 
@@ -1133,7 +1131,7 @@ fail:
     return NULL;
 }
 
-static bool
+bool
 resolv_is_address(const char *name)
 {
     struct addrinfo hints;
diff --git a/src/resolv/async_resolv.h b/src/resolv/async_resolv.h
index 876abff14e6e22c67585a476a7169423281f01c7..b602a425c21b5f3bfd0098ce3208f6750d4ed1ad 100644
--- a/src/resolv/async_resolv.h
+++ b/src/resolv/async_resolv.h
@@ -189,4 +189,6 @@ errno_t resolv_discover_srv_recv(TALLOC_CTX *mem_ctx,
                                  uint32_t *_ttl,
                                  char **_dns_domain);
 
+bool
+resolv_is_address(const char *name);
 #endif /* __ASYNC_RESOLV_H__ */
diff --git a/src/tests/cmocka/test_resolv_fake.c b/src/tests/cmocka/test_resolv_fake.c
index a1e9ee4cba9b17d506eeae7e6088de28c301364d..bd0d77fd6afd05e005af480a4c2a91da4dbdac33 100644
--- a/src/tests/cmocka/test_resolv_fake.c
+++ b/src/tests/cmocka/test_resolv_fake.c
@@ -32,6 +32,7 @@
 
 #include <resolv.h>
 
+#include "resolv/async_resolv.h"
 #include "tests/cmocka/common_mock.h"
 #include "tests/cmocka/common_mock_resp.h"
 
@@ -333,6 +334,29 @@ void test_resolv_fake_srv(void **state)
     assert_int_equal(ret, ERR_OK);
 }
 
+void test_resolv_is_address(void **state)
+{
+    bool ret;
+
+    ret = resolv_is_address("10.192.211.37");
+    assert_true(ret);
+
+    ret = resolv_is_address("127.0.0.1");
+    assert_true(ret);
+
+    ret = resolv_is_address("2001:0db8:85a3:0000:0000:8a2e:0370:7334");
+    assert_true(ret);
+
+    ret = resolv_is_address("sssd.ldap.com");
+    assert_false(ret);
+
+    ret = resolv_is_address("testhostname");
+    assert_false(ret);
+
+    ret = resolv_is_address("localhost");
+    assert_false(ret);
+}
+
 int main(int argc, const char *argv[])
 {
     int rv;
@@ -348,6 +372,7 @@ int main(int argc, const char *argv[])
         cmocka_unit_test_setup_teardown(test_resolv_fake_srv,
                                         test_resolv_fake_setup,
                                         test_resolv_fake_teardown),
+        cmocka_unit_test(test_resolv_is_address),
     };
 
     /* Set debug level to invalid value so we can deside if -d 0 was used. */
-- 
2.7.4

