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
@@ -2,6 +2,8 @@ MANIFEST Makefile.PL gitaclhook lib/GitACL.pm lib/GitACL/File.pm lib/GitACL/LDAP.pm gitacl.schema +META.yml Module YAML meta-data (added by MakeMaker) +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 @@ -91,17 +91,26 @@ sub git_value(@) { local $_ = <$fd>; chop; close($fd); return $_; } +sub match_primary_group($$) { + my ($user_name,$group_name) = @_; + my ($name,$passwd,$uid,$gid,$members) = getpwnam($user_name) or return 0; + ($name) = getgrgid($gid) or return 0; + return 1 if $name eq $group_name; + return 0; +} + sub match_user($$) { my ($self, $expr) = @_; return 1 if ($expr eq 'all'); return 0 if ($expr eq 'none'); if ($expr =~ /^%(.+)/) { + return 1 if match_primary_group($self->{user_name}, $1); my ($name,$passwd,$gid,$members) = getgrnam($1) or return 0; my @a = split(/\s+/,$members); for (my $i = 0; $i <= $#a; $i++) { return 1 if $a[$i] eq $self->{user_name}; } } elsif ($expr eq $self->{user_name}) { 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 @@ -21,13 +21,13 @@ sub check_acl { my $self = shift; my $fd; my $line = 0; my @ret; my $filename = GitACL::git_value('config', 'hooks.aclfile'); - $self->allow("no ACL configured for $self->project_name") + $self->allow("no ACL configured for ".$self->project_name) unless defined($filename); open($fd, "<", $filename) or $self->deny("cannot open configuration file: $!"); while (<$fd>) { ++$line; |