diff options
author | Martin Kosek <mkosek@redhat.com> | 2011-03-01 14:17:03 +0100 |
---|---|---|
committer | Rob Crittenden <rcritten@redhat.com> | 2011-03-03 11:02:02 -0500 |
commit | f785af4efea088466f8ec2259c79640b9f94e542 (patch) | |
tree | 9749d8138cfad8e2872e96c8c6ea6d8fe7ccc332 | |
parent | 620903ff27b0dec764a618e2962a8623dde0febe (diff) | |
download | freeipa-f785af4efea088466f8ec2259c79640b9f94e542.tar.gz freeipa-f785af4efea088466f8ec2259c79640b9f94e542.tar.xz freeipa-f785af4efea088466f8ec2259c79640b9f94e542.zip |
Inconsistent sysrestore file handling by IPA server installer
IPA server/replica uninstallation may fail when it tries to restore
a Directory server configuration file in sysrestore directory, which
was already restored before.
The problem is in Directory Server uninstaller which uses and modifies
its own image of sysrestore directory state instead of using the
common uninstaller image.
https://fedorahosted.org/freeipa/ticket/1026
-rwxr-xr-x | install/tools/ipa-server-install | 4 | ||||
-rw-r--r-- | ipapython/sysrestore.py | 1 | ||||
-rw-r--r-- | ipaserver/install/dsinstance.py | 7 |
3 files changed, 8 insertions, 4 deletions
diff --git a/install/tools/ipa-server-install b/install/tools/ipa-server-install index 6fd393362..6a030b973 100755 --- a/install/tools/ipa-server-install +++ b/install/tools/ipa-server-install @@ -416,7 +416,7 @@ def uninstall(): bindinstance.BindInstance(fstore).uninstall() httpinstance.HTTPInstance(fstore).uninstall() krbinstance.KrbInstance(fstore).uninstall() - dsinstance.DsInstance().uninstall() + dsinstance.DsInstance(fstore=fstore).uninstall() fstore.restore_all_files() try: os.remove(ANSWER_CACHE) @@ -779,7 +779,7 @@ def main(): service.start('messagebus') # Create a directory server instance - ds = dsinstance.DsInstance() + ds = dsinstance.DsInstance(fstore=fstore) if options.dirsrv_pin: [pw_fd, pw_name] = tempfile.mkstemp() diff --git a/ipapython/sysrestore.py b/ipapython/sysrestore.py index 77495b200..1025449c2 100644 --- a/ipapython/sysrestore.py +++ b/ipapython/sysrestore.py @@ -190,6 +190,7 @@ class FileStore: backup_path = os.path.join(self._path, filename) if not os.path.exists(backup_path): logging.debug(" -> Not restoring - '%s' doesn't exist", backup_path) + continue shutil.move(backup_path, path) os.chown(path, int(uid), int(gid)) diff --git a/ipaserver/install/dsinstance.py b/ipaserver/install/dsinstance.py index 64954c408..07e15cdf0 100644 --- a/ipaserver/install/dsinstance.py +++ b/ipaserver/install/dsinstance.py @@ -171,7 +171,7 @@ info: IPA V2.0 """ class DsInstance(service.Service): - def __init__(self, realm_name=None, domain_name=None, dm_password=None): + def __init__(self, realm_name=None, domain_name=None, dm_password=None, fstore=None): service.Service.__init__(self, "dirsrv", dm_password=dm_password) self.realm_name = realm_name self.sub_dict = None @@ -189,7 +189,10 @@ class DsInstance(service.Service): else: self.suffix = None - self.fstore = sysrestore.FileStore('/var/lib/ipa/sysrestore') + if fstore: + self.fstore = fstore + else: + self.fstore = sysrestore.FileStore('/var/lib/ipa/sysrestore') def __common_setup(self): |