diff options
Diffstat (limited to 'lib/Youri/Upload/Check/ACL.pm')
-rw-r--r-- | lib/Youri/Upload/Check/ACL.pm | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/lib/Youri/Upload/Check/ACL.pm b/lib/Youri/Upload/Check/ACL.pm new file mode 100644 index 0000000..e231500 --- /dev/null +++ b/lib/Youri/Upload/Check/ACL.pm @@ -0,0 +1,74 @@ +# $Id: Tag.pm 867 2006-04-11 20:34:56Z guillomovitch $ +package Youri::Upload::Check::ACL; + +=head1 NAME + +Youri::Upload::Check::Tag - Incorrect tag values check + +=head1 DESCRIPTION + +This check plugin rejects packages with incorrect tag values, based on regular +expressions. + +=cut + +use strict; +use Carp; +use base qw/Youri::Upload::Check/; +my $acl; + +sub _init { + my $self = shift; + my %options = ( + acl_file => '', + user => '', + @_ + ); + $self->{_user} = $options{user}; + $acl = get_acl($options{acl_file}); +} + +sub run { + my ($self, $package, $repository, $target, $define) = @_; + croak "Not a class method" unless ref $self; + my $file = $package->get_full_name(); + my $arch = $package->get_arch(); + my $srpm = $package->get_canonical_name; + my $section = $repository->_get_section($package, $target, $define); + my $user = $self->{_user}; + foreach my $t (keys %$acl) { + next if $target !~ /$t/; + foreach my $acl (@{$acl->{$t}}) { + my ($arch, $media, $r, $users) = @$acl; + next if $arch !~ $a || $srpm !~ $r || $media !~ $media; + if ($user =~ /$users/) { + return 1 + } else { + $self->{_error} = "$user is not authorized to upload packages belonging to $srpm (authorized persons: " . join(', ', split '\|', $users) . ")"; + return 0 + } + } + } + 1 +} + +sub get_acl { + my ($file) = @_; + my %acl; + open my $f, $file; + while (<$f>) { + my ($dis, $arch, $media, $regexp, $users) = split ' '; + push @{$acl{$dis}}, [ $arch , $media, $regexp, $users ] + } + \%acl +} + +=head1 COPYRIGHT AND LICENSE + +Copyright (C) 2002-2006, YOURI project + +This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. + +=cut + +1; |