diff options
author | Jan Cholasta <jcholast@redhat.com> | 2015-01-12 15:37:33 +0000 |
---|---|---|
committer | Jan Cholasta <jcholast@redhat.com> | 2015-01-13 16:58:34 +0000 |
commit | 05e6adecb51b93e9b9d2326df4eabee90c3dfe72 (patch) | |
tree | 545a2037c55129ba949b1323a871a493962a31af /ipaserver/install/ipa_restore.py | |
parent | abcbe271d5e022ac805b448c85ebe4790bae7fb1 (diff) | |
download | freeipa-05e6adecb51b93e9b9d2326df4eabee90c3dfe72.tar.gz freeipa-05e6adecb51b93e9b9d2326df4eabee90c3dfe72.tar.xz freeipa-05e6adecb51b93e9b9d2326df4eabee90c3dfe72.zip |
Remove RUV from LDIF files before using them in ipa-restore
https://fedorahosted.org/freeipa/ticket/4822
Reviewed-By: Petr Vobornik <pvoborni@redhat.com>
Diffstat (limited to 'ipaserver/install/ipa_restore.py')
-rw-r--r-- | ipaserver/install/ipa_restore.py | 36 |
1 files changed, 35 insertions, 1 deletions
diff --git a/ipaserver/install/ipa_restore.py b/ipaserver/install/ipa_restore.py index 032cca9a9..c75760550 100644 --- a/ipaserver/install/ipa_restore.py +++ b/ipaserver/install/ipa_restore.py @@ -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() |