summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Kosek <mkosek@redhat.com>2011-03-01 14:17:03 +0100
committerRob Crittenden <rcritten@redhat.com>2011-03-03 11:02:02 -0500
commitf785af4efea088466f8ec2259c79640b9f94e542 (patch)
tree9749d8138cfad8e2872e96c8c6ea6d8fe7ccc332
parent620903ff27b0dec764a618e2962a8623dde0febe (diff)
downloadfreeipa-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-xinstall/tools/ipa-server-install4
-rw-r--r--ipapython/sysrestore.py1
-rw-r--r--ipaserver/install/dsinstance.py7
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):