mirror of
https://salsa.debian.org/freeipa-team/freeipa.git
synced 2025-02-25 18:55:28 -06:00
Fix DNS plugin to allow to add root zone
Ticket: https://fedorahosted.org/freeipa/ticket/4149 Reviewed-By: Petr Spacek <pspacek@redhat.com>
This commit is contained in:
parent
ee4a023cf1
commit
c32b89d892
@ -1784,17 +1784,21 @@ class DNSZoneBase(LDAPObject):
|
|||||||
zone = keys[-1]
|
zone = keys[-1]
|
||||||
assert isinstance(zone, DNSName)
|
assert isinstance(zone, DNSName)
|
||||||
assert zone.is_absolute()
|
assert zone.is_absolute()
|
||||||
zone = zone.ToASCII()
|
zone_a = zone.ToASCII()
|
||||||
|
|
||||||
|
# special case when zone is the root zone ('.')
|
||||||
|
if zone == DNSName.root:
|
||||||
|
return super(DNSZoneBase, self).get_dn(zone_a, **options)
|
||||||
|
|
||||||
# try first relative name, a new zone has to be added as absolute
|
# try first relative name, a new zone has to be added as absolute
|
||||||
# otherwise ObjectViolation is raised
|
# otherwise ObjectViolation is raised
|
||||||
zone = zone[:-1]
|
zone_a = zone_a[:-1]
|
||||||
dn = super(DNSZoneBase, self).get_dn(zone, **options)
|
dn = super(DNSZoneBase, self).get_dn(zone_a, **options)
|
||||||
try:
|
try:
|
||||||
self.backend.get_entry(dn, [''])
|
self.backend.get_entry(dn, [''])
|
||||||
except errors.NotFound:
|
except errors.NotFound:
|
||||||
zone = u"%s." % zone
|
zone_a = u"%s." % zone_a
|
||||||
dn = super(DNSZoneBase, self).get_dn(zone, **options)
|
dn = super(DNSZoneBase, self).get_dn(zone_a, **options)
|
||||||
|
|
||||||
return dn
|
return dn
|
||||||
|
|
||||||
@ -1826,6 +1830,8 @@ class DNSZoneBase(LDAPObject):
|
|||||||
try:
|
try:
|
||||||
api.Command['permission_del'](permission_name, force=True)
|
api.Command['permission_del'](permission_name, force=True)
|
||||||
except errors.NotFound, e:
|
except errors.NotFound, e:
|
||||||
|
if zone == DNSName.root: # special case root zone
|
||||||
|
raise
|
||||||
# compatibility, older IPA versions which allows to create zone
|
# compatibility, older IPA versions which allows to create zone
|
||||||
# without absolute zone name
|
# without absolute zone name
|
||||||
permission_name_rel = self.permission_name(
|
permission_name_rel = self.permission_name(
|
||||||
@ -1989,20 +1995,21 @@ class DNSZoneBase_add_permission(LDAPQuery):
|
|||||||
permission_name = self.obj.permission_name(keys[-1])
|
permission_name = self.obj.permission_name(keys[-1])
|
||||||
|
|
||||||
# compatibility with older IPA versions which allows relative zonenames
|
# compatibility with older IPA versions which allows relative zonenames
|
||||||
permission_name_rel = self.obj.permission_name(
|
if keys[-1] != DNSName.root: # special case root zone
|
||||||
keys[-1].relativize(DNSName.root)
|
permission_name_rel = self.obj.permission_name(
|
||||||
)
|
keys[-1].relativize(DNSName.root)
|
||||||
try:
|
|
||||||
api.Object['permission'].get_dn_if_exists(permission_name_rel)
|
|
||||||
except errors.NotFound:
|
|
||||||
pass
|
|
||||||
else:
|
|
||||||
# permission exists without absolute domain name
|
|
||||||
raise errors.DuplicateEntry(
|
|
||||||
message=_('permission "%(value)s" already exists') % {
|
|
||||||
'value': permission_name
|
|
||||||
}
|
|
||||||
)
|
)
|
||||||
|
try:
|
||||||
|
api.Object['permission'].get_dn_if_exists(permission_name_rel)
|
||||||
|
except errors.NotFound:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
# permission exists without absolute domain name
|
||||||
|
raise errors.DuplicateEntry(
|
||||||
|
message=_('permission "%(value)s" already exists') % {
|
||||||
|
'value': permission_name
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
permission = api.Command['permission_add_noaci'](permission_name,
|
permission = api.Command['permission_add_noaci'](permission_name,
|
||||||
ipapermissiontype=u'SYSTEM'
|
ipapermissiontype=u'SYSTEM'
|
||||||
@ -2415,12 +2422,13 @@ class dnszone_add(DNSZoneBase_add):
|
|||||||
nameserver_ip_address)
|
nameserver_ip_address)
|
||||||
|
|
||||||
# Add entry to realmdomains
|
# Add entry to realmdomains
|
||||||
# except for our own domain, forwarded zones and reverse zones
|
# except for our own domain, forward zones, reverse zones and root zone
|
||||||
zone = keys[0]
|
zone = keys[0]
|
||||||
|
|
||||||
if (zone != DNSName(api.env.domain).make_absolute()
|
if (zone != DNSName(api.env.domain).make_absolute() and
|
||||||
and not options.get('idnsforwarders')
|
not options.get('idnsforwarders') and
|
||||||
and not zone.is_reverse()):
|
not zone.is_reverse() and
|
||||||
|
zone != DNSName.root):
|
||||||
try:
|
try:
|
||||||
api.Command['realmdomains_mod'](add_domain=unicode(zone),
|
api.Command['realmdomains_mod'](add_domain=unicode(zone),
|
||||||
force=True)
|
force=True)
|
||||||
@ -2442,11 +2450,11 @@ class dnszone_del(DNSZoneBase_del):
|
|||||||
super(dnszone_del, self).post_callback(ldap, dn, *keys, **options)
|
super(dnszone_del, self).post_callback(ldap, dn, *keys, **options)
|
||||||
|
|
||||||
# Delete entry from realmdomains
|
# Delete entry from realmdomains
|
||||||
# except for our own domain
|
# except for our own domain, reverse zone, and root zone
|
||||||
zone = keys[0].make_absolute()
|
zone = keys[0].make_absolute()
|
||||||
|
|
||||||
if (zone != DNSName(api.env.domain).make_absolute() and
|
if (zone != DNSName(api.env.domain).make_absolute() and
|
||||||
not zone.is_reverse()
|
not zone.is_reverse() and zone != DNSName.root
|
||||||
):
|
):
|
||||||
try:
|
try:
|
||||||
api.Command['realmdomains_mod'](del_domain=unicode(zone),
|
api.Command['realmdomains_mod'](del_domain=unicode(zone),
|
||||||
|
Loading…
Reference in New Issue
Block a user