mirror of
https://salsa.debian.org/freeipa-team/freeipa.git
synced 2024-12-24 16:10:02 -06:00
Remove RUV from LDIF files before using them in ipa-restore
https://fedorahosted.org/freeipa/ticket/4822 Reviewed-By: Petr Vobornik <pvoborni@redhat.com>
This commit is contained in:
parent
abcbe271d5
commit
05e6adecb5
@ -24,6 +24,7 @@ import tempfile
|
||||
import time
|
||||
import pwd
|
||||
from ConfigParser import SafeConfigParser
|
||||
import ldif
|
||||
|
||||
from ipalib import api, errors
|
||||
from ipapython import version, ipautil, certdb, dogtag
|
||||
@ -93,6 +94,32 @@ def decrypt_file(tmpdir, filename, keyring):
|
||||
return dest
|
||||
|
||||
|
||||
class RemoveRUVParser(ldif.LDIFParser):
|
||||
def __init__(self, input_file, writer, logger):
|
||||
ldif.LDIFParser.__init__(self, input_file)
|
||||
self.writer = writer
|
||||
self.log = logger
|
||||
|
||||
def handle(self, dn, entry):
|
||||
objectclass = None
|
||||
nsuniqueid = None
|
||||
|
||||
for name, value in entry.iteritems():
|
||||
name = name.lower()
|
||||
if name == 'objectclass':
|
||||
objectclass = [x.lower() for x in value]
|
||||
elif name == 'nsuniqueid':
|
||||
nsuniqueid = [x.lower() for x in value]
|
||||
|
||||
if (objectclass and nsuniqueid and
|
||||
'nstombstone' in objectclass and
|
||||
'ffffffff-ffffffff-ffffffff-ffffffff' in nsuniqueid):
|
||||
self.log.debug("Removing RUV entry %s", dn)
|
||||
return
|
||||
|
||||
self.writer.unparse(dn, entry)
|
||||
|
||||
|
||||
class Restore(admintool.AdminTool):
|
||||
command_name = 'ipa-restore'
|
||||
log_file_name = paths.IPARESTORE_LOG
|
||||
@ -446,7 +473,14 @@ class Restore(admintool.AdminTool):
|
||||
dn = DN(('cn', cn), ('cn', 'import'), ('cn', 'tasks'), ('cn', 'config'))
|
||||
|
||||
ldifname = '%s-%s.ldif' % (instance, backend)
|
||||
ldiffile = os.path.join(self.dir, ldifname)
|
||||
srcldiffile = os.path.join(self.dir, ldifname)
|
||||
ldiffile = '%s.noruv' % srcldiffile
|
||||
|
||||
with open(ldiffile, 'wb') as out_file:
|
||||
ldif_writer = ldif.LDIFWriter(out_file)
|
||||
with open(srcldiffile, 'rb') as in_file:
|
||||
ldif_parser = RemoveRUVParser(in_file, ldif_writer, self.log)
|
||||
ldif_parser.parse()
|
||||
|
||||
if online:
|
||||
conn = self.get_connection()
|
||||
|
Loading…
Reference in New Issue
Block a user