diff options
| author | 2013-03-07 14:18:25 +0000 | |
|---|---|---|
| committer | 2013-03-07 14:18:25 +0000 | |
| commit | 4c8e9e917cde4e1455da331847defa5274d99753 (patch) | |
| tree | 97d62ca10a89b0b09b826e5fae55ad685982ac80 /modules/classes.pl | |
| parent | fdb1d6257cb9871c687e13b1ac1ec038ed2529e4 (diff) | |
Added tracking of the realIP in quiets/bans, added a floodqueue that checks the realIP against the realIP quiet list, did some improvement of IP conversion code
Diffstat (limited to 'modules/classes.pl')
| -rw-r--r-- | modules/classes.pl | 44 |
1 files changed, 43 insertions, 1 deletions
diff --git a/modules/classes.pl b/modules/classes.pl index fc8e9e7..4fbfb94 100644 --- a/modules/classes.pl +++ b/modules/classes.pl @@ -4,6 +4,7 @@ use strict; use warnings; use Text::LevenshteinXS qw(distance); use Data::Dumper; +use Regexp::Wildcards; my %sf = (); @@ -15,6 +16,7 @@ sub new "strbl" => \&strbl, "dnsbl" => \&dnsbl, "floodqueue" => \&floodqueue, + "floodqueue2" => \&floodqueue2, "nickspam" => \&nickspam, "splitflood" => \&splitflood, "advsplitflood" => \&advsplitflood, @@ -31,7 +33,8 @@ sub new "asciiflood" => \&asciiflood, "joinmsgquit" => \&joinmsgquit, "garbagemeter" => \&garbagemeter, - "cyclebotnet" => \&cyclebotnet + "cyclebotnet" => \&cyclebotnet, + "banevade" => \&banevade }; $self->{ftbl} = $tbl; bless($self); @@ -91,6 +94,18 @@ sub nickbl } return 0; } + +sub banevade +{ + my ($chk, $id, $event, $chan, $rev) = @_; + my $ip = ASM::Util->getNickIP($event->{nick}); + return 0 unless defined($ip); + if (defined($::sc{lc $chan}{ipbans}{$ip})) { + return 1; + } + return 0; +} + sub proxy { my ($chk, $id, $event, $chan, $rev) = @_; @@ -180,6 +195,33 @@ sub dnsbl return 0; } +sub floodqueue2 { + my ($chk, $id, $event, $chan, $rev) = @_; + my @cut = split(/:/, $chk->{content}); + + my $cvt = Regexp::Wildcards->new(type => 'jokers'); + my $hit = 0; + foreach my $mask ( keys %{$::sc{lc $chan}{quiets}}) { + if ($mask !~ /^\$/) { + my @div = split(/\$/, $mask); + my $regex = $cvt->convert($div[0]); + if (lc $event->{from} =~ lc $regex) { + $hit = 1; + } + } elsif ( (defined($::sn{lc $event->{nick}}{account})) && ($mask =~ /^\$a:(.*)/)) { + my @div = split(/\$/, $mask); + my $regex = $cvt->convert($div[0]); + if (lc ($::sn{lc $event->{nick}}{account}) =~ lc $regex) { + $hit = 1; + } + } + } + return 0 unless $hit; + + return 1 if ( flood_add( $chan, $id, $event->{host}, int($cut[1]) ) == int($cut[0]) ); + return 0; +} + sub floodqueue { my ($chk, $id, $event, $chan, $rev) = @_; my @cut = split(/:/, $chk->{content}); |
