Commit Diff


commit - eccbd97e1f2599bfb76818fe6bc32967ed07e0c7
commit + cccd8fc957e893e250324b65146df8fca4680f11
blob - bc01e093c015ad7340205b879f0b834d8fa5c756
blob + 5006d2ff2b73e58e521c8cdfc409b1a59c8ec036
--- src/ngircd/parse.c
+++ src/ngircd/parse.c
@@ -325,15 +325,20 @@ Validate_Prefix( CONN_ID Idx, REQUEST *Req, bool *Clos
 	}
 
 	/* check if client in prefix is known */
-	c = Client_Search( Req->prefix );
+	c = Client_Search(Req->prefix);
 	if (!c) {
-		Log(LOG_ERR,
-		    "Invalid prefix \"%s\", client not known (connection %d, command \"%s\")!?",
-		    Req->prefix, Idx, Req->command);
-		if (!Conn_WriteStr(Idx,
-				   "ERROR :Invalid prefix \"%s\", client not known",
-				   Req->prefix))
-			*Closed = true;
+		if (Client_Type(client) != CLIENT_SERVER) {
+			Log(LOG_ERR,
+			    "Ignoring command with invalid prefix \"%s\" from \"%s\" (connection %d, command \"%s\")!",
+			    Req->prefix, Client_ID(client), Idx, Req->command);
+			if (!Conn_WriteStr(Idx,
+					   "ERROR :Invalid prefix \"%s\"",
+					   Req->prefix))
+				*Closed = true;
+			IRC_SetPenalty(client, 2);
+		} else
+			LogDebug("Ignoring command with invalid prefix \"%s\" from \"%s\" (connection %d, command \"%s\")!",
+			    Req->prefix, Client_ID(client), Idx, Req->command);
 		return false;
 	}
 
@@ -342,19 +347,16 @@ Validate_Prefix( CONN_ID Idx, REQUEST *Req, bool *Clos
 	if (Client_NextHop(c) != client) {
 		if (Client_Type(c) != CLIENT_SERVER) {
 			Log(LOG_ERR,
-			    "Spoofed prefix \"%s\" from \"%s\" (connection %d, command \"%s\")!",
-			    Req->prefix, Client_Mask(Conn_GetClient(Idx)), Idx,
-			    Req->command);
+			    "Spoofed prefix \"%s\" from \"%s\" (connection %d, command \"%s\"), closing connection!",
+			    Req->prefix, Client_ID(client), Idx, Req->command);
 			Conn_Close(Idx, NULL, "Spoofed prefix", true);
 			*Closed = true;
 		} else {
-			Log(LOG_INFO,
-			    "Ignoring spoofed prefix \"%s\" from \"%s\" (connection %d, command \"%s\").",
-			    Req->prefix, Client_Mask(Conn_GetClient(Idx)), Idx,
-			    Req->command);
+			Log(LOG_WARNING,
+			    "Ignoring command with spoofed prefix \"%s\" from \"%s\" (connection %d, command \"%s\")!",
+			    Req->prefix, Client_ID(client), Idx, Req->command);
 		}
 		return false;
-
 	}
 
 	return true;