X-Git-Url: http://dxcluster.org/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FFilter.pm;h=b3c0dbfac04e2abb9e406e4599918b447390b033;hb=69392cc0b1f7cd7ff83ebfa30949b543bd12eedb;hp=4b32ab50407168f05eca8fdf6a1d557f9c40ea0d;hpb=5764cc1c0f79b56fdf5389d2b0dcb2ab7e54723d;p=spider.git diff --git a/perl/Filter.pm b/perl/Filter.pm index 4b32ab50..b3c0dbfa 100644 --- a/perl/Filter.pm +++ b/perl/Filter.pm @@ -36,7 +36,7 @@ use strict; use vars qw($VERSION $BRANCH); $VERSION = sprintf( "%d.%03d", q$Revision$ =~ /(\d+)\.(\d+)/ ); -$BRANCH = sprintf( "%d.%03d", q$Revision$ =~ /^\d+\.\d+(?:\.(\d+)\.(\d+))?$/ || (0,0)); +$BRANCH = sprintf( "%d.%03d", q$Revision$ =~ /\d+\.\d+\.(\d+)\.(\d+)/ || (0,0)); $main::build += $VERSION; $main::branch += $BRANCH; @@ -116,17 +116,26 @@ sub read_in $in = undef; my $s = readfilestr($fn); my $newin = eval $s; - dbg($@) if $@; + if ($@) { + dbg($@); + unlink($fn); + return undef; + } if ($in) { $newin = new('Filter::Old', $sort, $call, $flag); $newin->{filter} = $in; - } else { + } elsif (ref $newin && $newin->can('getfilkeys')) { my $filter; my $key; foreach $key ($newin->getfilkeys) { $newin->compile($key, 'reject'); $newin->compile($key, 'accept'); } + } else { + # error on reading file, delete and exit + dbg("empty or unreadable filter: $fn, deleted"); + unlink($fn); + return undef; } return $newin; } @@ -198,7 +207,6 @@ sub it my $key; my $type = 'Dunno'; my $asc = '?'; - my $data = ref $_[0] ? shift : \@_; my $r = @keys > 0 ? 0 : 1; foreach $key (@keys) { @@ -206,7 +214,7 @@ sub it if ($filter->{reject} && exists $filter->{reject}->{code}) { $type = 'reject'; $asc = $filter->{reject}->{user}; - if (&{$filter->{reject}->{code}}($data)) { + if (&{$filter->{reject}->{code}}(\@_)) { $r = 0; last; } else { @@ -216,7 +224,7 @@ sub it if ($filter->{accept} && exists $filter->{accept}->{code}) { $type = 'accept'; $asc = $filter->{accept}->{user}; - if (&{$filter->{accept}->{code}}($data)) { + if (&{$filter->{accept}->{code}}(\@_)) { $r = 1; last; } else { @@ -229,7 +237,7 @@ sub it my $hops = $self->{hops} if exists $self->{hops}; if (isdbg('filter')) { - my $args = join '\',\'', map {defined $_ ? $_ : 'undef'} @$data; + my $args = join '\',\'', map {defined $_ ? $_ : 'undef'} @_; my $true = $r ? "OK " : "REJ"; my $sort = $self->{sort}; my $dir = $self->{name} =~ /^in_/i ? "IN " : "OUT"; @@ -308,7 +316,7 @@ sub install } elsif ($name eq 'USER_DEFAULT') { @dxchan = DXChannel::get_all_users(); } else { - $dxchan = DXChannel->get($name); + $dxchan = DXChannel::get($name); push @dxchan, $dxchan if $dxchan; } foreach $dxchan (@dxchan) {