summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLukas Slebodnik <lslebodn@redhat.com>2017-05-25 10:33:08 +0200
committerLukas Slebodnik <lslebodn@redhat.com>2017-05-29 12:09:33 +0200
commitfca26b76f23ee4457d6796b19892ed97362b6c8d (patch)
tree87a2eaf7b047322694499bacc6360fd4cadbfdd7
parent6df5b36008fef9c1f6dcf8f31af033a467e744c7 (diff)
downloadsssd-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.in4
-rw-r--r--src/config/SSSDConfig/ipachangeconf.py7
-rwxr-xr-xsrc/config/SSSDConfigTest.py41
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)