repo: ngircd
action: commit
revision: 
path_from: 
revision_from: 15775e67900d914cc174aa80e615fa24d65d115c:
path_to: 
revision_to: 
git.thebackupbox.net
ngircd
git clone git://git.thebackupbox.net/ngircd
commit 15775e67900d914cc174aa80e615fa24d65d115c
Author: Alexander Barton 
Date:   Mon Mar 21 10:46:09 2011 +0100

    Commands received from other servers must have prefixes

    Make sure that all commands received from other servers do have
    valid prefixes.

    Only exceptions are PING and ERROR commands that can occure without
    prefixes when generated by the remote peer itself.

diff --git a/src/ngircd/parse.c b/src/ngircd/parse.c
index 8203dd0ecb2687617af5f911db820733d239d35d..
index ..31f048cf673408f08737647d66b8aba0bc807612 100644
--- a/src/ngircd/parse.c
+++ b/src/ngircd/parse.c
@@ -276,11 +276,24 @@ Validate_Prefix( CONN_ID Idx, REQUEST *Req, bool *Closed )

 	*Closed = false;

-	if( ! Req->prefix ) return true;
-
 	client = Conn_GetClient( Idx );
 	assert( client != NULL );

+	if (!Req->prefix && Client_Type(client) == CLIENT_SERVER
+	    && strcasecmp(Req->command, "ERROR") != 0
+	    && strcasecmp(Req->command, "PING") != 0)
+	{
+		Log(LOG_ERR,
+		    "Received command without prefix (connection %d, command \"%s\")!?",
+		    Idx, Req->command);
+		if (!Conn_WriteStr(Idx, "ERROR :Prefix missing"))
+			*Closed = true;
+		return false;
+	}
+
+	if (!Req->prefix)
+		return true;
+
 	/* only validate if this connection is already registered */
 	if (Client_Type(client) != CLIENT_USER
 	    && Client_Type(client) != CLIENT_SERVER

-----END OF PAGE-----