/*
* ngIRCd -- The Next Generation IRC Daemon
- * Copyright (c)2001-2015 Alexander Barton (alex@barton.de) and Contributors.
+ * Copyright (c)2001-2018 Alexander Barton (alex@barton.de) and Contributors.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
}
if (Client_Conn(Client) != NONE) {
- Client_Destroy(Client, NULL, msg, false);
+ Conn_Close(Client_Conn(Client), NULL, msg, false);
return DISCONNECTED;
}
* in this case, and the prefix in Req is NULL.
*
* @param Client The client from which this command has been received or
- * Client_ThisServer() when generated interanlly.
+ * Client_ThisServer() when generated internally.
* @param Req Request structure with prefix and all parameters.
* @return CONNECTED or DISCONNECTED.
*/
/* Do we know such a client in the network? */
c = Client_Search(Nick);
if (!c) {
- LogDebug("Client with nick \"%s\" is unknown, not forwaring.", Nick);
+ LogDebug("Client with nick \"%s\" is unknown, not forwarding.", Nick);
return CONNECTED;
}
* Send help for a given topic to the client.
*
* @param Client The client requesting help.
- * @param Topoc The help topic requested.
+ * @param Topic The help topic requested.
* @return CONNECTED or DISCONNECTED.
*/
static bool
/**
* Send a message to target(s).
*
- * This function is used by IRC_{PRIVMSG|NOTICE|SQUERY} to actualy
+ * This function is used by IRC_{PRIVMSG|NOTICE|SQUERY} to actually
* send the message(s).
*
* @param Client The client from which this command has been received.
#endif
message = Req->argv[1];
+ if (message[0] == '\0') {
+ if (!SendErrors)
+ return CONNECTED;
+ return IRC_WriteErrClient(Client, ERR_NOTEXTTOSEND_MSG,
+ Client_ID(Client));
+ }
+
/* handle msgtarget = msgto *("," msgto) */
currentTarget = strtok_r(currentTarget, ",", &strtok_last);
ngt_UpperStr(Req->command);
goto send_next_target;
}
- if (Client_HasMode(cl, 'C')) {
+ if (Client_HasMode(cl, 'C') &&
+ !Client_HasMode(from, 'o') &&
+ !(Client_Type(from) == CLIENT_SERVER) &&
+ !(Client_Type(from) == CLIENT_SERVICE)) {
cl2chan = Channel_FirstChannelOf(cl);
while (cl2chan) {
chan = Channel_GetChannel(cl2chan);