summaryrefslogtreecommitdiffstats
path: root/src/config
diff options
context:
space:
mode:
authorLukas Slebodnik <lslebodn@redhat.com>2017-05-25 10:32:59 +0200
committerLukas Slebodnik <lslebodn@redhat.com>2017-05-29 12:09:17 +0200
commit6df5b36008fef9c1f6dcf8f31af033a467e744c7 (patch)
treef97b0a99a5d6c10db2ebb92504f6827fe25dc646 /src/config
parentbeab60d88fc07d463f6fb3756c8f3d29bdd78827 (diff)
downloadsssd-6df5b36008fef9c1f6dcf8f31af033a467e744c7.tar.gz
sssd-6df5b36008fef9c1f6dcf8f31af033a467e744c7.tar.xz
sssd-6df5b36008fef9c1f6dcf8f31af033a467e744c7.zip
SSSDConfig: Handle integer parsing more leniently
debug_level is usually defined as decimal value <= 10 or as a hexadecimal value which is used as a bitmask Parsing of hexadecimal value was partially fixed by commit 7fac271ccebb84743c39f553eb5ec013cf1d10aa but only for sssd domains. It was not fixed for sssd services. File "/usr/share/authconfig/authinfo.py", line 3142, in writeSSSDPAM pam = self.sssdConfig.get_service('pam') File "/usr/lib/python3.6/site-packages/SSSDConfig/__init__.py", line 1620, in get_service service.set_option(opt['name'], opt['value']) File "/usr/lib/python3.6/site-packages/SSSDConfig/__init__.py", line 932, in set_option (option_schema[0], optionname, type(value))) TypeError: Expected <class 'int'> for debug_level, received <class 'str'> Resolves: https://pagure.io/SSSD/sssd/issue/3410 Reviewed-by: Jakub Hrozek <jhrozek@redhat.com>
Diffstat (limited to 'src/config')
-rw-r--r--src/config/SSSDConfig/__init__.py.in6
-rwxr-xr-xsrc/config/SSSDConfigTest.py11
-rw-r--r--src/config/testconfigs/sssd-valid.conf6
3 files changed, 18 insertions, 5 deletions
diff --git a/src/config/SSSDConfig/__init__.py.in b/src/config/SSSDConfig/__init__.py.in
index cc71cc9d0..e3930dc59 100644
--- a/src/config/SSSDConfig/__init__.py.in
+++ b/src/config/SSSDConfig/__init__.py.in
@@ -918,9 +918,11 @@ class SSSDService(SSSDConfigObject):
if type(value) != option_schema[0]:
# If it's possible to convert it, do so
try:
- if option_schema[0] == bool and \
- type(value) == str:
+ if option_schema[0] == bool and type(value) == str:
value = self.schema.bool_lookup[value.lower()]
+ elif option_schema[0] == int and type(value) == str:
+ # Make sure we handle any reasonable base
+ value = int(value, 0)
else:
value = option_schema[0](value)
except ValueError:
diff --git a/src/config/SSSDConfigTest.py b/src/config/SSSDConfigTest.py
index 8677a585f..171a902c3 100755
--- a/src/config/SSSDConfigTest.py
+++ b/src/config/SSSDConfigTest.py
@@ -118,6 +118,17 @@ class SSSDConfigTestValid(unittest.TestCase):
self.assertTrue('debug_level' in domain_opts.keys())
self.assertTrue('id_provider' in domain_opts.keys())
self.assertTrue('auth_provider' in domain_opts.keys())
+ self.assertEqual(ipa_domain.get_option('debug_level'), 0xff0)
+
+ proxy_domain = sssdconfig.get_domain('PROXY')
+ self.assertEqual(proxy_domain.get_option('debug_level'), 1)
+
+ # Verify attributes in responders
+ pam_responder = sssdconfig.get_service('pam')
+ self.assertEqual(pam_responder.get_option('debug_level'), 2)
+
+ sudo_responder = sssdconfig.get_service('sudo')
+ self.assertEqual(sudo_responder.get_option('debug_level'), 0xfc10)
del sssdconfig
diff --git a/src/config/testconfigs/sssd-valid.conf b/src/config/testconfigs/sssd-valid.conf
index 571ce77f5..29ab06234 100644
--- a/src/config/testconfigs/sssd-valid.conf
+++ b/src/config/testconfigs/sssd-valid.conf
@@ -18,7 +18,7 @@ debug_timestamps = False
[domain/PROXY]
id_provider = proxy
auth_provider = proxy
-debug_level = 0
+debug_level = 1
[domain/IPA]
id_provider = ldap
@@ -53,8 +53,8 @@ debug_level = 0
nosuchoption = True
[pam]
-debug_level = 0
+debug_level = 2
nosuchoption = True
[sudo]
-debug_level = 0
+debug_level = 0xfC10