Skip to content
Snippets Groups Projects
Commit 6f0d183a authored by Rafael Guterres Jeffman's avatar Rafael Guterres Jeffman
Browse files

ipadnszone: Fix values accepted by allow_transfer and allow_query.

In FreeIPA CLI, The attributes `allow_query` and `allow_transfer` can
hold IPv4 or IPv6 address or network address, and the values `none` and
`any`.

This patch adds support for network addresses, `none` and `any`, which
were not supported.

Fix issue #475.
parent 8d9e794d
Branches
Tags
No related merge requests found
...@@ -28,6 +28,7 @@ import os ...@@ -28,6 +28,7 @@ import os
import uuid import uuid
import tempfile import tempfile
import shutil import shutil
import netaddr
import gssapi import gssapi
from datetime import datetime from datetime import datetime
from pprint import pformat from pprint import pformat
...@@ -413,6 +414,24 @@ def is_valid_port(port): ...@@ -413,6 +414,24 @@ def is_valid_port(port):
return False return False
def is_ip_address(ipaddr):
"""Test if given IP address is a valid IPv4 or IPv6 address."""
try:
netaddr.IPAddress(str(ipaddr))
except (netaddr.AddrFormatError, ValueError):
return False
return True
def is_ip_network_address(ipaddr):
"""Test if given IP address is a valid IPv4 or IPv6 address."""
try:
netaddr.IPNetwork(str(ipaddr))
except (netaddr.AddrFormatError, ValueError):
return False
return True
def is_ipv4_addr(ipaddr): def is_ipv4_addr(ipaddr):
"""Test if given IP address is a valid IPv4 address.""" """Test if given IP address is a valid IPv4 address."""
try: try:
......
...@@ -210,9 +210,9 @@ dnszone: ...@@ -210,9 +210,9 @@ dnszone:
from ipapython.dnsutil import DNSName # noqa: E402 from ipapython.dnsutil import DNSName # noqa: E402
from ansible.module_utils.ansible_freeipa_module import ( from ansible.module_utils.ansible_freeipa_module import (
FreeIPABaseModule, FreeIPABaseModule,
is_ipv4_addr, is_ip_address,
is_ipv6_addr, is_ip_network_address,
is_valid_port, is_valid_port
) # noqa: E402 ) # noqa: E402
import ipalib.errors import ipalib.errors
import netaddr import netaddr
...@@ -252,7 +252,13 @@ class DNSZoneModule(FreeIPABaseModule): ...@@ -252,7 +252,13 @@ class DNSZoneModule(FreeIPABaseModule):
def validate_ips(self, ips, error_msg): def validate_ips(self, ips, error_msg):
invalid_ips = [ invalid_ips = [
ip for ip in ips if not is_ipv4_addr(ip) or is_ipv6_addr(ip) ip for ip in ips
if not any([
is_ip_address(ip),
is_ip_network_address(ip),
ip == "any",
ip == "none"
])
] ]
if any(invalid_ips): if any(invalid_ips):
self.fail_json(msg=error_msg % invalid_ips) self.fail_json(msg=error_msg % invalid_ips)
...@@ -309,7 +315,7 @@ class DNSZoneModule(FreeIPABaseModule): ...@@ -309,7 +315,7 @@ class DNSZoneModule(FreeIPABaseModule):
forwarders = [] forwarders = []
for forwarder in self.ipa_params.forwarders: for forwarder in self.ipa_params.forwarders:
ip_address = forwarder.get("ip_address") ip_address = forwarder.get("ip_address")
if not (is_ipv4_addr(ip_address) or is_ipv6_addr(ip_address)): if not (is_ip_address(ip_address)):
self.fail_json( self.fail_json(
msg="Invalid IP for DNS forwarder: %s" % ip_address msg="Invalid IP for DNS forwarder: %s" % ip_address
) )
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment