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 6fd39336..6a030b97 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 77495b20..1025449c 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 64954c40..07e15cdf 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): |