mirror of
				https://github.com/osmarks/ngircd.git
				synced 2025-10-31 14:02:59 +00:00 
			
		
		
		
	Send_Message(): really enforce target client type.
This commit is contained in:
		| @@ -319,19 +319,19 @@ Send_Message(CLIENT * Client, REQUEST * Req, int ForceType, bool SendErrors) | |||||||
|  |  | ||||||
| 	if (Req->argc == 0) { | 	if (Req->argc == 0) { | ||||||
| 		if (!SendErrors) | 		if (!SendErrors) | ||||||
| 			return true; | 			return CONNECTED; | ||||||
| 		return IRC_WriteStrClient(Client, ERR_NORECIPIENT_MSG, | 		return IRC_WriteStrClient(Client, ERR_NORECIPIENT_MSG, | ||||||
| 					  Client_ID(Client), Req->command); | 					  Client_ID(Client), Req->command); | ||||||
| 	} | 	} | ||||||
| 	if (Req->argc == 1) { | 	if (Req->argc == 1) { | ||||||
| 		if (!SendErrors) | 		if (!SendErrors) | ||||||
| 			return true; | 			return CONNECTED; | ||||||
| 		return IRC_WriteStrClient(Client, ERR_NOTEXTTOSEND_MSG, | 		return IRC_WriteStrClient(Client, ERR_NOTEXTTOSEND_MSG, | ||||||
| 					  Client_ID(Client)); | 					  Client_ID(Client)); | ||||||
| 	} | 	} | ||||||
| 	if (Req->argc > 2) { | 	if (Req->argc > 2) { | ||||||
| 		if (!SendErrors) | 		if (!SendErrors) | ||||||
| 			return true; | 			return CONNECTED; | ||||||
| 		return IRC_WriteStrClient(Client, ERR_NEEDMOREPARAMS_MSG, | 		return IRC_WriteStrClient(Client, ERR_NEEDMOREPARAMS_MSG, | ||||||
| 					  Client_ID(Client), Req->command); | 					  Client_ID(Client), Req->command); | ||||||
| 	} | 	} | ||||||
| @@ -421,20 +421,18 @@ Send_Message(CLIENT * Client, REQUEST * Req, int ForceType, bool SendErrors) | |||||||
| 			/* Target is a user, enforce type */ | 			/* Target is a user, enforce type */ | ||||||
| 			if (Client_Type(cl) != ForceType) { | 			if (Client_Type(cl) != ForceType) { | ||||||
| 				if (!SendErrors) | 				if (!SendErrors) | ||||||
| 					return true; | 					return CONNECTED; | ||||||
| 				if (!IRC_WriteStrClient(from, ERR_NOSUCHNICK_MSG, | 				return IRC_WriteStrClient(from, ERR_NOSUCHNICK_MSG, | ||||||
| 							  Client_ID(from), | 							  Client_ID(from), | ||||||
| 							  currentTarget)) | 							  currentTarget); | ||||||
| 					return false; | 			} | ||||||
| 			} else if (SendErrors | 			if (SendErrors && (Client_Type(Client) != CLIENT_SERVER) | ||||||
| 				   && (Client_Type(Client) != CLIENT_SERVER) |  | ||||||
| 			    && strchr(Client_Modes(cl), 'a')) { | 			    && strchr(Client_Modes(cl), 'a')) { | ||||||
| 				/* Target is away */ | 				/* Target is away */ | ||||||
| 				if (!SendErrors) | 				if (!IRC_WriteStrClient(from, RPL_AWAY_MSG, | ||||||
| 					return true; | 							Client_ID(from), | ||||||
| 				if (!IRC_WriteStrClient | 							Client_ID(cl), | ||||||
| 				    (from, RPL_AWAY_MSG, Client_ID(from), | 							Client_Away(cl))) | ||||||
| 				     Client_ID(cl), Client_Away(cl))) |  | ||||||
| 					return DISCONNECTED; | 					return DISCONNECTED; | ||||||
| 			} | 			} | ||||||
| 			if (Client_Conn(from) > NONE) { | 			if (Client_Conn(from) > NONE) { | ||||||
| @@ -442,23 +440,23 @@ Send_Message(CLIENT * Client, REQUEST * Req, int ForceType, bool SendErrors) | |||||||
| 			} | 			} | ||||||
| 			if (!IRC_WriteStrClientPrefix(cl, from, "PRIVMSG %s :%s", | 			if (!IRC_WriteStrClientPrefix(cl, from, "PRIVMSG %s :%s", | ||||||
| 						Client_ID(cl), Req->argv[1])) | 						Client_ID(cl), Req->argv[1])) | ||||||
| 				return false; | 				return DISCONNECTED; | ||||||
| 		} else if (strchr("$#", currentTarget[0]) | 		} else if (strchr("$#", currentTarget[0]) | ||||||
| 			   && strchr(currentTarget, '.')) { | 			   && strchr(currentTarget, '.')) { | ||||||
| 			/* targetmask */ | 			/* targetmask */ | ||||||
| 			if (!Send_Message_Mask(from, currentTarget, | 			if (!Send_Message_Mask(from, currentTarget, | ||||||
| 					       Req->argv[1], SendErrors)) | 					       Req->argv[1], SendErrors)) | ||||||
| 				return false; | 				return DISCONNECTED; | ||||||
| 		} else if ((chan = Channel_Search(currentTarget))) { | 		} else if ((chan = Channel_Search(currentTarget))) { | ||||||
| 			/* channel */ | 			/* channel */ | ||||||
| 			if (!Channel_Write(chan, from, Client, Req->argv[1])) | 			if (!Channel_Write(chan, from, Client, Req->argv[1])) | ||||||
| 				return false; | 				return DISCONNECTED; | ||||||
| 		} else { | 		} else { | ||||||
| 			if (!SendErrors) | 			if (!SendErrors) | ||||||
| 				return true; | 				return CONNECTED; | ||||||
| 			if (!IRC_WriteStrClient(from, ERR_NOSUCHNICK_MSG, | 			if (!IRC_WriteStrClient(from, ERR_NOSUCHNICK_MSG, | ||||||
| 						Client_ID(from), currentTarget)) | 						Client_ID(from), currentTarget)) | ||||||
| 				return false; | 				return DISCONNECTED; | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		currentTarget = strtok_r(NULL, ",", &lastCurrentTarget); | 		currentTarget = strtok_r(NULL, ",", &lastCurrentTarget); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Alexander Barton
					Alexander Barton