From 48a67d9a2e932b21d55cd5a2668ed8a9f11e1564 Mon Sep 17 00:00:00 2001 From: Jan Cholasta Date: Mon, 26 Sep 2011 11:00:32 +0200 Subject: Validate name_from_ip parameter of dnszone. ticket 1627 --- ipalib/plugins/dns.py | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/ipalib/plugins/dns.py b/ipalib/plugins/dns.py index d922cdfb5..09642089e 100644 --- a/ipalib/plugins/dns.py +++ b/ipalib/plugins/dns.py @@ -167,7 +167,7 @@ def _validate_ipaddr(ugettext, ipaddr): def _validate_ipnet(ugettext, ipnet): try: net = netaddr.IPNetwork(ipnet) - except (UnboundLocalError, ValueError): + except (netaddr.AddrFormatError, ValueError, UnboundLocalError): return u'invalid format' return None @@ -417,6 +417,13 @@ class dnszone_add(LDAPCreate): ), ) + def args_options_2_params(self, *args, **options): + # FIXME: Check if name_from_ip is valid. The framework should do that, + # but it does not. Before it's fixed, this should suffice. + if 'name_from_ip' in options: + self.obj.params['name_from_ip'](unicode(options['name_from_ip'])) + return super(dnszone_add, self).args_options_2_params(*args, **options) + def pre_callback(self, ldap, dn, entry_attrs, *keys, **options): if not dns_container_exists(self.api.Backend.ldap2): raise errors.NotFound(reason=_('DNS is not configured')) @@ -469,6 +476,13 @@ api.register(dnszone_del) class dnszone_mod(LDAPUpdate): __doc__ = _('Modify DNS zone (SOA record).') + def args_options_2_params(self, *args, **options): + # FIXME: Check if name_from_ip is valid. The framework should do that, + # but it does not. Before it's fixed, this should suffice. + if 'name_from_ip' in options: + self.obj.params['name_from_ip'](unicode(options['name_from_ip'])) + return super(dnszone_mod, self).args_options_2_params(*args, **options) + def pre_callback(self, ldap, dn, entry_attrs, *keys, **options): if 'name_from_ip' in entry_attrs: del entry_attrs['name_from_ip'] @@ -483,6 +497,13 @@ api.register(dnszone_mod) class dnszone_find(LDAPSearch): __doc__ = _('Search for DNS zones (SOA records).') + def args_options_2_params(self, *args, **options): + # FIXME: Check if name_from_ip is valid. The framework should do that, + # but it does not. Before it's fixed, this should suffice. + if 'name_from_ip' in options: + self.obj.params['name_from_ip'](unicode(options['name_from_ip'])) + return super(dnszone_find, self).args_options_2_params(*args, **options) + def args_options_2_entry(self, *args, **options): if 'name_from_ip' in options: if 'idnsname' not in options: -- cgit