]> arthur.barton.de Git - ngircd-alex.git/commitdiff
Immediately shut down connection on receiving ERROR
authorAlexander Barton <alex@barton.de>
Thu, 8 Dec 2016 00:01:40 +0000 (01:01 +0100)
committerAlexander Barton <alex@barton.de>
Thu, 8 Dec 2016 00:01:40 +0000 (01:01 +0100)
Don't wait for the peer to close the connection. This allows us to
forward the ERROR mesage in the network, instead of the very generic
"client closed connection" message.

src/ngircd/irc.c

index 72caf7d576120e6abea27d6f5fb4e1e33866643f..d5e4bde3d70cd1319b82f69641a6d993257be3bc 100644 (file)
@@ -85,6 +85,8 @@ IRC_CheckListTooBig(CLIENT *From, const int Count, const int Limit,
 GLOBAL bool
 IRC_ERROR(CLIENT *Client, REQUEST *Req)
 {
 GLOBAL bool
 IRC_ERROR(CLIENT *Client, REQUEST *Req)
 {
+       char *msg;
+
        assert( Client != NULL );
        assert( Req != NULL );
 
        assert( Client != NULL );
        assert( Req != NULL );
 
@@ -99,12 +101,20 @@ IRC_ERROR(CLIENT *Client, REQUEST *Req)
                return CONNECTED;
        }
 
                return CONNECTED;
        }
 
-       if (Req->argc < 1)
+       if (Req->argc < 1) {
+               msg = "Got ERROR command";
                Log(LOG_NOTICE, "Got ERROR from \"%s\"!",
                    Client_Mask(Client));
                Log(LOG_NOTICE, "Got ERROR from \"%s\"!",
                    Client_Mask(Client));
-       else
+       } else {
+               msg = Req->argv[0];
                Log(LOG_NOTICE, "Got ERROR from \"%s\": \"%s\"!",
                Log(LOG_NOTICE, "Got ERROR from \"%s\": \"%s\"!",
-                   Client_Mask(Client), Req->argv[0]);
+                   Client_Mask(Client), msg);
+       }
+
+       if (Client_Conn(Client) != NONE) {
+               Client_Destroy(Client, NULL, msg, false);
+               return DISCONNECTED;
+       }
 
        return CONNECTED;
 } /* IRC_ERROR */
 
        return CONNECTED;
 } /* IRC_ERROR */