ngircd

Free, portable and lightweight Internet Relay Chat server http://ngircd.barton.de/
Log | Files | Refs | README | LICENSE

commit 77861f6fe24a7a6be85c6f8112f08172ad7ffa67
parent e9e3df27b70b7d3c7de2f0208431c8b8803a4da9
Author: Alexander Barton <alex@barton.de>
Date:   Thu,  8 Dec 2016 01:01:40 +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.

Diffstat:
Msrc/ngircd/irc.c | 16+++++++++++++---
1 file changed, 13 insertions(+), 3 deletions(-)

diff --git 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 */