diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2013-10-24 13:25:26 +0300 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2013-10-24 13:25:26 +0300 |
commit | 5769594665c28999ecbe76d8c9eda44adff27549 (patch) | |
tree | e271fe15eafd1b60fc229a1362517462df4b36fa | |
parent | 33ba97cd28f138b49697273e445b479d42bf42a9 (diff) | |
download | gitaclhook-5769594665c28999ecbe76d8c9eda44adff27549.tar.gz gitaclhook-5769594665c28999ecbe76d8c9eda44adff27549.tar.bz2 |
Take into account the user primary group.
* MANIFEST: Add new files.
* lib/GitACL.pm (match_primary_group): New function.
(match_user): Use match_primary_group.
* lib/GitACL/File.pm (check_acl): Minor fix.
-rw-r--r-- | MANIFEST | 2 | ||||
-rw-r--r-- | lib/GitACL.pm | 9 | ||||
-rw-r--r-- | lib/GitACL/File.pm | 2 |
3 files changed, 12 insertions, 1 deletions
@@ -5,3 +5,5 @@ lib/GitACL.pm | |||
5 | lib/GitACL/File.pm | 5 | lib/GitACL/File.pm |
6 | lib/GitACL/LDAP.pm | 6 | lib/GitACL/LDAP.pm |
7 | gitacl.schema | 7 | gitacl.schema |
8 | META.yml Module YAML meta-data (added by MakeMaker) | ||
9 | META.json Module JSON meta-data (added by MakeMaker) | ||
diff --git a/lib/GitACL.pm b/lib/GitACL.pm index 57b38b8..f1f792a 100644 --- a/lib/GitACL.pm +++ b/lib/GitACL.pm | |||
@@ -94,11 +94,20 @@ sub git_value(@) { | |||
94 | return $_; | 94 | return $_; |
95 | } | 95 | } |
96 | 96 | ||
97 | sub match_primary_group($$) { | ||
98 | my ($user_name,$group_name) = @_; | ||
99 | my ($name,$passwd,$uid,$gid,$members) = getpwnam($user_name) or return 0; | ||
100 | ($name) = getgrgid($gid) or return 0; | ||
101 | return 1 if $name eq $group_name; | ||
102 | return 0; | ||
103 | } | ||
104 | |||
97 | sub match_user($$) { | 105 | sub match_user($$) { |
98 | my ($self, $expr) = @_; | 106 | my ($self, $expr) = @_; |
99 | return 1 if ($expr eq 'all'); | 107 | return 1 if ($expr eq 'all'); |
100 | return 0 if ($expr eq 'none'); | 108 | return 0 if ($expr eq 'none'); |
101 | if ($expr =~ /^%(.+)/) { | 109 | if ($expr =~ /^%(.+)/) { |
110 | return 1 if match_primary_group($self->{user_name}, $1); | ||
102 | my ($name,$passwd,$gid,$members) = getgrnam($1) or return 0; | 111 | my ($name,$passwd,$gid,$members) = getgrnam($1) or return 0; |
103 | my @a = split(/\s+/,$members); | 112 | my @a = split(/\s+/,$members); |
104 | for (my $i = 0; $i <= $#a; $i++) { | 113 | for (my $i = 0; $i <= $#a; $i++) { |
diff --git a/lib/GitACL/File.pm b/lib/GitACL/File.pm index 49378b0..8842ffd 100644 --- a/lib/GitACL/File.pm +++ b/lib/GitACL/File.pm | |||
@@ -24,7 +24,7 @@ sub check_acl { | |||
24 | my @ret; | 24 | my @ret; |
25 | 25 | ||
26 | my $filename = GitACL::git_value('config', 'hooks.aclfile'); | 26 | my $filename = GitACL::git_value('config', 'hooks.aclfile'); |
27 | $self->allow("no ACL configured for $self->project_name") | 27 | $self->allow("no ACL configured for ".$self->project_name) |
28 | unless defined($filename); | 28 | unless defined($filename); |
29 | 29 | ||
30 | open($fd, "<", $filename) | 30 | open($fd, "<", $filename) |