]> arthur.barton.de Git - ngircd-alex.git/blobdiff - src/ngircd/irc.c
Update Copyright notices for 2013
[ngircd-alex.git] / src / ngircd / irc.c
index ceb649ecf350159d1db1bc969d0a5bb496372a2a..a678f9048e68d0c27b43d55533e333621d730543 100644 (file)
@@ -81,6 +81,17 @@ IRC_ERROR( CLIENT *Client, REQUEST *Req )
        assert( Client != NULL );
        assert( Req != NULL );
 
+       if (Client_Type(Client) != CLIENT_GOTPASS
+           && Client_Type(Client) != CLIENT_GOTPASS_2813
+           && Client_Type(Client) != CLIENT_UNKNOWNSERVER
+           && Client_Type(Client) != CLIENT_SERVER
+           && Client_Type(Client) != CLIENT_SERVICE) {
+               LogDebug("Ignored ERROR command from \"%s\" ...",
+                        Client_Mask(Client));
+               IRC_SetPenalty(Client, 2);
+               return CONNECTED;
+       }
+
        if (Req->argc < 1)
                Log(LOG_NOTICE, "Got ERROR from \"%s\"!",
                    Client_Mask(Client));
@@ -457,7 +468,7 @@ Send_Message(CLIENT * Client, REQUEST * Req, int ForceType, bool SendErrors)
                                if (nick != NULL && host != NULL) {
                                        if (strcasecmp(nick, Client_ID(cl)) == 0 &&
                                            strcasecmp(user, Client_User(cl)) == 0 &&
-                                           strcasecmp(host, Client_HostnameCloaked(cl)) == 0)
+                                           strcasecmp(host, Client_HostnameDisplayed(cl)) == 0)
                                                break;
                                        else
                                                continue;
@@ -465,7 +476,7 @@ Send_Message(CLIENT * Client, REQUEST * Req, int ForceType, bool SendErrors)
                                if (strcasecmp(user, Client_User(cl)) != 0)
                                        continue;
                                if (host != NULL && strcasecmp(host,
-                                               Client_HostnameCloaked(cl)) != 0)
+                                               Client_HostnameDisplayed(cl)) != 0)
                                        continue;
                                if (server != NULL && strcasecmp(server,
                                                Client_ID(Client_Introducer(cl))) != 0)
@@ -500,6 +511,17 @@ Send_Message(CLIENT * Client, REQUEST * Req, int ForceType, bool SendErrors)
                                Req->command = "PRIVMSG";
                        }
 #endif
+                       if (Client_HasMode(cl, 'b') &&
+                           !Client_HasMode(from, 'R') &&
+                           !Client_HasMode(from, 'o') &&
+                           !(Client_Type(from) == CLIENT_SERVER) &&
+                           !(Client_Type(from) == CLIENT_SERVICE)) {
+                               if (SendErrors && !IRC_WriteStrClient(from,
+                                               ERR_NONONREG_MSG,
+                                               Client_ID(from), Client_ID(cl)))
+                                       return DISCONNECTED;
+                               goto send_next_target;
+                       }
 
                        if (Client_HasMode(cl, 'C')) {
                                cl2chan = Channel_FirstChannelOf(cl);