summaryrefslogtreecommitdiffstats
path: root/ipalib/util.py
diff options
context:
space:
mode:
authorMartin Kosek <mkosek@redhat.com>2012-09-05 09:56:27 +0200
committerMartin Kosek <mkosek@redhat.com>2012-09-19 17:32:02 +0200
commitef7b8ab764420baa4e959c0bf060e390b314c18f (patch)
tree5c1bb869799928ea5aebfb3ed88fa88eced8da35 /ipalib/util.py
parent26166deb0c3a9938eeb94725705d49d259aa6e70 (diff)
downloadfreeipa-ef7b8ab764420baa4e959c0bf060e390b314c18f.tar.gz
freeipa-ef7b8ab764420baa4e959c0bf060e390b314c18f.tar.xz
freeipa-ef7b8ab764420baa4e959c0bf060e390b314c18f.zip
Use default reverse zone consistently
When a new reverse zone is to be generated based on an IP address without a network prefix length, we need to use some default value. While netaddr library default ones (32b for IPv4 and 128b for IPv6) are not very sensible we should use the defaults already applied in installers. That is 24b for IPv6 and 64 for IPv6. Test case has been added to cover the new default. https://fedorahosted.org/freeipa/ticket/2461
Diffstat (limited to 'ipalib/util.py')
-rw-r--r--ipalib/util.py18
1 files changed, 18 insertions, 0 deletions
diff --git a/ipalib/util.py b/ipalib/util.py
index 1d5900924..df8791ba0 100644
--- a/ipalib/util.py
+++ b/ipalib/util.py
@@ -27,6 +27,7 @@ import time
import socket
import re
import decimal
+import netaddr
from types import NoneType
from weakref import WeakKeyDictionary
from dns import resolver, rdatatype
@@ -172,6 +173,12 @@ def normalize_zonemgr(zonemgr):
return zonemgr
+def normalize_zone(zone):
+ if zone[-1] != '.':
+ return zone + '.'
+ else:
+ return zone
+
def validate_dns_label(dns_label, allow_underscore=False):
label_chars = r'a-z0-9'
underscore_err_msg = ''
@@ -487,6 +494,17 @@ def get_dns_reverse_zone_update_policy(realm, reverse_zone, rrtypes=('PTR',)):
return policy
+def get_reverse_zone_default(ip_address):
+ ip = netaddr.IPAddress(ip_address)
+ items = ip.reverse_dns.split('.')
+
+ if ip.version == 4:
+ items = items[1:] # /24 for IPv4
+ elif ip.version == 6:
+ items = items[16:] # /64 for IPv6
+
+ return normalize_zone('.'.join(items))
+
def validate_rdn_param(ugettext, value):
try:
rdn = RDN(value)