Hi,
I have noticed that there are no methods for manipulating the services
option of [sssd] in SSSDConfig. I have created a patch that adds these
methods, see attachment.
Honza
--
Jan Cholasta
>From 2c7b1fe62e5bc6169bab49a27802c51a066588ed Mon Sep 17 00:00:00 2001
From: Jan Cholasta <[email protected]>
Date: Wed, 8 Feb 2012 10:42:04 -0500
Subject: [PATCH] Add methods for activating and deactivating services to
SSSDConfig
---
src/config/SSSDConfig.py | 84 ++++++++++++++++++++++++++++++++++++++++++
src/config/SSSDConfigTest.py | 62 +++++++++++++++++++++++++++++++
2 files changed, 146 insertions(+), 0 deletions(-)
diff --git a/src/config/SSSDConfig.py b/src/config/SSSDConfig.py
index 9fbe674..4974a6b 100644
--- a/src/config/SSSDConfig.py
+++ b/src/config/SSSDConfig.py
@@ -1433,6 +1433,90 @@ class SSSDConfig(SSSDChangeConf):
self.save_service(service)
return service
+ def activate_service(self, name):
+ """
+ Activate a service
+
+ name:
+ The name of the service to activate
+
+ === Returns ===
+ No return value
+
+ === Errors ===
+ NotInitializedError:
+ This SSSDConfig object has not had import_config() or new_config()
+ run on it yet.
+ NoServiceError:
+ There is no such service with the specified name in the SSSDConfig.
+ """
+
+ if not self.initialized:
+ raise NotInitializedError
+
+ if name not in self.list_services():
+ raise NoServiceError
+
+ item = self.get_option_index('sssd', 'services')[1]
+ if not item:
+ self.set('sssd','services', name)
+ return
+
+ # Turn the items into a set of dictionary keys
+ # This guarantees uniqueness and makes it easy
+ # to add a new value
+ service_dict = dict.fromkeys(striplist(item['value'].split(',')))
+ if service_dict.has_key(''):
+ del service_dict['']
+
+ # Add a new key for the service being activated
+ service_dict[name] = None
+
+ # Write out the joined keys
+ self.set('sssd','services', ", ".join(service_dict.keys()))
+
+ def deactivate_service(self, name):
+ """
+ Deactivate a service
+
+ name:
+ The name of the service to deactivate
+
+ === Returns ===
+ No return value
+
+ === Errors ===
+ NotInitializedError:
+ This SSSDConfig object has not had import_config() or new_config()
+ run on it yet.
+ NoServiceError:
+ There is no such service with the specified name in the SSSDConfig.
+ """
+
+ if not self.initialized:
+ raise NotInitializedError
+
+ if name not in self.list_services():
+ raise NoServiceError
+ item = self.get_option_index('sssd', 'services')[1]
+ if not item:
+ self.set('sssd','services', '')
+ return
+
+ # Turn the items into a set of dictionary keys
+ # This guarantees uniqueness and makes it easy
+ # to remove the one unwanted value.
+ service_dict = dict.fromkeys(striplist(item['value'].split(',')))
+ if service_dict.has_key(''):
+ del service_dict['']
+
+ # Remove the unwanted service from the lest
+ if service_dict.has_key(name):
+ del service_dict[name]
+
+ # Write out the joined keys
+ self.set('sssd','services', ", ".join(service_dict.keys()))
+
def delete_service(self, name):
"""
Remove a service from the SSSDConfig object. This function will also
diff --git a/src/config/SSSDConfigTest.py b/src/config/SSSDConfigTest.py
index 5583f56..cfb1e01 100755
--- a/src/config/SSSDConfigTest.py
+++ b/src/config/SSSDConfigTest.py
@@ -1283,6 +1283,68 @@ class SSSDConfigTestSSSDConfig(unittest.TestCase):
# Negative Test - Type Error
self.assertRaises(TypeError, sssdconfig.save_service, self)
+ def testActivateService(self):
+ sssdconfig = SSSDConfig.SSSDConfig(srcdir + "/etc/sssd.api.conf",
+ srcdir + "/etc/sssd.api.d")
+
+ service_name = 'pam'
+
+ # Negative test - Not initialized
+ self.assertRaises(SSSDConfig.NotInitializedError,
+ sssdconfig.activate_service, service_name)
+
+ sssdconfig.import_config(srcdir + "/testconfigs/sssd-valid.conf")
+
+ # Positive test - Activate an inactive service
+ self.assertTrue(service_name in sssdconfig.list_services())
+
+ sssdconfig.activate_service(service_name)
+ self.assertTrue(service_name in sssdconfig.list_services())
+
+ # Positive test - Activate an active service
+ # This should succeed
+ sssdconfig.activate_service(service_name)
+ self.assertTrue(service_name in sssdconfig.list_services())
+
+ # Negative test - Invalid service name
+ self.assertRaises(SSSDConfig.NoServiceError,
+ sssdconfig.activate_service, 'nosuchservice')
+
+ # Negative test - Invalid service name type
+ self.assertRaises(SSSDConfig.NoServiceError,
+ sssdconfig.activate_service, self)
+
+ def testDeactivateService(self):
+ sssdconfig = SSSDConfig.SSSDConfig(srcdir + "/etc/sssd.api.conf",
+ srcdir + "/etc/sssd.api.d")
+
+ service_name = 'pam'
+
+ # Negative test - Not initialized
+ self.assertRaises(SSSDConfig.NotInitializedError,
+ sssdconfig.activate_service, service_name)
+
+ sssdconfig.import_config(srcdir + "/testconfigs/sssd-valid.conf")
+
+ # Positive test -Deactivate an active service
+ self.assertTrue(service_name in sssdconfig.list_services())
+
+ sssdconfig.deactivate_service(service_name)
+ self.assertTrue(service_name in sssdconfig.list_services())
+
+ # Positive test - Deactivate an inactive service
+ # This should succeed
+ sssdconfig.deactivate_service(service_name)
+ self.assertTrue(service_name in sssdconfig.list_services())
+
+ # Negative test - Invalid service name
+ self.assertRaises(SSSDConfig.NoServiceError,
+ sssdconfig.activate_service, 'nosuchservice')
+
+ # Negative test - Invalid service name type
+ self.assertRaises(SSSDConfig.NoServiceError,
+ sssdconfig.activate_service, self)
+
def testListActiveDomains(self):
sssdconfig = SSSDConfig.SSSDConfig(srcdir + "/etc/sssd.api.conf",
srcdir + "/etc/sssd.api.d")
--
1.7.6.5
_______________________________________________
sssd-devel mailing list
[email protected]
https://fedorahosted.org/mailman/listinfo/sssd-devel