Allow DIE to send a message to all locally connected clients. Closes bug #48.

This commit is contained in:
Alexander Barton 2006-07-23 15:43:18 +00:00
parent 9a2d4eef44
commit 3e8978d836
1 changed files with 35 additions and 10 deletions

View File

@ -14,7 +14,7 @@
#include "portab.h"
static char UNUSED id[] = "$Id: irc-oper.c,v 1.26 2006/05/10 21:24:01 alex Exp $";
static char UNUSED id[] = "$Id: irc-oper.c,v 1.27 2006/07/23 15:43:18 alex Exp $";
#include "imp.h"
#include <assert.h>
@ -23,7 +23,7 @@ static char UNUSED id[] = "$Id: irc-oper.c,v 1.26 2006/05/10 21:24:01 alex Exp $
#include "ngircd.h"
#include "resolve.h"
#include "conn.h"
#include "conn-func.h"
#include "conf.h"
#include "client.h"
#include "channel.h"
@ -90,21 +90,46 @@ IRC_OPER( CLIENT *Client, REQUEST *Req )
GLOBAL bool
IRC_DIE( CLIENT *Client, REQUEST *Req )
IRC_DIE(CLIENT * Client, REQUEST * Req)
{
/* Shut down server */
assert( Client != NULL );
assert( Req != NULL );
CONN_ID c;
CLIENT *cl;
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 != 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|LOG_snotice, "Got DIE command from \"%s\" ...", Client_Mask( Client ));
/* Bad number of parameters? */
#ifdef STRICT_RFC
if (Req->argc != 0)
#else
if (Req->argc > 1)
#endif
return IRC_WriteStrClient(Client, ERR_NEEDMOREPARAMS_MSG,
Client_ID(Client), Req->command);
/* Is a message given? */
if (Req->argc > 0) {
c = Conn_First();
while (c != NONE) {
cl = Conn_GetClient(c);
if (Client_Type(cl) == CLIENT_USER)
IRC_WriteStrClient(cl, "NOTICE %s :%s",
Client_ID(cl), Req->argv[0]);
c = Conn_Next(c);
}
}
Log(LOG_NOTICE | LOG_snotice, "Got DIE command from \"%s\" ...",
Client_Mask(Client));
NGIRCd_SignalQuit = true;
return CONNECTED;
} /* IRC_DIE */