From: Alexander Barton Date: Mon, 21 Mar 2011 09:46:09 +0000 (+0100) Subject: Commands received from other servers must have prefixes X-Git-Tag: rel-18-rc1~33 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=15775e679;p=ngircd 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 8203dd0e..31f048cf 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