X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fngircd%2Firc.c;h=7acd84ee7857fa0a9a3b5e7af54b9384c9547f0f;hb=7207bef418c655107d3076b20dd797418ad82cd7;hp=5325b52aedaa7ef3cd470f9ef09a7a9c3bb2a2d7;hpb=7dba1a0766b35d01cd8892753d1e0dd578ca2cd9;p=ngircd-alex.git diff --git a/src/ngircd/irc.c b/src/ngircd/irc.c index 5325b52a..7acd84ee 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 */ @@ -352,12 +362,8 @@ IRC_KillClient(CLIENT *Client, CLIENT *From, const char *Nick, const char *Reaso return CONNECTED; } - /* Inform other servers */ - IRC_WriteStrServersPrefix(From ? Client : NULL, - From ? From : Client_ThisServer(), - "KILL %s :%s", Nick, Reason); - - if (Client_Type(c) != CLIENT_USER && Client_Type(c) != CLIENT_GOTNICK) { + if (Client_Type(c) != CLIENT_USER && Client_Type(c) != CLIENT_GOTNICK + && Client_Type(c) != CLIENT_SERVICE) { /* Target of this KILL is not a regular user, this is * invalid! So we ignore this case if we received a * regular KILL from the network and try to kill the @@ -378,6 +384,12 @@ IRC_KillClient(CLIENT *Client, CLIENT *From, const char *Nick, const char *Reaso Client_Type(c), Nick); } + /* Inform other servers */ + IRC_WriteStrServersPrefix(From ? Client : NULL, + From ? From : Client_ThisServer(), + "KILL %s :%s", Nick, Reason); + + /* Save ID of this connection */ if (Client) my_conn = Client_Conn(Client); @@ -493,7 +505,6 @@ Option_String(UNUSED CONN_ID Idx) if(options & CONN_ZIP) /* zlib compression enabled */ strlcat(option_txt, "z", sizeof(option_txt)); #endif - LogDebug(" *** %d: %d = %s", Idx, options, option_txt); return option_txt; } /* Option_String */