diff options
author | Lukas Slebodnik <lslebodn@redhat.com> | 2017-05-25 10:33:08 +0200 |
---|---|---|
committer | Lukas Slebodnik <lslebodn@redhat.com> | 2017-05-29 12:09:33 +0200 |
commit | fca26b76f23ee4457d6796b19892ed97362b6c8d (patch) | |
tree | 87a2eaf7b047322694499bacc6360fd4cadbfdd7 | |
parent | 6df5b36008fef9c1f6dcf8f31af033a467e744c7 (diff) | |
download | sssd-fca26b76f23ee4457d6796b19892ed97362b6c8d.tar.gz sssd-fca26b76f23ee4457d6796b19892ed97362b6c8d.tar.xz sssd-fca26b76f23ee4457d6796b19892ed97362b6c8d.zip |
SSSDConfig: Fix saving of debug_level
SSSDConfig internally handle debug_level as an integer.
But in case of bitmask version of debug_level (>=16)
it stored value as a decimal which is confusing
e.g.
debug_level = 8176
vs.
debug_level = 0x1ff0
Resolves:
https://pagure.io/SSSD/sssd/issue/3410
Reviewed-by: Jakub Hrozek <jhrozek@redhat.com>
-rw-r--r-- | src/config/SSSDConfig/__init__.py.in | 4 | ||||
-rw-r--r-- | src/config/SSSDConfig/ipachangeconf.py | 7 | ||||
-rwxr-xr-x | src/config/SSSDConfigTest.py | 41 |
3 files changed, 52 insertions, 0 deletions
diff --git a/src/config/SSSDConfig/__init__.py.in b/src/config/SSSDConfig/__init__.py.in index e3930dc59..cd844ce2b 100644 --- a/src/config/SSSDConfig/__init__.py.in +++ b/src/config/SSSDConfig/__init__.py.in @@ -1794,6 +1794,8 @@ class SSSDConfig(SSSDChangeConf): for option,value in service.get_all_options().items(): if (type(value) == list): value = ', '.join(value) + if option == "debug_level": + value = self._get_debug_level_val(value) addkw.append( { 'type' : 'option', 'name' : option, 'value' : str(value) } ) @@ -2138,6 +2140,8 @@ class SSSDConfig(SSSDChangeConf): for option,value in domain.get_all_options().items(): if (type(value) == list): value = ', '.join(value) + if option == "debug_level": + value = self._get_debug_level_val(value) self.set(sectionname, option, str(value)) if domain.active: diff --git a/src/config/SSSDConfig/ipachangeconf.py b/src/config/SSSDConfig/ipachangeconf.py index 257c0f46d..5b12432c5 100644 --- a/src/config/SSSDConfig/ipachangeconf.py +++ b/src/config/SSSDConfig/ipachangeconf.py @@ -151,6 +151,13 @@ class IPAChangeConf: return section return self.sectnamdel[0]+section+self.sectnamdel[1]+self.deol + @staticmethod + def _get_debug_level_val(value): + if value > 16: + value = hex(value) + + return value + def dump(self, options, level=0): output = "" if level >= len(self.indent): diff --git a/src/config/SSSDConfigTest.py b/src/config/SSSDConfigTest.py index 171a902c3..4f87c5257 100755 --- a/src/config/SSSDConfigTest.py +++ b/src/config/SSSDConfigTest.py @@ -232,6 +232,18 @@ class SSSDConfigTestValid(unittest.TestCase): ldap_domain.set_active(True) sssdconfig.save_domain(ldap_domain) + proxy_domain = sssdconfig.get_domain('PROXY') + proxy_domain.set_option('debug_level', 0x1f10) + sssdconfig.save_domain(proxy_domain) + + sudo_responder = sssdconfig.get_service('sudo') + sudo_responder.set_option('debug_level', 0x2210) + sssdconfig.save_service(sudo_responder) + + pam_responder = sssdconfig.get_service('pam') + pam_responder.set_option('debug_level', 9) + sssdconfig.save_service(pam_responder) + of = self.tmp_dir + '/testModifyExistingConfig.conf' #Ensure the output file doesn't exist @@ -250,6 +262,35 @@ class SSSDConfigTestValid(unittest.TestCase): #non-owners, and should not be executable by anyone self.assertFalse(S_IMODE(mode) & 0o177) + # try to import saved configuration file + config = SSSDConfig.SSSDConfig(srcdir + "/etc/sssd.api.conf", + srcdir + "/etc/sssd.api.d") + config.import_config(configfile=of) + + # test set_option 'debug_level' value + + # check internal state before parsing strings which is done in + # get_domain or get_service + debug_option = [ x for x in config.options('domain/LDAP') + if x['name'] == 'debug_level'] + self.assertEqual(len(debug_option), 1) + self.assertEqual(debug_option[0]['value'], '3') + + debug_option = [ x for x in config.options('domain/PROXY') + if x['name'] == 'debug_level'] + self.assertEqual(len(debug_option), 1) + self.assertEqual(debug_option[0]['value'], '0x1f10') + + debug_option = [ x for x in config.options('sudo') + if x['name'] == 'debug_level'] + self.assertEqual(len(debug_option), 1) + self.assertEqual(debug_option[0]['value'], '0x2210') + + debug_option = [ x for x in config.options('pam') + if x['name'] == 'debug_level'] + self.assertEqual(len(debug_option), 1) + self.assertEqual(debug_option[0]['value'], '9') + #Remove the output file os.unlink(of) |