From d73b6e39200859575ecad5d65f64c29ad55a1e83 Mon Sep 17 00:00:00 2001
From: Rafael Guterres Jeffman <rjeffman@redhat.com>
Date: Mon, 8 Jun 2020 12:05:18 -0300
Subject: [PATCH] Fixes error handling on dnsconfig module.

This fixes reporting errors on dnsconfig module and add some tests
to verify that invalid IP addresses cannot be used as forwarders.
---
 plugins/modules/ipadnsconfig.py    |  6 +++---
 tests/dnsconfig/test_dnsconfig.yml | 23 +++++++++++++++++++++++
 2 files changed, 26 insertions(+), 3 deletions(-)

diff --git a/plugins/modules/ipadnsconfig.py b/plugins/modules/ipadnsconfig.py
index 0d4aa876..b89344da 100644
--- a/plugins/modules/ipadnsconfig.py
+++ b/plugins/modules/ipadnsconfig.py
@@ -115,7 +115,7 @@ def find_dnsconfig(module):
             _result["result"]['idnsforwarders'] = ['']
         return _result["result"]
     else:
-        module.fail("Could not retrieve current DNS configuration.")
+        module.fail_json(msg="Could not retrieve current DNS configuration.")
     return None
 
 
@@ -129,7 +129,7 @@ def gen_args(module, state, dnsconfig, forwarders, forward_policy,
             ip_address = forwarder.get('ip_address')
             port = forwarder.get('port')
             if not (is_ipv4_addr(ip_address) or is_ipv6_addr(ip_address)):
-                module.fail(
+                module.fail_json(
                     msg="Invalid IP for DNS forwarder: %s" % ip_address)
             if port is None:
                 _forwarders.append(ip_address)
@@ -153,7 +153,7 @@ def gen_args(module, state, dnsconfig, forwarders, forward_policy,
 
         else:
             # shouldn't happen, but let's be paranoid.
-            module.fail(msg="Invalid state: %s" % state)
+            module.fail_json(msg="Invalid state: %s" % state)
 
     if forward_policy is not None:
         _args['idnsforwardpolicy'] = forward_policy
diff --git a/tests/dnsconfig/test_dnsconfig.yml b/tests/dnsconfig/test_dnsconfig.yml
index 1c34a8e0..12781e0b 100644
--- a/tests/dnsconfig/test_dnsconfig.yml
+++ b/tests/dnsconfig/test_dnsconfig.yml
@@ -18,6 +18,29 @@
       state: absent
 
   # Tests.
+  - name: Set config to invalid IPv4.
+    ipadnsconfig:
+      ipaadmin_password: SomeADMINpassword
+      forwarders:
+        - ip_address: 1.2.3.500
+    register: result
+    failed_when: not result.failed or "Invalid IP for DNS forwarder" not in result.msg
+
+  - name: Set config to invalid IP.
+    ipadnsconfig:
+      ipaadmin_password: SomeADMINpassword
+      forwarders:
+        - ip_address: 1.in.va.lid
+    register: result
+    failed_when: not result.failed or "Invalid IP for DNS forwarder" not in result.msg
+
+  - name: Set config to invalid IPv6.
+    ipadnsconfig:
+      ipaadmin_password: SomeADMINpassword
+      forwarders:
+        - ip_address: fd00::invalid
+    register: result
+    failed_when: not result.failed or "Invalid IP for DNS forwarder" not in result.msg
 
   - name: Set dnsconfig.
     ipadnsconfig:
-- 
GitLab