]> arthur.barton.de Git - ngircd-alex.git/blobdiff - src/ngircd/irc.c
ngIRCd Release 27
[ngircd-alex.git] / src / ngircd / irc.c
index dc3b2f2ecf120a4147074cae869f5406d6c9fb98..3b098d0aa1095ecbe99c41fafb128c991468f269 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * 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
@@ -112,7 +112,7 @@ IRC_ERROR(CLIENT *Client, REQUEST *Req)
        }
 
        if (Client_Conn(Client) != NONE) {
-               Client_Destroy(Client, NULL, msg, false);
+               Conn_Close(Client_Conn(Client), NULL, msg, false);
                return DISCONNECTED;
        }
 
@@ -131,7 +131,7 @@ IRC_ERROR(CLIENT *Client, REQUEST *Req)
  * 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.
  */
@@ -358,7 +358,7 @@ IRC_KillClient(CLIENT *Client, CLIENT *From, const char *Nick, const char *Reaso
        /* 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;
        }
 
@@ -415,7 +415,7 @@ IRC_KillClient(CLIENT *Client, CLIENT *From, const char *Nick, const char *Reaso
  * 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
@@ -514,7 +514,7 @@ Option_String(UNUSED CONN_ID Idx)
 /**
  * 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.
@@ -572,6 +572,13 @@ Send_Message(CLIENT * Client, REQUEST * Req, int ForceType, bool SendErrors)
 #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);
@@ -694,7 +701,10 @@ Send_Message(CLIENT * Client, REQUEST * Req, int ForceType, bool SendErrors)
                                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);