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.zip
freeipa-f785af4efea088466f8ec2259c79640b9f94e542.tar.gz
freeipa-f785af4efea088466f8ec2259c79640b9f94e542.tar.xz
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 6fd3933..6a030b9 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 77495b2..1025449 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 64954c4..07e15cd 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):