Skip to content
Snippets Groups Projects
Unverified Commit 69b04532 authored by Thomas Woerner's avatar Thomas Woerner Committed by GitHub
Browse files

Merge pull request #476 from rjeffman/fix_ipadnszone_allow_tranfers_networks

ipadnszone: Fix values accepted by allow_transfer and allow_query.
parents a1f385f0 6f0d183a
No related branches found
No related tags found
Loading
...@@ -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