/* OperServ functions.
*
* (C) 2003-2005 Anope Team
* Contact us at info@anope.org
*
* Please read COPYING and README for further details.
*
* Based on the original code of Epona by Lara.
* Based on the original code of Services by Andy Church.
*
* $Id$
*
*/
#include "services.h"
#include "pseudo.h"
/*************************************************************************/
/* List of Services administrators */
SList servadmins;
/* List of Services operators */
SList servopers;
/* AKILL, SGLINE, SQLINE and SZLINE lists */
SList akills, sglines, sqlines, szlines;
/*************************************************************************/
static int compare_adminlist_entries(SList * slist, void *item1,
void *item2);
static int compare_operlist_entries(SList * slist, void *item1,
void *item2);
static void free_adminlist_entry(SList * slist, void *item);
static void free_operlist_entry(SList * slist, void *item);
static int is_akill_entry_equal(SList * slist, void *item1, void *item2);
static void free_akill_entry(SList * slist, void *item);
static int is_sgline_entry_equal(SList * slist, void *item1, void *item2);
static void free_sgline_entry(SList * slist, void *item);
static int is_sqline_entry_equal(SList * slist, void *item1, void *item2);
static void free_sqline_entry(SList * slist, void *item);
static int is_szline_entry_equal(SList * slist, void *item1, void *item2);
static void free_szline_entry(SList * slist, void *item);
time_t DefContimer;
int DefConModesSet = 0;
char *defconReverseModes(const char *modes);
#ifdef DEBUG_COMMANDS
static int do_matchwild(User * u);
#endif
void moduleAddOperServCmds(void);
/*************************************************************************/
/* Options for the lists */
SListOpts akopts = { 0, NULL, &is_akill_entry_equal, &free_akill_entry };
SListOpts saopts = { SLISTF_SORT, &compare_adminlist_entries, NULL,
&free_adminlist_entry
};
SListOpts sgopts = { 0, NULL, &is_sgline_entry_equal, &free_sgline_entry };
SListOpts soopts =
{ SLISTF_SORT, &compare_operlist_entries, NULL, &free_operlist_entry };
SListOpts sqopts =
{ SLISTF_SORT, NULL, &is_sqline_entry_equal, &free_sqline_entry };
SListOpts szopts = { 0, NULL, &is_szline_entry_equal, &free_szline_entry };
/*************************************************************************/
/* *INDENT-OFF* */
void moduleAddOperServCmds(void) {
#ifdef DEBUG_COMMANDS
Command *c;
#endif
modules_core_init(OperServCoreNumber, OperServCoreModules);
#ifdef DEBUG_COMMANDS
c = createCommand("LISTTIMERS", send_timeout_list, is_services_root, -1,-1,-1,-1,-1); addCoreCommand(OPERSERV,c);
c = createCommand("MATCHWILD", do_matchwild, is_services_root, -1,-1,-1,-1,-1); addCoreCommand(OPERSERV,c);
#endif
}
/* *INDENT-ON* */
/*************************************************************************/
/*************************************************************************/
/* OperServ initialization. */
void os_init(void)
{
Command *cmd;
moduleAddOperServCmds();
cmd = findCommand(OPERSERV, "GLOBAL");
if (cmd)
cmd->help_param1 = s_GlobalNoticer;
cmd = findCommand(OPERSERV, "ADMIN");
if (cmd)
cmd->help_param1 = s_NickServ;
cmd = findCommand(OPERSERV, "OPER");
if (cmd)
cmd->help_param1 = s_NickServ;
/* Initialization of the lists */
slist_init(&servadmins);
servadmins.opts = &saopts;
slist_init(&servopers);
servopers.opts = &soopts;
slist_init(&akills);
akills.opts = &akopts;
if (ircd->sgline) {
slist_init(&sglines);
sglines.opts = &sgopts;
}
if (ircd->sqline) {
slist_init(&sqlines);
sqlines.opts = &sqopts;
}
if (ircd->szline) {
slist_init(&szlines);
szlines.opts = &szopts;
}
}
/*************************************************************************/
/* Main OperServ routine. */
void operserv(User * u, char *buf)
{
char *cmd;
char *s;
alo
|