repo: ngircd
action: commit
revision: 
path_from: 
revision_from: 77861f6fe24a7a6be85c6f8112f08172ad7ffa67:
path_to: 
revision_to: 
git.thebackupbox.net
ngircd
git clone git://git.thebackupbox.net/ngircd
commit 77861f6fe24a7a6be85c6f8112f08172ad7ffa67
Author: Alexander Barton 
Date:   Thu Dec 8 01:01:40 2016 +0100

    Immediately shut down connection on receiving ERROR

    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.

diff --git a/src/ngircd/irc.c b/src/ngircd/irc.c
index 72caf7d576120e6abea27d6f5fb4e1e33866643f..
index ..d5e4bde3d70cd1319b82f69641a6d993257be3bc 100644
--- a/src/ngircd/irc.c
+++ b/src/ngircd/irc.c
@@ -85,6 +85,8 @@ IRC_CheckListTooBig(CLIENT *From, const int Count, const int Limit,
 GLOBAL bool
 IRC_ERROR(CLIENT *Client, REQUEST *Req)
 {
+	char *msg;
+
 	assert( Client != NULL );
 	assert( Req != NULL );

@@ -99,12 +101,20 @@ IRC_ERROR(CLIENT *Client, REQUEST *Req)
 		return CONNECTED;
 	}

-	if (Req->argc < 1)
+	if (Req->argc < 1) {
+		msg = "Got ERROR command";
 		Log(LOG_NOTICE, "Got ERROR from \"%s\"!",
 		    Client_Mask(Client));
-	else
+	} else {
+		msg = Req->argv[0];
 		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 */

-----END OF PAGE-----