Make sure forwarded CONNECT commands are handled correctly

This commit is contained in:
Alexander Barton 2009-09-09 23:00:45 +02:00
parent 881b9af251
commit 55c04e691d
1 changed files with 12 additions and 8 deletions

View File

@ -184,7 +184,8 @@ IRC_CONNECT(CLIENT * Client, REQUEST * Req)
assert(Client != NULL); assert(Client != NULL);
assert(Req != NULL); assert(Req != NULL);
if (!Op_Check(Client, Req)) if (Client_Type(Client) != CLIENT_SERVER
&& !Client_HasMode(Client, 'o'))
return Op_NoPrivileges(Client, Req); return Op_NoPrivileges(Client, Req);
/* Bad number of parameters? */ /* Bad number of parameters? */
@ -203,7 +204,7 @@ IRC_CONNECT(CLIENT * Client, REQUEST * Req)
if (Req->argc == 3 || Req->argc == 6) { if (Req->argc == 3 || Req->argc == 6) {
/* This CONNECT has a target parameter */ /* 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); from = Client_Search(Req->prefix);
if (! from) if (! from)
return IRC_WriteStrClient(Client, ERR_NOSUCHNICK_MSG, return IRC_WriteStrClient(Client, ERR_NOSUCHNICK_MSG,
@ -230,12 +231,8 @@ IRC_CONNECT(CLIENT * Client, REQUEST * Req)
return CONNECTED; return CONNECTED;
} }
Log(LOG_NOTICE | LOG_snotice, if (!Op_Check(from, Req))
"Got CONNECT command from \"%s\" for \"%s\".", Client_Mask(from), return Op_NoPrivileges(Client, Req);
Req->argv[0]);
IRC_SendWallops(Client_ThisServer(), Client_ThisServer(),
"Received CONNECT %s from %s",
Req->argv[0], Client_ID(from));
switch (Req->argc) { switch (Req->argc) {
case 1: case 1:
@ -263,6 +260,13 @@ IRC_CONNECT(CLIENT * Client, REQUEST * Req)
Req->argv[0]); 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; return CONNECTED;
} /* IRC_CONNECT */ } /* IRC_CONNECT */