mirror of
https://github.com/osmarks/ngircd.git
synced 2025-01-15 18:15:40 +00:00
- New commands CONNECT and DISCONNECT.
- Validate operator status before syntax checks.
This commit is contained in:
parent
01b58a0582
commit
4e485443d3
@ -14,10 +14,11 @@
|
|||||||
|
|
||||||
#include "portab.h"
|
#include "portab.h"
|
||||||
|
|
||||||
static char UNUSED id[] = "$Id: irc-oper.c,v 1.16 2002/12/30 00:01:45 alex Exp $";
|
static char UNUSED id[] = "$Id: irc-oper.c,v 1.17 2002/12/31 16:10:55 alex Exp $";
|
||||||
|
|
||||||
#include "imp.h"
|
#include "imp.h"
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include "ngircd.h"
|
#include "ngircd.h"
|
||||||
@ -82,14 +83,17 @@ IRC_OPER( CLIENT *Client, REQUEST *Req )
|
|||||||
GLOBAL BOOLEAN
|
GLOBAL BOOLEAN
|
||||||
IRC_DIE( CLIENT *Client, REQUEST *Req )
|
IRC_DIE( CLIENT *Client, REQUEST *Req )
|
||||||
{
|
{
|
||||||
|
/* Shut down server */
|
||||||
|
|
||||||
assert( Client != NULL );
|
assert( Client != NULL );
|
||||||
assert( Req != NULL );
|
assert( Req != NULL );
|
||||||
|
|
||||||
/* Falsche Anzahl Parameter? */
|
/* Not a local IRC operator? */
|
||||||
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 ));
|
if(( ! Client_HasMode( Client, 'o' )) || ( ! Client_OperByMe( Client ))) return IRC_WriteStrClient( Client, ERR_NOPRIVILEGES_MSG, Client_ID( Client ));
|
||||||
|
|
||||||
|
/* Bad number of parameters? */
|
||||||
|
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 ));
|
Log( LOG_NOTICE|LOG_snotice, "Got DIE command from \"%s\" ...", Client_Mask( Client ));
|
||||||
NGIRCd_SignalQuit = TRUE;
|
NGIRCd_SignalQuit = TRUE;
|
||||||
return CONNECTED;
|
return CONNECTED;
|
||||||
@ -99,14 +103,17 @@ IRC_DIE( CLIENT *Client, REQUEST *Req )
|
|||||||
GLOBAL BOOLEAN
|
GLOBAL BOOLEAN
|
||||||
IRC_REHASH( CLIENT *Client, REQUEST *Req )
|
IRC_REHASH( CLIENT *Client, REQUEST *Req )
|
||||||
{
|
{
|
||||||
|
/* Reload configuration file */
|
||||||
|
|
||||||
assert( Client != NULL );
|
assert( Client != NULL );
|
||||||
assert( Req != NULL );
|
assert( Req != NULL );
|
||||||
|
|
||||||
/* Falsche Anzahl Parameter? */
|
/* Not a local IRC operator? */
|
||||||
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 ));
|
if(( ! Client_HasMode( Client, 'o' )) || ( ! Client_OperByMe( Client ))) return IRC_WriteStrClient( Client, ERR_NOPRIVILEGES_MSG, Client_ID( Client ));
|
||||||
|
|
||||||
|
/* Bad number of parameters? */
|
||||||
|
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 ));
|
Log( LOG_NOTICE|LOG_snotice, "Got REHASH command from \"%s\" ...", Client_Mask( Client ));
|
||||||
NGIRCd_SignalRehash = TRUE;
|
NGIRCd_SignalRehash = TRUE;
|
||||||
|
|
||||||
@ -117,14 +124,17 @@ IRC_REHASH( CLIENT *Client, REQUEST *Req )
|
|||||||
GLOBAL BOOLEAN
|
GLOBAL BOOLEAN
|
||||||
IRC_RESTART( CLIENT *Client, REQUEST *Req )
|
IRC_RESTART( CLIENT *Client, REQUEST *Req )
|
||||||
{
|
{
|
||||||
|
/* Restart IRC server (fork a new process) */
|
||||||
|
|
||||||
assert( Client != NULL );
|
assert( Client != NULL );
|
||||||
assert( Req != NULL );
|
assert( Req != NULL );
|
||||||
|
|
||||||
/* Falsche Anzahl Parameter? */
|
/* Not a local IRC operator? */
|
||||||
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 ));
|
if(( ! Client_HasMode( Client, 'o' )) || ( ! Client_OperByMe( Client ))) return IRC_WriteStrClient( Client, ERR_NOPRIVILEGES_MSG, Client_ID( Client ));
|
||||||
|
|
||||||
|
/* Bad number of parameters? */
|
||||||
|
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 ));
|
Log( LOG_NOTICE|LOG_snotice, "Got RESTART command from \"%s\" ...", Client_Mask( Client ));
|
||||||
NGIRCd_SignalRestart = TRUE;
|
NGIRCd_SignalRestart = TRUE;
|
||||||
return CONNECTED;
|
return CONNECTED;
|
||||||
@ -134,20 +144,64 @@ IRC_RESTART( CLIENT *Client, REQUEST *Req )
|
|||||||
GLOBAL BOOLEAN
|
GLOBAL BOOLEAN
|
||||||
IRC_CONNECT(CLIENT *Client, REQUEST *Req )
|
IRC_CONNECT(CLIENT *Client, REQUEST *Req )
|
||||||
{
|
{
|
||||||
/* Vorlaeufige Version zu Debug-Zwecken: es wird einfach
|
/* Connect configured or new server */
|
||||||
* der "passive mode" aufgehoben, mehr passiert nicht ... */
|
|
||||||
|
|
||||||
assert( Client != NULL );
|
assert( Client != NULL );
|
||||||
assert( Req != NULL );
|
assert( Req != NULL );
|
||||||
|
|
||||||
/* Falsche Anzahl Parameter? */
|
/* Not a local IRC operator? */
|
||||||
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 ));
|
if(( ! Client_HasMode( Client, 'o' )) || ( ! Client_OperByMe( Client ))) return IRC_WriteStrClient( Client, ERR_NOPRIVILEGES_MSG, Client_ID( Client ));
|
||||||
|
|
||||||
Log( LOG_NOTICE|LOG_snotice, "Got CONNECT command from \"%s\".", Client_Mask( Client ));
|
/* Bad number of parameters? */
|
||||||
NGIRCd_Passive = FALSE;
|
if(( Req->argc != 2 ) && ( Req->argc != 5 )) return IRC_WriteStrClient( Client, ERR_NEEDMOREPARAMS_MSG, Client_ID( Client ), Req->command );
|
||||||
|
|
||||||
|
/* Invalid port number? */
|
||||||
|
if( atoi( Req->argv[1] ) < 1 ) return IRC_WriteStrClient( Client, ERR_NEEDMOREPARAMS_MSG, Client_ID( Client ), Req->command );
|
||||||
|
|
||||||
|
Log( LOG_NOTICE|LOG_snotice, "Got CONNECT command from \"%s\" for \"%s\".", Client_Mask( Client ), Req->argv[0]);
|
||||||
|
|
||||||
|
if( Req->argc == 2 )
|
||||||
|
{
|
||||||
|
/* Connect configured server */
|
||||||
|
if( ! Conf_EnableServer( Req->argv[0], atoi( Req->argv[1] ))) return IRC_WriteStrClient( Client, ERR_NOSUCHSERVER_MSG, Client_ID( Client ), Req->argv[0] );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Add server */
|
||||||
|
if( ! Conf_AddServer( Req->argv[0], atoi( Req->argv[1] ), Req->argv[2], Req->argv[3], Req->argv[4] )) return IRC_WriteStrClient( Client, ERR_NOSUCHSERVER_MSG, Client_ID( Client ), Req->argv[0] );
|
||||||
|
}
|
||||||
return CONNECTED;
|
return CONNECTED;
|
||||||
} /* IRC_CONNECT */
|
} /* IRC_CONNECT */
|
||||||
|
|
||||||
|
|
||||||
|
GLOBAL BOOLEAN
|
||||||
|
IRC_DISCONNECT(CLIENT *Client, REQUEST *Req )
|
||||||
|
{
|
||||||
|
/* Disconnect and disable configured server */
|
||||||
|
|
||||||
|
CONN_ID my_conn;
|
||||||
|
|
||||||
|
assert( Client != NULL );
|
||||||
|
assert( Req != NULL );
|
||||||
|
|
||||||
|
/* Not a local IRC operator? */
|
||||||
|
if(( ! Client_HasMode( Client, 'o' )) || ( ! Client_OperByMe( Client ))) return IRC_WriteStrClient( Client, ERR_NOPRIVILEGES_MSG, Client_ID( Client ));
|
||||||
|
|
||||||
|
/* Bad number of parameters? */
|
||||||
|
if( Req->argc != 1 ) return IRC_WriteStrClient( Client, ERR_NEEDMOREPARAMS_MSG, Client_ID( Client ), Req->command );
|
||||||
|
|
||||||
|
Log( LOG_NOTICE|LOG_snotice, "Got DISCONNECT command from \"%s\" for0 \"%s\".", Client_Mask( Client ), Req->argv[0]);
|
||||||
|
|
||||||
|
/* Save ID of this connection */
|
||||||
|
my_conn = Client_Conn( Client );
|
||||||
|
|
||||||
|
/* Connect 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;
|
||||||
|
else return DISCONNECTED;
|
||||||
|
} /* IRC_CONNECT */
|
||||||
|
|
||||||
|
|
||||||
/* -eof- */
|
/* -eof- */
|
||||||
|
Loading…
Reference in New Issue
Block a user