Module: ngircd.git Branch: master Commit: 15775e67900d914cc174aa80e615fa24d65d115c URL: http://ngircd.barton.de/cgi-bin/gitweb.cgi?p=ngircd.git&a=commit;h=15775...
Author: Alexander Barton alex@barton.de 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.
---
src/ngircd/parse.c | 17 +++++++++++++++-- 1 files changed, 15 insertions(+), 2 deletions(-)
diff --git a/src/ngircd/parse.c b/src/ngircd/parse.c index 8203dd0..31f048c 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