Commit Diff


commit - 881b9af2512a9707cdd599f84628a03c4e22cf2b
commit + 55c04e691d2e069eebf1f2cc7d9992d2510f681f
blob - 68b5eb6fb5f559fe47252a9e34949f01f125ff91
blob + 17b604465843c6d4f9db12040e3a643f573155f2
--- src/ngircd/irc-oper.c
+++ 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 */