#include "portab.h"
-static char UNUSED id[] = "$Id: irc-oper.c,v 1.18 2005/03/02 16:07:31 alex Exp $";
+static char UNUSED id[] = "$Id: irc-oper.c,v 1.25 2006/04/23 10:37:27 fw Exp $";
#include "imp.h"
#include <assert.h>
#include "channel.h"
#include "irc-write.h"
#include "log.h"
+#include "match.h"
#include "messages.h"
#include "parse.h"
#include "irc-oper.h"
-GLOBAL BOOLEAN
+static bool
+Bad_OperPass(CLIENT *Client, char *errtoken, char *errmsg)
+{
+ Log( LOG_WARNING, "Got invalid OPER from \"%s\": \"%s\" -- %s", Client_Mask( Client ),
+ errtoken, errmsg);
+ IRC_SetPenalty(Client, 3);
+ return IRC_WriteStrClient( Client, ERR_PASSWDMISMATCH_MSG, Client_ID( Client ));
+}
+
+
+GLOBAL bool
IRC_OPER( CLIENT *Client, REQUEST *Req )
{
- INT i;
+ unsigned int i;
assert( Client != NULL );
assert( Req != NULL );
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 ));
- }
+ return Bad_OperPass(Client, Req->argv[0], "not configured");
/* 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 ));
- }
+ return Bad_OperPass(Client, Conf_Oper[i].name, "Bad password");
/* Authorized Mask? */
- if( Conf_Oper[i].mask && (! Match( Conf_Oper[i].mask, Client_Mask( Client ) ))) {
- Log( LOG_WARNING, "Rejected valid OPER for \"%s\": Mask mismatch (got: \"%s\", want: \"%s\")!", Conf_Oper[i].name, Client_Mask( Client ), Conf_Oper[i].mask );
- return IRC_WriteStrClient( Client, ERR_PASSWDMISMATCH_MSG, Client_ID( Client ));
- }
-
+ if( Conf_Oper[i].mask && (! Match( Conf_Oper[i].mask, Client_Mask( Client ) )))
+ return Bad_OperPass(Client, Conf_Oper[i].mask, "hostmask check failed" );
if( ! Client_HasMode( Client, 'o' ))
{
if( ! Client_OperByMe( Client )) Log( LOG_NOTICE|LOG_snotice, "Got valid OPER from \"%s\", user is an IRC operator now.", Client_Mask( Client ));
- Client_SetOperByMe( Client, TRUE );
+ Client_SetOperByMe( Client, true);
return IRC_WriteStrClient( Client, RPL_YOUREOPER_MSG, Client_ID( Client ));
} /* IRC_OPER */
-GLOBAL BOOLEAN
+GLOBAL bool
IRC_DIE( CLIENT *Client, REQUEST *Req )
{
/* Shut down server */
if( Req->argc != 0 ) return IRC_WriteStrClient( Client, ERR_NEEDMOREPARAMS_MSG, Client_ID( Client ), Req->command );
Log( LOG_NOTICE|LOG_snotice, "Got DIE command from \"%s\" ...", Client_Mask( Client ));
- NGIRCd_SignalQuit = TRUE;
+ NGIRCd_SignalQuit = true;
return CONNECTED;
} /* IRC_DIE */
-GLOBAL BOOLEAN
+GLOBAL bool
IRC_REHASH( CLIENT *Client, REQUEST *Req )
{
/* Reload configuration file */
if( Req->argc != 0 ) return IRC_WriteStrClient( Client, ERR_NEEDMOREPARAMS_MSG, Client_ID( Client ), Req->command );
Log( LOG_NOTICE|LOG_snotice, "Got REHASH command from \"%s\" ...", Client_Mask( Client ));
- NGIRCd_SignalRehash = TRUE;
+ NGIRCd_SignalRehash = true;
return CONNECTED;
} /* IRC_REHASH */
-GLOBAL BOOLEAN
+GLOBAL bool
IRC_RESTART( CLIENT *Client, REQUEST *Req )
{
/* Restart IRC server (fork a new process) */
if( Req->argc != 0 ) return IRC_WriteStrClient( Client, ERR_NEEDMOREPARAMS_MSG, Client_ID( Client ), Req->command );
Log( LOG_NOTICE|LOG_snotice, "Got RESTART command from \"%s\" ...", Client_Mask( Client ));
- NGIRCd_SignalRestart = TRUE;
+ NGIRCd_SignalRestart = true;
return CONNECTED;
} /* IRC_RESTART */
-GLOBAL BOOLEAN
+GLOBAL bool
IRC_CONNECT(CLIENT *Client, REQUEST *Req )
{
/* Connect configured or new server */
} /* IRC_CONNECT */
-GLOBAL BOOLEAN
+GLOBAL bool
IRC_DISCONNECT(CLIENT *Client, REQUEST *Req )
{
/* Disconnect and disable configured server */
if( ! Conf_DisableServer( Req->argv[0] )) return IRC_WriteStrClient( Client, ERR_NOSUCHSERVER_MSG, Client_ID( Client ), Req->argv[0] );
/* Are we still connected or were we killed, too? */
- if( Client_GetFromConn( my_conn )) return CONNECTED;
+ if( Conn_GetClient( my_conn )) return CONNECTED;
else return DISCONNECTED;
} /* IRC_CONNECT */