summaryrefslogtreecommitdiffstats
path: root/ipaserver/plugins/dnsserver.py
diff options
context:
space:
mode:
authorMartin Basti <mbasti@redhat.com>2016-06-13 20:02:21 +0200
committerMartin Basti <mbasti@redhat.com>2016-06-17 15:22:24 +0200
commit2157ea0e6d0d762bdc71022ddd55045406c4b300 (patch)
tree312c488152c3d417f230906fb2476c4885bc17f7 /ipaserver/plugins/dnsserver.py
parent88a0952f26f9d1e2ee9d02126b27f3075dbad46a (diff)
downloadfreeipa-2157ea0e6d0d762bdc71022ddd55045406c4b300.tar.gz
freeipa-2157ea0e6d0d762bdc71022ddd55045406c4b300.tar.xz
freeipa-2157ea0e6d0d762bdc71022ddd55045406c4b300.zip
DNS Locations: dnsserver-* commands
New commands for manipulation with DNS server configuration were added: * dnsserver-show * dnsserver-mod * dnsserver-find https://fedorahosted.org/bind-dyndb-ldap/wiki/Design/PerServerConfigInLDAP https://fedorahosted.org/freeipa/ticket/2008 Reviewed-By: Petr Spacek <pspacek@redhat.com> Reviewed-By: Jan Cholasta <jcholast@redhat.com>
Diffstat (limited to 'ipaserver/plugins/dnsserver.py')
-rw-r--r--ipaserver/plugins/dnsserver.py183
1 files changed, 183 insertions, 0 deletions
diff --git a/ipaserver/plugins/dnsserver.py b/ipaserver/plugins/dnsserver.py
new file mode 100644
index 000000000..f22d6943e
--- /dev/null
+++ b/ipaserver/plugins/dnsserver.py
@@ -0,0 +1,183 @@
+#
+# Copyright (C) 2016 FreeIPA Contributors see COPYING for license
+#
+
+from __future__ import absolute_import
+
+from ipalib import (
+ _,
+ ngettext,
+ api,
+ DNSNameParam,
+ Str,
+ StrEnum,
+)
+from ipalib.frontend import Local
+from ipalib.plugable import Registry
+from ipalib.util import (
+ normalize_hostname,
+ hostname_validator,
+ validate_bind_forwarder,
+)
+from ipaserver.plugins.baseldap import (
+ LDAPObject,
+ LDAPRetrieve,
+ LDAPUpdate,
+ LDAPSearch,
+ LDAPCreate,
+ LDAPDelete,
+)
+
+
+__doc__ = _("""
+DNS server configuration
+""") + _("""
+Manipulate DNS server configuration
+""") + _("""
+EXAMPLES:
+""") + _("""
+ Show configuration of a specific DNS server:
+ ipa dnsserver-show
+""") + _("""
+ Update configuration of a specific DNS server:
+ ipa dnsserver-mod
+""")
+
+
+register = Registry()
+
+dnsserver_object_class = ['top', 'idnsServerConfigObject']
+
+@register()
+class dnsserver(LDAPObject):
+ """
+ DNS Servers
+ """
+ container_dn = api.env.container_dnsservers
+ object_name = _('DNS server')
+ object_name_plural = _('DNS servers')
+ object_class = dnsserver_object_class
+ default_attributes = [
+ 'idnsServerId',
+ 'idnsSOAmName',
+ 'idnsForwarders',
+ 'idnsForwardPolicy',
+ ]
+ label = _('DNS Servers')
+ label_singular = _('DNS Server')
+
+ permission_filter_objectclasses = ['idnsServerConfigObject']
+
+ managed_permissions = {
+ 'System: Read DNS Servers Configuration': {
+ 'ipapermright': {'read', 'search', 'compare'},
+ 'ipapermdefaultattr': {
+ 'objectclass',
+ 'idnsServerId',
+ 'idnsSOAmName',
+ 'idnsForwarders',
+ 'idnsForwardPolicy',
+ 'idnsSubstitutionVariable',
+ },
+ 'ipapermlocation': api.env.basedn,
+ 'default_privileges': {
+ 'DNS Servers',
+ 'DNS Administrators'
+ },
+ },
+ 'System: Modify DNS Servers Configuration': {
+ 'ipapermright': {'write'},
+ 'ipapermdefaultattr': {
+ 'idnsSOAmName',
+ 'idnsForwarders',
+ 'idnsForwardPolicy',
+ 'idnsSubstitutionVariable',
+ },
+ 'ipapermlocation': api.env.basedn,
+ 'default_privileges': {'DNS Administrators'},
+ },
+ }
+
+ takes_params = (
+ Str(
+ 'idnsserverid',
+ hostname_validator,
+ cli_name='hostname',
+ primary_key=True,
+ label=_('Server name'),
+ doc=_('DNS Server name'),
+ normalizer=normalize_hostname,
+ ),
+ DNSNameParam(
+ 'idnssoamname?',
+ cli_name='soa_mname_override',
+ label=_('SOA mname override'),
+ doc=_('SOA mname (authoritative server) override'),
+ ),
+ Str(
+ 'idnsforwarders*',
+ validate_bind_forwarder,
+ cli_name='forwarder',
+ label=_('Forwarders'),
+ doc=_(
+ 'Per-server forwarders. A custom port can be specified '
+ 'for each forwarder using a standard format '
+ '"IP_ADDRESS port PORT"'
+ ),
+ ),
+ StrEnum(
+ 'idnsforwardpolicy?',
+ cli_name='forward_policy',
+ label=_('Forward policy'),
+ doc=_(
+ 'Per-server conditional forwarding policy. Set to "none" to '
+ 'disable forwarding to global forwarder for this zone. In '
+ 'that case, conditional zone forwarders are disregarded.'
+ ),
+ values=(u'only', u'first', u'none'),
+ ),
+ )
+
+
+@register()
+class dnsserver_mod(LDAPUpdate):
+ __doc__ = _('Modify DNS server configuration')
+
+ msg_summary = _('Modified DNS server "%(value)s"')
+
+
+@register()
+class dnsserver_find(LDAPSearch):
+ __doc__ = _('Search for DNS servers.')
+
+ msg_summary = ngettext(
+ '%(count)d DNS server matched',
+ '%(count)d DNS servers matched', 0
+ )
+
+
+@register()
+class dnsserver_show(LDAPRetrieve):
+ __doc__=_('Display configuration of a DNS server.')
+
+
+@register()
+class dnsserver_add(LDAPCreate, Local):
+ """
+ Only for internal use, this is not part of public API on purpose.
+ Be careful in future this will be transformed to public API call
+ """
+ __doc__ = _('Add a new DNS server.')
+
+ msg_summary = _('Added new DNS server "%(value)s"')
+
+
+@register()
+class dnsserver_del(LDAPDelete, Local):
+ """
+ Only for internal use, this is not part of public API on purpose.
+ Be careful in future this will be transformed to public API call
+ """
+ __doc__ = _('Delete a DNS server')
+
+ msg_summary = _('Deleted DNS server "%(value)s"')