The branch, master has been updated via e313c67ec94b6e86cd7de7623e9a538db739cedf (commit) from 6b4fb9fc63be39e279a311614ffce9e47609d770 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit e313c67ec94b6e86cd7de7623e9a538db739cedf Author: Mike Gabriel <mike.gabriel@das-netzwerkteam.de> Date: Mon Jan 28 12:30:01 2013 +0100 fix detection of primary group membership and detection of user list derrival from primary group memberships; also make sure the nameservice backends use unicode objects instead of strings ----------------------------------------------------------------------- Summary of changes: x2gobroker/brokers/base_broker.py | 16 ++++++++ x2gobroker/nameservices/base_nameservice.py | 14 +++---- x2gobroker/nameservices/libnss_nameservice.py | 14 +++---- x2gobroker/nameservices/testsuite_nameservice.py | 43 ++++++++++------------ x2gobroker/tests/test_broker_base.py | 22 ++++++++++- 5 files changed, 69 insertions(+), 40 deletions(-) The diff of changes is: diff --git a/x2gobroker/brokers/base_broker.py b/x2gobroker/brokers/base_broker.py index caaf85c..1daf79a 100644 --- a/x2gobroker/brokers/base_broker.py +++ b/x2gobroker/brokers/base_broker.py @@ -434,6 +434,22 @@ class X2GoBroker(object): else: return False + def get_primary_group(self, username): + """\ + Get the primary group of a given user. + + @param username: get primary group for this username + @type username: C{unicode} + + @return: returns the name of the primary group + @rtype: C{unicode} + + """ + if self._import_nameservice_module(service=self.get_groupdb_service()): + return self.nameservice_module.X2GoBrokerNameService().get_primary_group(username) + else: + return False + def is_group_member(self, username, group, primary_groups=False): """\ Check if a user is member of a given group. diff --git a/x2gobroker/nameservices/base_nameservice.py b/x2gobroker/nameservices/base_nameservice.py index b6c53af..cf05c38 100644 --- a/x2gobroker/nameservices/base_nameservice.py +++ b/x2gobroker/nameservices/base_nameservice.py @@ -21,25 +21,23 @@ class X2GoBrokerNameService(object): def has_user(self, username): - return username in self.get_users() + return unicode(username) in self.get_users() def get_users(self): return [] def get_primary_group(self, username): - return [] + return u'' def has_group(self, group): - return group in self.get_groups() + return unicode(group) in self.get_groups() def get_groups(self): return [] def is_group_member(self, username, group, primary_groups=False): - _groups = self.get_group_members(group) - if primary_groups: - _groups.extend(self.get_primary_group(username)) - return username in _groups + _members = self.get_group_members(group, primary_groups=primary_groups) + return unicode(username) in _members def get_group_members(self, group, primary_groups=False): return [] @@ -48,5 +46,5 @@ class X2GoBrokerNameService(object): _groups = [] for _group in self.get_groups(): if self.is_group_member(username=username, group=_group, primary_groups=primary_groups): - _groups.append(_group) + _groups.append(unicode(_group)) return _groups diff --git a/x2gobroker/nameservices/libnss_nameservice.py b/x2gobroker/nameservices/libnss_nameservice.py index c7a6e84..5f11f4c 100644 --- a/x2gobroker/nameservices/libnss_nameservice.py +++ b/x2gobroker/nameservices/libnss_nameservice.py @@ -29,20 +29,20 @@ import base_nameservice as base class X2GoBrokerNameService(base.X2GoBrokerNameService): def get_users(self): - return [ p.pw_name for p in pwd.getpwall() ] + return [ unicode(p.pw_name) for p in pwd.getpwall() ] def get_primary_group(self, username): - prim_gid_number = [ p.pw_gid for p in pwd.getpwall() if p.pw_name == username ] - return [ g.gr_name for g in grp.getgrall() if g.gr_gid in prim_gid_number ] + prim_gid_number = [ p.pw_gid for p in pwd.getpwall() if unicode(p.pw_name) == unicode(username) ][0] + return [ unicode(g.gr_name) for g in grp.getgrall() if g.gr_gid == prim_gid_number ][0] def get_groups(self): - return [ g.gr_name for g in grp.getgrall() ] + return [ unicode(g.gr_name) for g in grp.getgrall() ] def get_group_members(self, group, primary_groups=False): _members_from_primgroups = [] if primary_groups: for username in self.get_users(): - if group in self.get_primary_group(username): - _members_from_primgroups.append(group) - return grp.getgrnam(group).gr_mem + _members_from_primgroups + if unicode(group) == self.get_primary_group(username): + _members_from_primgroups.append(unicode(username)) + return [ unicode(u) for u in grp.getgrnam(group).gr_mem ] + _members_from_primgroups diff --git a/x2gobroker/nameservices/testsuite_nameservice.py b/x2gobroker/nameservices/testsuite_nameservice.py index e1e8173..a0ea7e2 100644 --- a/x2gobroker/nameservices/testsuite_nameservice.py +++ b/x2gobroker/nameservices/testsuite_nameservice.py @@ -21,38 +21,33 @@ # Python X2GoBroker modules import base_nameservice as base +_users = [ u'maja', u'willi', u'flip', u'kassandra', u'thekla' ] +_groups = { + u'male': [u'willi', u'flip'], + u'female': [u'maja', u'kassandra', u'thekla'], + u'bees': [u'maja', u'willi', u'kassandra'], + u'grasshoppers': [u'flip'], + u'spiders': [u'thekla'], +} + class X2GoBrokerNameService(base.X2GoBrokerNameService): def get_users(self): - return [ 'maja', 'willi', 'flip', 'kassandra', 'thekla' ] + return _users def get_primary_group(self, username): - return username + return unicode(username) def get_groups(self): - return [ 'male', 'female', 'bees', 'grasshoppers', 'spiders' ] + return _groups.keys() + _users def get_group_members(self, group, primary_groups=False): - _groups = [] - _dict = { - 'male': ['willi', 'flip'], - 'female': ['maja', 'kassandra', 'thekla'], - 'bees': ['maja', 'willi', 'kassandra'], - 'grasshoppers': ['flip'], - 'spiders': ['thekla'], - } - if group in _dict.keys(): - _groups.extend(_dict[group]) - _dict_prim = { - 'maja': 'maja', - 'willi': 'willi', - 'flip': 'flip', - 'kassandra': 'kassandra', - 'thekla': 'thekla', - } - if group in _dict_prim.keys() and primary_groups: - _groups.extend(_dict_prim[group]) - - return _groups + _members = [] + if group in _groups.keys(): + _members.extend(_groups[group]) + for username in self.get_users(): + if unicode(group) == self.get_primary_group(username): + _members.append(username) + return _members diff --git a/x2gobroker/tests/test_broker_base.py b/x2gobroker/tests/test_broker_base.py index 9abd1cc..14a9e21 100644 --- a/x2gobroker/tests/test_broker_base.py +++ b/x2gobroker/tests/test_broker_base.py @@ -203,6 +203,24 @@ enable = true self.assertTrue( ( 'root' not in base_backend.get_group_members('root') ) ) self.assertTrue( ( 'root' in base_backend.get_group_members('root', primary_groups=True) ) ) + def test_nameservicelibnss_primgroup(self): + _config_defaults = copy.deepcopy(x2gobroker.defaults.X2GOBROKER_CONFIG_DEFAULTS) + _config_defaults.update({'base': {'enable': True, }, }) + _config = """ +[global] +default-user-db = libnss +default-group-db = libnss + +[base] +enable = true +""" + tf = tempfile.NamedTemporaryFile() + print >> tf, _config + tf.seek(0) + base_backend = base.X2GoBroker(config_file=tf.name) + self.assertTrue(type(base_backend.get_primary_group('root') in (type(''), type(u'')))) + self.assertTrue(type(unicode(base_backend.get_primary_group('root')) == u'root')) + def test_nameservice_nodefaultsinconfig(self): _config_defaults = copy.deepcopy(x2gobroker.defaults.X2GOBROKER_CONFIG_DEFAULTS) _config = """ @@ -432,7 +450,9 @@ enable = true self.assertEqual(users, ['flip', 'kassandra', 'maja', 'thekla', 'willi']) groups = base_backend.get_groups() groups.sort() - self.assertEqual(groups, ['bees', 'female', 'grasshoppers', 'male', 'spiders']) + _expected_groups = ['bees', 'female', 'grasshoppers', 'male', 'spiders'] + ['flip', 'kassandra', 'maja', 'thekla', 'willi'] + _expected_groups.sort() + self.assertEqual(groups, _expected_groups) def test_checkprofileacls_group_simpletests(self): _config_defaults = copy.deepcopy(x2gobroker.defaults.X2GOBROKER_CONFIG_DEFAULTS) hooks/post-receive -- x2gobroker.git (HTTP(S) Session broker for X2Go) This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "x2gobroker.git" (HTTP(S) Session broker for X2Go).