mirror of
https://github.com/pragma-/pbot.git
synced 2024-12-24 11:42:35 +01:00
Improve check for ban-evasion when nick-change is detected
This commit is contained in:
parent
068c6a0559
commit
654cce66a5
@ -190,6 +190,10 @@ sub check_flood {
|
||||
if($newnick =~ m/^Guest\d+$/) {
|
||||
# Don't enforce for services-mandated change to guest account
|
||||
} else {
|
||||
$mask = "$newnick!$user\@$host";
|
||||
$account = $self->{pbot}->{messagehistory}->get_message_account($newnick, $user, $host);
|
||||
$nick = $newnick;
|
||||
|
||||
$self->{nickflood}->{$account}->{changes}++;
|
||||
}
|
||||
} else {
|
||||
@ -253,6 +257,8 @@ sub check_flood {
|
||||
if($channel =~ m/^#/ and not $self->{pbot}->{messagehistory}->{database}->get_channel_data($account, $channel, 'validated')->{'validated'} & $self->{NICKSERV_VALIDATED}) {
|
||||
if($mode == $self->{pbot}->{messagehistory}->{MSG_DEPARTURE}) {
|
||||
# don't check for evasion on PART/KICK
|
||||
} elsif ($mode == $self->{pbot}->{messagehistory}->{MSG_NICKCHANGE}) {
|
||||
$self->{pbot}->{conn}->whois($nick);
|
||||
} else {
|
||||
$self->{pbot}->{conn}->whois($nick);
|
||||
$self->check_bans($account, $mask, $channel);
|
||||
@ -703,6 +709,7 @@ sub check_nickserv_accounts {
|
||||
$hostmask = $self->{pbot}->{messagehistory}->{database}->find_most_recent_hostmask($message_account);
|
||||
my @channels = $self->{pbot}->{messagehistory}->{database}->get_channels($message_account);
|
||||
foreach my $channel (@channels) {
|
||||
next unless $channel =~ /^#/;
|
||||
my $channel_data = $self->{pbot}->{messagehistory}->{database}->get_channel_data($message_account, $channel, 'validated');
|
||||
if($force_validation or $channel_data->{validated} & $self->{NEEDS_CHECKBAN}) {
|
||||
$self->{pbot}->{logger}->log("anti-flood: [check-account] $nick [nickserv: $account] needs check-ban validation for $hostmask in $channel.\n");
|
||||
@ -751,7 +758,7 @@ sub adjust_offenses {
|
||||
}
|
||||
|
||||
foreach my $account (keys %{ $self->{nickflood} }) {
|
||||
if($self->{nickflood}->{$account}->{offenses} and gettimeofday - $self->{nickflood}->{$account}->{timestamp} >= 60 * 60 * 24) {
|
||||
if($self->{nickflood}->{$account}->{offenses} and gettimeofday - $self->{nickflood}->{$account}->{timestamp} >= 60 * 60 * 48) {
|
||||
$self->{nickflood}->{$account}->{offenses}--;
|
||||
|
||||
if($self->{nickflood}->{$account}->{offenses} == 0) {
|
||||
|
@ -291,7 +291,7 @@ sub on_nickchange {
|
||||
$self->{pbot}->{logger}->log("$nick!$user\@$host changed nick to $newnick\n");
|
||||
|
||||
my $message_account = $self->{pbot}->{messagehistory}->{database}->get_message_account($nick, $user, $host);
|
||||
$self->{pbot}->{messagehistory}->{database}->devalidate_all_channels($message_account);
|
||||
$self->{pbot}->{messagehistory}->{database}->devalidate_all_channels($message_account, $self->{pbot}->{antiflood}->{NEEDS_CHECKBAN});
|
||||
my @channels = $self->{pbot}->{messagehistory}->{database}->get_channels($message_account);
|
||||
foreach my $channel (@channels) {
|
||||
next if $channel !~ m/^#/;
|
||||
@ -299,7 +299,7 @@ sub on_nickchange {
|
||||
}
|
||||
|
||||
my $newnick_account = $self->{pbot}->{messagehistory}->{database}->get_message_account($newnick, $user, $host);
|
||||
$self->{pbot}->{messagehistory}->{database}->devalidate_all_channels($newnick_account);
|
||||
$self->{pbot}->{messagehistory}->{database}->devalidate_all_channels($newnick_account, $self->{pbot}->{antiflood}->{NEEDS_CHECKBAN});
|
||||
$self->{pbot}->{messagehistory}->{database}->update_hostmask_data($newnick_account, { last_seen => scalar gettimeofday });
|
||||
|
||||
$self->{pbot}->{antiflood}->check_flood("$nick!$user\@$host", $nick, $user, $host, "NICKCHANGE $newnick",
|
||||
|
@ -645,14 +645,17 @@ sub get_channel_datas_with_enter_abuses {
|
||||
}
|
||||
|
||||
sub devalidate_all_channels {
|
||||
my ($self, $id) = @_;
|
||||
my ($self, $id, $mode) = @_;
|
||||
|
||||
$mode = 0 if not defined $mode;
|
||||
|
||||
my $where = '';
|
||||
$where = 'WHERE id = ?' if defined $id;
|
||||
|
||||
eval {
|
||||
my $sth = $self->{dbh}->prepare("UPDATE Channels SET validated = 0 $where");
|
||||
$sth->bind_param(1, $id) if defined $id;
|
||||
my $sth = $self->{dbh}->prepare("UPDATE Channels SET validated = ? $where");
|
||||
$sth->bind_param(1, $mode);
|
||||
$sth->bind_param(2, $id) if defined $id;
|
||||
$sth->execute();
|
||||
$self->{new_entries}++;
|
||||
};
|
||||
|
@ -13,7 +13,7 @@ use warnings;
|
||||
# These are set automatically by the build/commit script
|
||||
use constant {
|
||||
BUILD_NAME => "PBot",
|
||||
BUILD_REVISION => 775,
|
||||
BUILD_REVISION => 776,
|
||||
BUILD_DATE => "2014-08-11",
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user