mirror of
https://github.com/freeipa/ansible-freeipa.git
synced 2026-07-30 11:24:50 +00:00
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.
This commit is contained in:
@@ -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):
|
|||||||
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:
|
|||||||
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):
|
|||||||
|
|
||||||
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):
|
|||||||
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
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user