diff --git a/gitosis/group.py b/gitosis/group.py index 975bbc5..a18a731 100644 --- a/gitosis/group.py +++ b/gitosis/group.py @@ -19,7 +19,11 @@ def _getMembership(config, user, seen): else: members = members.split() - if user in members: + # @all is the only group where membership needs to be + # bootstrapped like this, anything else gets started from the + # username itself + if (user in members + or '@all' in members): log.debug('found %(user)r in %(group)r' % dict( user=user, group=group, diff --git a/gitosis/test/test_access.py b/gitosis/test/test_access.py index 9f9d81a..751b0b4 100644 --- a/gitosis/test/test_access.py +++ b/gitosis/test/test_access.py @@ -78,6 +78,14 @@ def test_read_yes_map_wouldHaveWritable(): eq(access.haveAccess(config=cfg, user='jdoe', mode='readonly', path='foo/bar'), None) +def test_read_yes_all(): + cfg = RawConfigParser() + cfg.add_section('group fooers') + cfg.set('group fooers', 'members', '@all') + cfg.set('group fooers', 'readonly', 'foo/bar') + eq(access.haveAccess(config=cfg, user='jdoe', mode='readonly', path='foo/bar'), + ('repositories', 'foo/bar')) + def test_base_global_absolute(): cfg = RawConfigParser() cfg.add_section('gitosis')