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.
This commit is contained in:
Alexander Barton 2011-03-21 10:46:09 +01:00
parent 62f705f97e
commit 15775e6790
1 changed files with 15 additions and 2 deletions

View File

@ -276,11 +276,24 @@ Validate_Prefix( CONN_ID Idx, REQUEST *Req, bool *Closed )
*Closed = false; *Closed = false;
if( ! Req->prefix ) return true;
client = Conn_GetClient( Idx ); client = Conn_GetClient( Idx );
assert( client != NULL ); 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 */ /* only validate if this connection is already registered */
if (Client_Type(client) != CLIENT_USER if (Client_Type(client) != CLIENT_USER
&& Client_Type(client) != CLIENT_SERVER && Client_Type(client) != CLIENT_SERVER