From fd3bdcaf1e534d85ca4aac09c1a2b83b7c0354de Mon Sep 17 00:00:00 2001 From: Alexander Bokovoy Date: Wed, 1 Feb 2012 21:22:18 +0200 Subject: [PATCH] - Force to use 389-ds 1.2.10-0.8.a7 or above - Improve upgrade script to handle systemd 389-ds change - fixes FreeIPA tickets 2117 and 2300 - Fix freeipa to work with python-ldap 2.4.6 --- freeipa-2.1.4-inifiles-support.patch | 139 ++++++++++++ freeipa-2.1.4-python-ldap-2.4.6-support.patch | 26 +++ freeipa-2.1.4-upgrade-systemd.patch | 214 ++++++++++++++++++ freeipa-systemd-upgrade | 73 ------ freeipa.spec | 22 +- 5 files changed, 395 insertions(+), 79 deletions(-) create mode 100644 freeipa-2.1.4-inifiles-support.patch create mode 100644 freeipa-2.1.4-python-ldap-2.4.6-support.patch create mode 100644 freeipa-2.1.4-upgrade-systemd.patch delete mode 100644 freeipa-systemd-upgrade diff --git a/freeipa-2.1.4-inifiles-support.patch b/freeipa-2.1.4-inifiles-support.patch new file mode 100644 index 0000000..c4f4154 --- /dev/null +++ b/freeipa-2.1.4-inifiles-support.patch @@ -0,0 +1,139 @@ +From 16d3d30130215d74295e89ba5a51522eed45e180 Mon Sep 17 00:00:00 2001 +From: Alexander Bokovoy +Date: Wed, 1 Feb 2012 14:20:53 +0200 +Subject: [PATCH 1/3] Add management of inifiles to allow manipulation of + systemd units + +inifile_replace_variables() works similar to config_replace_variables() but +allows to apply changes to specific section of an inifile. Inifiles are +commonly used by freedesktop.org software and particularly used by systemd. + +When modifying inifile, all changes will be applied to specific section. + +Also fixes corner case in config_replace_variables() which would dublicate +variables when adding them. +--- + ipapython/ipautil.py | 100 +++++++++++++++++++++++++++++++++++++++++++++++++- + 1 files changed, 99 insertions(+), 1 deletions(-) + +diff --git a/ipapython/ipautil.py b/ipapython/ipautil.py +index 718f209b32649df23177dcab7d5105d01c0cd7bc..e141e00171cb86bec58a6be0b3e7d1f51a24faf1 100644 +--- a/ipapython/ipautil.py ++++ b/ipapython/ipautil.py +@@ -1245,7 +1245,7 @@ $)''', re.VERBOSE) + new_vars = replacevars.copy() + new_vars.update(appendvars) + newvars_view = set(new_vars.keys()) - set(old_values.keys()) +- append_view = (set(appendvars.keys()) - set(replacevars.keys())) - set(old_values.keys()) ++ append_view = (set(appendvars.keys()) - newvars_view) + for item in newvars_view: + new_config.write("%s=%s\n" % (item,new_vars[item])) + for item in append_view: +@@ -1262,6 +1262,104 @@ $)''', re.VERBOSE) + + return old_values + ++def inifile_replace_variables(filepath, section, replacevars=dict(), appendvars=dict()): ++ """ ++ Take a section-structured key=value based configuration file, and write new version ++ with certain values replaced or appended within the section ++ ++ All (key,value) pairs from replacevars and appendvars that were not found ++ in the configuration file, will be added there. ++ ++ It is responsibility of a caller to ensure that replacevars and ++ appendvars do not overlap. ++ ++ It is responsibility of a caller to back up file. ++ ++ returns dictionary of affected keys and their previous values ++ ++ One have to run restore_context(filepath) afterwards or ++ security context of the file will not be correct after modification ++ """ ++ pattern = re.compile(''' ++(^ ++ \[ ++ (?P
.+) \] ++ (\s+((\#|;).*)?)? ++$)|(^ ++ \s* ++ (?P