summaryrefslogtreecommitdiffstats
path: root/modules/classes.pl
diff options
context:
space:
mode:
authorLibravatarWilliam Heimbigner <william.heimbigner@gmail.com>2013-03-07 14:18:25 +0000
committerLibravatarWilliam Heimbigner <william.heimbigner@gmail.com>2013-03-07 14:18:25 +0000
commit4c8e9e917cde4e1455da331847defa5274d99753 (patch)
tree97d62ca10a89b0b09b826e5fae55ad685982ac80 /modules/classes.pl
parentfdb1d6257cb9871c687e13b1ac1ec038ed2529e4 (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.pl44
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});