X-Git-Url: http://dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FFilter.pm;h=b3c0dbfac04e2abb9e406e4599918b447390b033;hb=9525835dcfac402817430bceaa0ebf48b05ac4af;hp=ff4ab2e868e95aff35aa6014edaa2018c98045c5;hpb=5b3c2c5e342c23fbab96b7573c5963344617878f;p=spider.git diff --git a/perl/Filter.pm b/perl/Filter.pm index ff4ab2e8..b3c0dbfa 100644 --- a/perl/Filter.pm +++ b/perl/Filter.pm @@ -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) {