- if( Req->argc != 2 ) return IRC_WriteStrClient( Client, ERR_NEEDMOREPARAMS_MSG, Client_ID( Client ), Req->command );
-
- /* Operator suchen */
- for( i = 0; i < Conf_Oper_Count; i++)
- {
- if( Conf_Oper[i].name[0] && Conf_Oper[i].pwd[0] && ( strcmp( Conf_Oper[i].name, Req->argv[0] ) == 0 )) break;
- }
- if( i >= Conf_Oper_Count )
- {
- Log( LOG_WARNING, "Got invalid OPER from \"%s\": Name \"%s\" not configured!", Client_Mask( Client ), Req->argv[0] );
- return IRC_WriteStrClient( Client, ERR_PASSWDMISMATCH_MSG, Client_ID( Client ));
- }
-
- /* Stimmt das Passwort? */
- if( strcmp( Conf_Oper[i].pwd, Req->argv[1] ) != 0 )
- {
- Log( LOG_WARNING, "Got invalid OPER from \"%s\": Bad password for \"%s\"!", Client_Mask( Client ), Conf_Oper[i].name );
- return IRC_WriteStrClient( Client, ERR_PASSWDMISMATCH_MSG, Client_ID( Client ));
- }
-
- if( ! Client_HasMode( Client, 'o' ))
- {
- /* noch kein o-Mode gesetzt */
- Client_ModeAdd( Client, 'o' );
- if( ! IRC_WriteStrRelated( Client, "MODE %s :+o", Client_ID( Client ))) return DISCONNECTED;
- IRC_WriteStrServersPrefix( NULL, Client, "MODE %s :+o", Client_ID( Client ));
- }
-
- if( ! Client_OperByMe( Client )) Log( LOG_NOTICE, "Got valid OPER from \"%s\", user is an IRC operator now.", Client_Mask( Client ));
-
- Client_SetOperByMe( Client, TRUE );
- return IRC_WriteStrClient( Client, RPL_YOUREOPER_MSG, Client_ID( Client ));
-} /* IRC_OPER */
-
-
-GLOBAL BOOLEAN IRC_DIE( CLIENT *Client, REQUEST *Req )
-{
- assert( Client != NULL );
- assert( Req != NULL );
-
- if( Client_Type( Client ) != CLIENT_USER ) return IRC_WriteStrClient( Client, ERR_NOTREGISTERED_MSG, Client_ID( Client ));
-
- /* Falsche Anzahl Parameter? */
- if( Req->argc != 0 ) return IRC_WriteStrClient( Client, ERR_NEEDMOREPARAMS_MSG, Client_ID( Client ), Req->command );
-
- if(( ! Client_HasMode( Client, 'o' )) || ( ! Client_OperByMe( Client ))) return IRC_WriteStrClient( Client, ERR_NOPRIVILEGES_MSG, Client_ID( Client ));
-
- Log( LOG_NOTICE, "Got DIE command from \"%s\", going down!", Client_Mask( Client ));
- NGIRCd_Quit = TRUE;
- return CONNECTED;
-} /* IRC_DIE */
-
-
-GLOBAL BOOLEAN IRC_RESTART( CLIENT *Client, REQUEST *Req )
-{
- assert( Client != NULL );
- assert( Req != NULL );
-
- if( Client_Type( Client ) != CLIENT_USER ) return IRC_WriteStrClient( Client, ERR_NOTREGISTERED_MSG, Client_ID( Client ));
-
- /* Falsche Anzahl Parameter? */
- if( Req->argc != 0 ) return IRC_WriteStrClient( Client, ERR_NEEDMOREPARAMS_MSG, Client_ID( Client ), Req->command );
-
- if(( ! Client_HasMode( Client, 'o' )) || ( ! Client_OperByMe( Client ))) return IRC_WriteStrClient( Client, ERR_NOPRIVILEGES_MSG, Client_ID( Client ));
-
- Log( LOG_NOTICE, "Got RESTART command from \"%s\", going down!", Client_Mask( Client ));
- NGIRCd_Restart = TRUE;
- return CONNECTED;
-} /* IRC_RESTART */
-
-
-GLOBAL BOOLEAN IRC_NAMES( CLIENT *Client, REQUEST *Req )
-{
- CHAR rpl[COMMAND_LEN];
- CLIENT *c;
-
- assert( Client != NULL );
- assert( Req != NULL );
-
- if( Client_Type( Client ) != CLIENT_USER ) return IRC_WriteStrClient( Client, ERR_NOTREGISTERED_MSG, Client_ID( Client ));
-
- /* Falsche Anzahl Parameter? */
- if( Req->argc != 0 ) return IRC_WriteStrClient( Client, ERR_NEEDMOREPARAMS_MSG, Client_ID( Client ), Req->command );
-
- /* Noch alle User ausgeben, die in keinem Channel sind */
- rpl[0] = '\0';
- c = Client_First( );
- while( c )
- {
- if( Client_Type( c ) == CLIENT_USER )
- {
- /* Okay, das ist ein User */
- strcat( rpl, Client_ID( c ));
- strcat( rpl, " " );
- }
-
- /* Antwort zu lang? Splitten. */
- if( strlen( rpl ) > 480 )
- {
- if( rpl[strlen( rpl ) - 1] == ' ' ) rpl[strlen( rpl ) - 1] = '\0';
- if( ! IRC_WriteStrClient( Client, RPL_NAMREPLY_MSG, Client_ID( Client ), "*", "*", rpl )) return DISCONNECTED;
- rpl[0] = '\0';
- }
-
- c = Client_Next( c );
- }
- if( rpl[0] )
- {
- /* es wurden User gefunden */
- if( rpl[strlen( rpl ) - 1] == ' ' ) rpl[strlen( rpl ) - 1] = '\0';
- if( ! IRC_WriteStrClient( Client, RPL_NAMREPLY_MSG, Client_ID( Client ), "*", "*", rpl )) return DISCONNECTED;
- }
- return IRC_WriteStrClient( Client, RPL_ENDOFNAMES_MSG, Client_ID( Client ), "*" );
-} /* IRC_NAMES */
-
-
-GLOBAL BOOLEAN IRC_ISON( CLIENT *Client, REQUEST *Req )
-{
- CHAR rpl[COMMAND_LEN];
- CLIENT *c;
- CHAR *ptr;
- INT i;
-
- assert( Client != NULL );
- assert( Req != NULL );
-
- if( Client_Type( Client ) != CLIENT_USER ) return IRC_WriteStrClient( Client, ERR_NOTREGISTERED_MSG, Client_ID( Client ));
-
- /* Falsche Anzahl Parameter? */
- if(( Req->argc < 1 )) return IRC_WriteStrClient( Client, ERR_NEEDMOREPARAMS_MSG, Client_ID( Client ), Req->command );
-
- strcpy( rpl, RPL_ISON_MSG );
- for( i = 0; i < Req->argc; i++ )
- {
- ptr = strtok( Req->argv[i], " " );
- while( ptr )
- {
- ngt_TrimStr( ptr );
- c = Client_GetFromID( ptr );
- if( c && ( Client_Type( c ) == CLIENT_USER ))
- {
- /* Dieser Nick ist "online" */
- strcat( rpl, ptr );
- strcat( rpl, " " );
- }
- ptr = strtok( NULL, " " );
- }
- }
- if( rpl[strlen( rpl ) - 1] == ' ' ) rpl[strlen( rpl ) - 1] = '\0';
-
- return IRC_WriteStrClient( Client, rpl, Client_ID( Client ) );
-} /* IRC_ISON */
-
-
-GLOBAL BOOLEAN IRC_WHOIS( CLIENT *Client, REQUEST *Req )
-{
- CLIENT *from, *target, *c;
- CHAR *ptr = NULL;
-
- assert( Client != NULL );
- assert( Req != NULL );
-
- if(( Client_Type( Client ) != CLIENT_USER ) && ( Client_Type( Client ) != CLIENT_SERVER )) return IRC_WriteStrClient( Client, ERR_NOTREGISTERED_MSG, Client_ID( Client ));
-
- /* Falsche Anzahl Parameter? */
- if(( Req->argc < 1 ) || ( Req->argc > 2 )) return IRC_WriteStrClient( Client, ERR_NEEDMOREPARAMS_MSG, Client_ID( Client ), Req->command );
-
- /* Client suchen */
- c = Client_GetFromID( Req->argv[Req->argc - 1] );
- if(( ! c ) || ( Client_Type( c ) != CLIENT_USER )) return IRC_WriteStrClient( Client, ERR_NOSUCHNICK_MSG, Client_ID( Client ), Req->argv[Req->argc - 1] );