Fix automountlocation-import conflicts

Do not fail import operation with DuplicateEntry when imported
maps/keys conflict with maps/keys pre-created by
automountlocation-add command. Currently, this applies for map
'auto.direct' and key '/-'.

https://fedorahosted.org/freeipa/ticket/1551
This commit is contained in:
Martin Kosek 2011-08-16 16:20:09 +02:00 committed by Rob Crittenden
parent b1f0f32522
commit e856310d75

View File

@ -178,6 +178,8 @@ import ldap as _ldap
import os import os
DIRECT_MAP_KEY = u'/-' DIRECT_MAP_KEY = u'/-'
DEFAULT_MAPS = (u'auto.direct', )
DEFAULT_KEYS = (u'/-', )
class automountlocation(LDAPObject): class automountlocation(LDAPObject):
""" """
@ -213,6 +215,10 @@ class automountlocation_add(LDAPCreate):
def post_callback(self, ldap, dn, entry_attrs, *keys, **options): def post_callback(self, ldap, dn, entry_attrs, *keys, **options):
# create auto.master for the new location # create auto.master for the new location
self.api.Command['automountmap_add'](keys[-1], u'auto.master') self.api.Command['automountmap_add'](keys[-1], u'auto.master')
# add additional pre-created maps and keys
# IMPORTANT: add pre-created maps/keys to DEFAULT_MAPS/DEFAULT_KEYS
# so that they do not cause conflicts during import operation
self.api.Command['automountmap_add_indirect']( self.api.Command['automountmap_add_indirect'](
keys[-1], u'auto.direct', key=DIRECT_MAP_KEY keys[-1], u'auto.direct', key=DIRECT_MAP_KEY
) )
@ -387,7 +393,10 @@ class automountlocation_import(LDAPQuery):
automountinformation=unicode(' '.join(am[1:]))) automountinformation=unicode(' '.join(am[1:])))
result['keys'].append([am[0], u'auto.master']) result['keys'].append([am[0], u'auto.master'])
except errors.DuplicateEntry, e: except errors.DuplicateEntry, e:
if options.get('continue', False): if unicode(am[0]) in DEFAULT_KEYS:
# ignore conflict when the key was pre-created by the framework
pass
elif options.get('continue', False):
result['duplicatekeys'].append(am[0]) result['duplicatekeys'].append(am[0])
pass pass
else: else:
@ -398,7 +407,10 @@ class automountlocation_import(LDAPQuery):
api.Command['automountmap_add'](args[0], unicode(am[1])) api.Command['automountmap_add'](args[0], unicode(am[1]))
result['maps'].append(am[1]) result['maps'].append(am[1])
except errors.DuplicateEntry, e: except errors.DuplicateEntry, e:
if options.get('continue', False): if unicode(am[1]) in DEFAULT_MAPS:
# ignore conflict when the map was pre-created by the framework
pass
elif options.get('continue', False):
result['duplicatemaps'].append(am[0]) result['duplicatemaps'].append(am[0])
pass pass
else: else: