diff options
author | Lukas Slebodnik <lslebodn@redhat.com> | 2017-05-25 10:32:59 +0200 |
---|---|---|
committer | Lukas Slebodnik <lslebodn@redhat.com> | 2017-05-29 12:09:17 +0200 |
commit | 6df5b36008fef9c1f6dcf8f31af033a467e744c7 (patch) | |
tree | f97b0a99a5d6c10db2ebb92504f6827fe25dc646 /src/config | |
parent | beab60d88fc07d463f6fb3756c8f3d29bdd78827 (diff) | |
download | sssd-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.in | 6 | ||||
-rwxr-xr-x | src/config/SSSDConfigTest.py | 11 | ||||
-rw-r--r-- | src/config/testconfigs/sssd-valid.conf | 6 |
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 |