mirror of
				https://github.com/pragma-/pbot.git
				synced 2025-10-31 14:47:27 +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 { | ||||
| @ -252,7 +256,9 @@ sub check_flood { | ||||
|   # check for ban evasion if channel begins with # (not private message) and hasn't yet been validated against ban evasion | ||||
|   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 | ||||
|       # 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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Pragmatic Software
						Pragmatic Software