Send_Message(): really enforce target client type.
This commit is contained in:
parent
0337b1ac1e
commit
74aac88dbf
|
@ -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);
|
||||||
|
|
Loading…
Reference in New Issue