Send_Message(): really enforce target client type.

This commit is contained in:
Alexander Barton 2008-08-16 14:12:03 +02:00
parent 0337b1ac1e
commit 74aac88dbf
1 changed files with 18 additions and 20 deletions

View File

@ -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);