mirror of
				https://github.com/osmarks/ngircd.git
				synced 2025-10-31 22:13:00 +00:00 
			
		
		
		
	KICK: Fix denial of service bug
Test if the user that it is to be kicked is on the channel before user channel modes are tested. Otherwise assert( cl2chan != NULL ); in line 742 would fail and stop the service.
This commit is contained in:
		| @@ -326,6 +326,13 @@ Channel_Kick(CLIENT *Peer, CLIENT *Target, CLIENT *Origin, const char *Name, | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	/* Check that the client to be kicked is on the specified channel */ | ||||
| 	if (!Channel_IsMemberOf(chan, Target)) { | ||||
| 		IRC_WriteStrClient(Origin, ERR_USERNOTINCHANNEL_MSG, | ||||
| 				   Client_ID(Origin), Client_ID(Target), Name ); | ||||
| 		return; | ||||
| 	} | ||||
|  | ||||
| 	if(Client_Type(Peer) == CLIENT_USER) { | ||||
| 		/* Channel mode 'Q' and user mode 'q' on target: nobody but | ||||
| 		 * IRC Operators and servers can kick the target user */ | ||||
| @@ -382,13 +389,6 @@ Channel_Kick(CLIENT *Peer, CLIENT *Target, CLIENT *Origin, const char *Name, | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	/* Check that the client to be kicked is on the specified channel */ | ||||
| 	if (!Channel_IsMemberOf(chan, Target)) { | ||||
| 		IRC_WriteStrClient(Origin, ERR_USERNOTINCHANNEL_MSG, | ||||
| 				   Client_ID(Origin), Client_ID(Target), Name ); | ||||
| 		return; | ||||
| 	} | ||||
|  | ||||
| 	/* Kick Client from channel */ | ||||
| 	Remove_Client( REMOVE_KICK, chan, Target, Origin, Reason, true); | ||||
| } /* Channel_Kick */ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Sebastian Köhler
					Sebastian Köhler