diff options
| author | Alexander Barton <alex@barton.de> | 2008-08-16 14:12:03 +0200 |
|---|---|---|
| committer | Alexander Barton <alex@barton.de> | 2008-09-23 11:53:14 +0200 |
| commit | 74aac88dbf674979795a90f855f96883b43d18e6 (patch) | |
| tree | 6cc2d4833a68808fa72009b2f3e378f79c82e090 /src | |
| parent | 0337b1ac1e128661b81901bdf2384e4ee51fa0df (diff) | |
| download | ngircd-74aac88dbf674979795a90f855f96883b43d18e6.tar.gz ngircd-74aac88dbf674979795a90f855f96883b43d18e6.zip | |
Send_Message(): really enforce target client type.
Diffstat (limited to 'src')
| -rw-r--r-- | src/ngircd/irc.c | 38 |
1 files changed, 18 insertions, 20 deletions
diff --git a/src/ngircd/irc.c b/src/ngircd/irc.c index 77cc7c1e..ad9d32c9 100644 --- a/src/ngircd/irc.c +++ b/src/ngircd/irc.c @@ -319,19 +319,19 @@ Send_Message(CLIENT * Client, REQUEST * Req, int ForceType, bool SendErrors) if (Req->argc == 0) { if (!SendErrors) - return true; + return CONNECTED; return IRC_WriteStrClient(Client, ERR_NORECIPIENT_MSG, Client_ID(Client), Req->command); } if (Req->argc == 1) { if (!SendErrors) - return true; + return CONNECTED; return IRC_WriteStrClient(Client, ERR_NOTEXTTOSEND_MSG, Client_ID(Client)); } if (Req->argc > 2) { if (!SendErrors) - return true; + return CONNECTED; return IRC_WriteStrClient(Client, ERR_NEEDMOREPARAMS_MSG, 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 */ if (Client_Type(cl) != ForceType) { if (!SendErrors) - return true; - if (!IRC_WriteStrClient(from, ERR_NOSUCHNICK_MSG, + return CONNECTED; + return IRC_WriteStrClient(from, ERR_NOSUCHNICK_MSG, Client_ID(from), - currentTarget)) - return false; - } else if (SendErrors - && (Client_Type(Client) != CLIENT_SERVER) - && strchr(Client_Modes(cl), 'a')) { + currentTarget); + } + if (SendErrors && (Client_Type(Client) != CLIENT_SERVER) + && strchr(Client_Modes(cl), 'a')) { /* Target is away */ - if (!SendErrors) - return true; - if (!IRC_WriteStrClient - (from, RPL_AWAY_MSG, Client_ID(from), - Client_ID(cl), Client_Away(cl))) + if (!IRC_WriteStrClient(from, RPL_AWAY_MSG, + Client_ID(from), + Client_ID(cl), + Client_Away(cl))) return DISCONNECTED; } 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", Client_ID(cl), Req->argv[1])) - return false; + return DISCONNECTED; } else if (strchr("$#", currentTarget[0]) && strchr(currentTarget, '.')) { /* targetmask */ if (!Send_Message_Mask(from, currentTarget, Req->argv[1], SendErrors)) - return false; + return DISCONNECTED; } else if ((chan = Channel_Search(currentTarget))) { /* channel */ if (!Channel_Write(chan, from, Client, Req->argv[1])) - return false; + return DISCONNECTED; } else { if (!SendErrors) - return true; + return CONNECTED; if (!IRC_WriteStrClient(from, ERR_NOSUCHNICK_MSG, Client_ID(from), currentTarget)) - return false; + return DISCONNECTED; } currentTarget = strtok_r(NULL, ",", &lastCurrentTarget); |