diff options
author | Lukas Slebodnik <lslebodn@redhat.com> | 2016-09-21 13:56:43 +0200 |
---|---|---|
committer | Lukas Slebodnik <lslebodn@redhat.com> | 2016-09-22 21:38:33 +0200 |
commit | 1773fdad2730f3f910782781fa286f402ce36cca (patch) | |
tree | 905ac41aaa724401df1dea8650dbb40fe921cc7f | |
parent | e9a2e7afbd09c23dd8748246e09831ed7b17d7c5 (diff) | |
download | sssd-1773fdad2730f3f910782781fa286f402ce36cca.tar.gz sssd-1773fdad2730f3f910782781fa286f402ce36cca.tar.xz sssd-1773fdad2730f3f910782781fa286f402ce36cca.zip |
SSSDConfig: Do not fail with nonexisting domains/services
dict.keys() returns iterator in python3 and not list
Chaging data in dictionary while using iterator
fails with "RuntimeError: dictionary changed size during iteration"
https://fedorahosted.org/sssd/ticket/3107
Reviewed-by: Michal Židek <mzidek@redhat.com>
-rw-r--r-- | Makefile.am | 1 | ||||
-rw-r--r-- | src/config/SSSDConfig/__init__.py.in | 4 | ||||
-rwxr-xr-x | src/config/SSSDConfigTest.py | 33 | ||||
-rw-r--r-- | src/config/testconfigs/sssd-nonexisting-services-domains.conf | 13 |
4 files changed, 49 insertions, 2 deletions
diff --git a/Makefile.am b/Makefile.am index 17c5f26ce..4385268b2 100644 --- a/Makefile.am +++ b/Makefile.am @@ -422,6 +422,7 @@ dist_noinst_DATA = \ src/config/testconfigs/sssd-badversion.conf \ src/config/testconfigs/sssd-invalid.conf \ src/config/testconfigs/sssd-invalid-badbool.conf \ + src/config/testconfigs/sssd-nonexisting-services-domains.conf \ src/config/etc/sssd.api.d/crash_test_dummy \ contrib/ci/README.md \ contrib/ci/configure.sh \ diff --git a/src/config/SSSDConfig/__init__.py.in b/src/config/SSSDConfig/__init__.py.in index 0acb751e2..e616ce3dc 100644 --- a/src/config/SSSDConfig/__init__.py.in +++ b/src/config/SSSDConfig/__init__.py.in @@ -1511,7 +1511,7 @@ class SSSDConfig(SSSDChangeConf): # Remove any entries in this list that don't # correspond to an active service, for integrity configured_services = self.list_services() - for srv in service_dict.keys(): + for srv in list(service_dict): if srv not in configured_services: del service_dict[srv] @@ -1794,7 +1794,7 @@ class SSSDConfig(SSSDChangeConf): # Remove any entries in this list that don't # correspond to an active domain, for integrity configured_domains = self.list_domains() - for dom in domain_dict.keys(): + for dom in list(domain_dict): if dom not in configured_domains: del domain_dict[dom] diff --git a/src/config/SSSDConfigTest.py b/src/config/SSSDConfigTest.py index 8a64a257a..006a03447 100755 --- a/src/config/SSSDConfigTest.py +++ b/src/config/SSSDConfigTest.py @@ -1683,6 +1683,39 @@ class SSSDConfigTestSSSDConfig(unittest.TestCase): "Domain [%s] unexpectedly found" % domain) + def testListWithInvalidDomain(self): + sssdconfig = SSSDConfig.SSSDConfig(srcdir + "/etc/sssd.api.conf", + srcdir + "/etc/sssd.api.d") + + # Negative Test - Not Initialized + self.assertRaises(SSSDConfig.NotInitializedError, + sssdconfig.list_domains) + + # Positive Test + sssdconfig.import_config( + srcdir + '/testconfigs/sssd-nonexisting-services-domains.conf' + ) + + domains = sssdconfig.list_active_domains() + self.assertTrue("active" in domains and len(domains) == 1, + "domain 'active' not found among active domains") + + domains = sssdconfig.list_inactive_domains() + self.assertTrue("inactive" in domains and len(domains) == 1, + "domain 'inactive' not found among inactive domains") + + services = sssdconfig.list_active_services() + self.assertTrue("nss" in services and len(services) == 1, + "service 'nss' not found among active services") + + services = sssdconfig.list_inactive_services() + self.assertTrue(len(services) == 2, + "unexpected count of inactive services") + for service in ("sssd", "pam"): + self.assertTrue(service in services, + "service '%s' not found among inactive services" + % service) + def testGetDomain(self): sssdconfig = SSSDConfig.SSSDConfig(srcdir + "/etc/sssd.api.conf", srcdir + "/etc/sssd.api.d") diff --git a/src/config/testconfigs/sssd-nonexisting-services-domains.conf b/src/config/testconfigs/sssd-nonexisting-services-domains.conf new file mode 100644 index 000000000..d1e248001 --- /dev/null +++ b/src/config/testconfigs/sssd-nonexisting-services-domains.conf @@ -0,0 +1,13 @@ +[domain/active] + +[domain/inactive] + +[sssd] +domains = nonexistent, active +services = nonexistent, nss + +[nss] +debug_level = 1 + +[pam] +debug_level = 2 |