]> arthur.barton.de Git - ngircd-alex.git/blobdiff - src/ngircd/parse.c
- SQUIT wird nicht mehr zweimal fuer einen Server verschickt.
[ngircd-alex.git] / src / ngircd / parse.c
index 3357dd8fa2990dd8f32168546cc6ac82e5aa9d0f..1a81b62950572d145408c2c0fd87d368c0cce09b 100644 (file)
@@ -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.44 2002/11/22 16:36:02 alex Exp $
+ * $Id: parse.c,v 1.47 2002/11/28 11:02:50 alex Exp $
  *
  * parse.c: Parsen der Client-Anfragen
  */
@@ -101,8 +101,6 @@ Parse_Request( CONN_ID Idx, CHAR *Request )
        }
        else start = Request;
 
-       if( ! Validate_Prefix( Idx, &req, &closed )) return ! closed;
-
        /* Befehl */
        ptr = strchr( start, ' ' );
        if( ptr )
@@ -116,8 +114,6 @@ Parse_Request( CONN_ID Idx, CHAR *Request )
        }
        req.command = start;
 
-       if( ! Validate_Command( Idx, &req, &closed )) return ! closed;
-
        /* Argumente, Parameter */
        if( ptr )
        {
@@ -156,6 +152,9 @@ Parse_Request( CONN_ID Idx, CHAR *Request )
                }
        }
 
+       /* Daten validieren */
+       if( ! Validate_Prefix( Idx, &req, &closed )) return ! closed;
+       if( ! Validate_Command( Idx, &req, &closed )) return ! closed;
        if( ! Validate_Args( Idx, &req, &closed )) return ! closed;
 
        return Handle_Request( Idx, &req );
@@ -209,7 +208,7 @@ Validate_Prefix( CONN_ID Idx, REQUEST *Req, BOOLEAN *Closed )
        if( ! c )
        {
                /* im Prefix angegebener Client ist nicht bekannt */
-               Log( LOG_ERR, "Invalid prefix \"%s\", client not known (connection %d)!?", Req->prefix, Idx );
+               Log( LOG_ERR, "Invalid prefix \"%s\", client not known (connection %d, command %s)!?", Req->prefix, Idx, Req->command );
                if( ! Conn_WriteStr( Idx, "ERROR :Invalid prefix \"%s\", client not known!?", Req->prefix )) *Closed = TRUE;
                return FALSE;
        }
@@ -221,7 +220,7 @@ Validate_Prefix( CONN_ID Idx, REQUEST *Req, BOOLEAN *Closed )
        {
                /* das angegebene Prefix ist aus dieser Richtung, also
                 * aus der gegebenen Connection, ungueltig! */
-               Log( LOG_ERR, "Spoofed prefix \"%s\" from \"%s\" (connection %d)!", Req->prefix, Client_Mask( Client_GetFromConn( Idx )), Idx );
+               Log( LOG_ERR, "Spoofed prefix \"%s\" from \"%s\" (connection %d, command %s)!", Req->prefix, Client_Mask( Client_GetFromConn( Idx )), Idx, Req->command );
                Conn_Close( Idx, NULL, "Spoofed prefix", TRUE );
                *Closed = TRUE;
                return FALSE;
@@ -340,16 +339,18 @@ Handle_Request( CONN_ID Idx, REQUEST *Req )
        else if( strcasecmp( Req->command, "PONG" ) == 0 ) return IRC_PONG( client, Req );
        else if( strcasecmp( Req->command, "PRIVMSG" ) == 0 ) return IRC_PRIVMSG( client, Req );
        else if( strcasecmp( Req->command, "QUIT" ) == 0 ) return IRC_QUIT( client, Req );
-       else if( strcasecmp( Req->command, "RELOAD" ) == 0 ) return IRC_RELOAD( client, Req );
+       else if( strcasecmp( Req->command, "REHASH" ) == 0 ) return IRC_REHASH( client, Req );
        else if( strcasecmp( Req->command, "RESTART" ) == 0 ) return IRC_RESTART( client, Req );
        else if( strcasecmp( Req->command, "SERVER" ) == 0 ) return IRC_SERVER( client, Req );
        else if( strcasecmp( Req->command, "SQUIT" ) == 0 ) return IRC_SQUIT( client, Req );
+       else if( strcasecmp( Req->command, "TIME" ) == 0 ) return IRC_TIME( client, Req );
        else if( strcasecmp( Req->command, "TOPIC" ) == 0 ) return IRC_TOPIC( client, Req );
        else if( strcasecmp( Req->command, "USER" ) == 0 ) return IRC_USER( client, Req );
        else if( strcasecmp( Req->command, "USERHOST" ) == 0 ) return IRC_USERHOST( client, Req );
        else if( strcasecmp( Req->command, "VERSION" ) == 0 ) return IRC_VERSION( client, Req );
        else if( strcasecmp( Req->command, "WHO" ) == 0 ) return IRC_WHO( client, Req );
        else if( strcasecmp( Req->command, "WHOIS" ) == 0 ) return IRC_WHOIS( client, Req );
+       else if( strcasecmp( Req->command, "WHOWAS" ) == 0 ) return IRC_WHOWAS( client, Req );
 #ifdef IRCPLUS
        else if( strcasecmp( Req->command, "CHANINFO" ) == 0 ) return IRC_CHANINFO( client, Req );
 #endif