From dd72ed62125a1de5af88c443a8b0e4621b269e16 Mon Sep 17 00:00:00 2001 From: Tomas Babej Date: Fri, 17 Aug 2012 08:56:45 -0400 Subject: Improves sssd.conf handling during ipa-client uninstall The sssd.conf file is no longer left behind in case sssd was not configured before the installation. However, the patch goes behind the scope of this ticked and improves the handling of sssd.conf during the ipa-client-install --uninstall in general. The current behaviour (well documented in source code) is as follows: - In general, the IPA domain is simply removed from the sssd.conf file, instead of sssd.conf being rewritten from the backup. This preserves any domains added after installation. - If sssd.conf existed before the installation, it is restored to sssd.conf.bkp. However, any IPA domains from pre-installation sssd.conf should have been merged during the installation. - If sssd.conf did not exist before the installation, and no other domains than IPA domain exist in it, the patch makes sure that sssd.conf is moved to sssd.conf.deleted so user experiences no crash during any next installation due to its existence. https://fedorahosted.org/freeipa/ticket/2740 --- ipapython/sysrestore.py | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'ipapython/sysrestore.py') diff --git a/ipapython/sysrestore.py b/ipapython/sysrestore.py index 7720fd6e3..2c4741f3d 100644 --- a/ipapython/sysrestore.py +++ b/ipapython/sysrestore.py @@ -143,18 +143,26 @@ class FileStore: break return result - def restore_file(self, path): + def restore_file(self, path, new_path = None): """Restore the copy of a file at @path to its original location and delete the copy. + Takes optional parameter @new_path which specifies the + location where the file is to be restored. + Returns #True if the file was restored, #False if there was no backup file to restore """ - root_logger.debug("Restoring system configuration file '%s'", path) + if new_path is None: + root_logger.debug("Restoring system configuration file '%s'", path) + else: + root_logger.debug("Restoring system configuration file '%s' to '%s'", path, new_path) if not os.path.isabs(path): raise ValueError("Absolute path required") + if new_path is not None and not os.path.isabs(new_path): + raise ValueError("Absolute new path required") mode = None uid = None @@ -175,6 +183,9 @@ class FileStore: root_logger.debug(" -> Not restoring - '%s' doesn't exist", backup_path) return False + if new_path is not None: + path = new_path + shutil.move(backup_path, path) os.chown(path, int(uid), int(gid)) os.chmod(path, int(mode)) -- cgit