From: Alexander Barton Date: Wed, 9 Sep 2009 21:00:45 +0000 (+0200) Subject: Make sure forwarded CONNECT commands are handled correctly X-Git-Tag: rel-15-rc1~2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=55c04e691d2e069eebf1f2cc7d9992d2510f681f;p=ngircd Make sure forwarded CONNECT commands are handled correctly --- diff --git a/src/ngircd/irc-oper.c b/src/ngircd/irc-oper.c index 68b5eb6f..17b60446 100644 --- a/src/ngircd/irc-oper.c +++ b/src/ngircd/irc-oper.c @@ -184,7 +184,8 @@ IRC_CONNECT(CLIENT * Client, REQUEST * Req) assert(Client != NULL); assert(Req != NULL); - if (!Op_Check(Client, Req)) + if (Client_Type(Client) != CLIENT_SERVER + && !Client_HasMode(Client, 'o')) return Op_NoPrivileges(Client, Req); /* Bad number of parameters? */ @@ -203,7 +204,7 @@ IRC_CONNECT(CLIENT * Client, REQUEST * Req) if (Req->argc == 3 || Req->argc == 6) { /* This CONNECT has a target parameter */ - if (Client_Type(Client) == CLIENT_SERVER) + if (Client_Type(Client) == CLIENT_SERVER && Req->prefix) from = Client_Search(Req->prefix); if (! from) return IRC_WriteStrClient(Client, ERR_NOSUCHNICK_MSG, @@ -230,12 +231,8 @@ IRC_CONNECT(CLIENT * Client, REQUEST * Req) return CONNECTED; } - Log(LOG_NOTICE | LOG_snotice, - "Got CONNECT command from \"%s\" for \"%s\".", Client_Mask(from), - Req->argv[0]); - IRC_SendWallops(Client_ThisServer(), Client_ThisServer(), - "Received CONNECT %s from %s", - Req->argv[0], Client_ID(from)); + if (!Op_Check(from, Req)) + return Op_NoPrivileges(Client, Req); switch (Req->argc) { case 1: @@ -263,6 +260,13 @@ IRC_CONNECT(CLIENT * Client, REQUEST * Req) Req->argv[0]); } + Log(LOG_NOTICE | LOG_snotice, + "Got CONNECT command from \"%s\" for \"%s\".", Client_Mask(from), + Req->argv[0]); + IRC_SendWallops(Client_ThisServer(), Client_ThisServer(), + "Received CONNECT %s from %s", + Req->argv[0], Client_ID(from)); + return CONNECTED; } /* IRC_CONNECT */