commit 5063de59b152db79827ed9ef7d1e31fa60fa6cc5 from: Alexander Barton date: Mon Jul 29 20:35:33 2002 UTC - Prefixe werden nur noch bei reg. Verbindungen validiert, ansonsten ignoriert. commit - e0ed3aa1416037cc83996a9a30ff76863975c9c6 commit + 5063de59b152db79827ed9ef7d1e31fa60fa6cc5 blob - 54b022d1fd90566e798543a4ad4bbed7869732ee blob + 5fbb66829051c12937be619ba7201cd04a128851 --- src/ngircd/parse.c +++ src/ngircd/parse.c @@ -9,7 +9,7 @@ * Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste * der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS. * - * $Id: parse.c,v 1.34 2002/07/26 21:12:24 alex Exp $ + * $Id: parse.c,v 1.35 2002/07/29 20:35:33 alex Exp $ * * parse.c: Parsen der Client-Anfragen */ @@ -181,16 +181,29 @@ Init_Request( REQUEST *Req ) LOCAL BOOLEAN Validate_Prefix( CONN_ID Idx, REQUEST *Req, BOOLEAN *Closed ) { - CLIENT *c; + CLIENT *client, *c; assert( Idx >= 0 ); assert( Req != NULL ); *Closed = FALSE; - + /* ist ueberhaupt ein Prefix vorhanden? */ if( ! Req->prefix ) return TRUE; + /* Client-Struktur der Connection ermitteln */ + client = Client_GetFromConn( Idx ); + assert( client != NULL ); + + /* nur validieren, wenn bereits registrierte Verbindung */ + if(( Client_Type( client ) != CLIENT_USER ) && ( Client_Type( client ) != CLIENT_SERVER ) && ( Client_Type( client ) != CLIENT_SERVICE )) + { + /* noch nicht registrierte Verbindung. + * Das Prefix wird ignoriert. */ + Req->prefix = NULL; + return TRUE; + } + /* pruefen, ob der im Prefix angegebene Client bekannt ist */ c = Client_Search( Req->prefix ); if( ! c ) @@ -200,11 +213,11 @@ Validate_Prefix( CONN_ID Idx, REQUEST *Req, BOOLEAN *C if( ! Conn_WriteStr( Idx, "ERROR :Invalid prefix, client not known!?" )) *Closed = TRUE; return FALSE; } - + /* pruefen, ob der Client mit dem angegebenen Prefix in Richtung * des Senders liegt, d.h. sicherstellen, dass das Prefix nicht * gefaelscht ist */ - if( Client_NextHop( c ) != Client_GetFromConn( Idx )) + if( Client_NextHop( c ) != client ) { /* das angegebene Prefix ist aus dieser Richtung, also * aus der gegebenen Connection, ungueltig! */