more work on mode processing plus fixes in modules
This commit is contained in:
parent
3c8fb09621
commit
99ba54bf08
11 changed files with 226 additions and 149 deletions
|
@ -4,6 +4,10 @@ Anything we add/remove/fix/change is in here (even our rants)
|
|||
Fish (F), Mark (M)
|
||||
===============================================================================
|
||||
* NeoStats * Version 3.0.genesis
|
||||
- New debug levels of DEBUGRX and DEBUGTX to identify incoming and outgoing
|
||||
messages. (M)
|
||||
- Mode descriptions now handled core side so modules can share the information
|
||||
rather than define local variants. (M)
|
||||
- ConnectServ: mode reports now run from a table. (M)
|
||||
- More core side UMODE support. (M)
|
||||
- Add support for online bot realname, host and ident changes. (M)
|
||||
|
|
|
@ -235,8 +235,10 @@ EXPORTVAR extern unsigned int ircd_supported_smodes;
|
|||
EXPORTFUNC int IsOperMode(const char mode);
|
||||
EXPORTFUNC int IsOperSMode(const char mode);
|
||||
EXPORTFUNC int IsBotMode(const char mode);
|
||||
EXPORTFUNC int GetModeMask(const char mode);
|
||||
EXPORTFUNC int GetSModeMask(const char mode);
|
||||
EXPORTFUNC int GetUmodeMask(const char mode);
|
||||
EXPORTFUNC const char * GetUmodeDesc (const unsigned int mask);
|
||||
EXPORTFUNC int GetSmodeMask(const char mode);
|
||||
EXPORTFUNC const char * GetSmodeDesc (const unsigned int mask);
|
||||
|
||||
#ifndef NEOSTATS_PACKAGE_VERSION
|
||||
#define NEOSTATS_PACKAGE_VERSION PACKAGE
|
||||
|
@ -1103,7 +1105,9 @@ typedef enum LOG_LEVEL {
|
|||
/* define debug levels */
|
||||
|
||||
typedef enum DEBUG_LEVEL {
|
||||
DEBUG1=1, /* debug notices about important functions that are going on */
|
||||
DEBUGRX=1,
|
||||
DEBUGTX,
|
||||
DEBUG1, /* debug notices about important functions that are going on */
|
||||
DEBUG2, /* more debug notices that are usefull */
|
||||
DEBUG3, /* even more stuff, that would be useless to most normal people */
|
||||
DEBUG4, /* are you insane? */
|
||||
|
|
|
@ -31,19 +31,6 @@
|
|||
*/
|
||||
/* #define ENABLE_COLOUR_SUPPORT */
|
||||
|
||||
static const char mode_netadmin[]="network administrator";
|
||||
static const char mode_conetadmin[]="co network administrator";
|
||||
static const char mode_techadmin[]="network technical administrator";
|
||||
static const char mode_cotechadmin[]="network co technical administrator";
|
||||
static const char mode_serveradmin[]="server administrator";
|
||||
static const char mode_coserveradmin[]="co server administrator";
|
||||
static const char mode_guestadmin[]="guest administrator";
|
||||
static const char mode_servicesadmin[]="services administrator";
|
||||
static const char mode_globop[]="global operator";
|
||||
static const char mode_locop[]="local operator";
|
||||
static const char mode_netservice[]="network service";
|
||||
static const char mode_bot[]="bot";
|
||||
|
||||
#ifndef ENABLE_COLOUR_SUPPORT
|
||||
static char msg_nickchange[]="\2NICK\2 %s (%s@%s) changed their nick to %s";
|
||||
static char msg_signon[]="\2SIGNON\2 %s (%s@%s - %s) has signed on at %s";
|
||||
|
@ -144,35 +131,34 @@ ModuleEvent module_events[] = {
|
|||
{EVENT_NULL, NULL}
|
||||
};
|
||||
|
||||
typedef struct ModeDesc {
|
||||
typedef struct ModeDef {
|
||||
unsigned int mask;
|
||||
unsigned int serverflag;
|
||||
const char* desc;
|
||||
}ModeDesc;
|
||||
}ModeDef;
|
||||
|
||||
ModeDesc OperUmodes[]=
|
||||
ModeDef OperUmodes[]=
|
||||
{
|
||||
{UMODE_NETADMIN, 0, mode_netadmin},
|
||||
{UMODE_TECHADMIN, 0, mode_techadmin},
|
||||
{UMODE_ADMIN, 1, mode_serveradmin},
|
||||
{UMODE_COADMIN, 1, mode_coserveradmin},
|
||||
{UMODE_SADMIN, 0, mode_servicesadmin},
|
||||
{UMODE_OPER, 1, mode_globop},
|
||||
{UMODE_LOCOP, 1, mode_locop},
|
||||
{UMODE_SERVICES, 0, mode_netservice},
|
||||
{0, 0, 0},
|
||||
{UMODE_NETADMIN, 0},
|
||||
{UMODE_TECHADMIN, 0},
|
||||
{UMODE_ADMIN, 1},
|
||||
{UMODE_COADMIN, 1},
|
||||
{UMODE_SADMIN, 0},
|
||||
{UMODE_OPER, 1},
|
||||
{UMODE_LOCOP, 1},
|
||||
{UMODE_SERVICES, 0},
|
||||
{0, 0},
|
||||
};
|
||||
|
||||
ModeDesc OperSmodes[]=
|
||||
ModeDef OperSmodes[]=
|
||||
{
|
||||
{SMODE_NETADMIN, 0, mode_netadmin},
|
||||
{SMODE_CONETADMIN, 0, mode_conetadmin},
|
||||
{SMODE_TECHADMIN, 0, mode_techadmin},
|
||||
{SMODE_COTECHADMIN, 0, mode_cotechadmin},
|
||||
{SMODE_ADMIN, 1, mode_serveradmin},
|
||||
{SMODE_COADMIN, 1, mode_coserveradmin},
|
||||
{SMODE_GUESTADMIN, 1, mode_guestadmin},
|
||||
{0, 0, 0},
|
||||
{SMODE_NETADMIN, 0},
|
||||
{SMODE_CONETADMIN, 0},
|
||||
{SMODE_TECHADMIN, 0},
|
||||
{SMODE_COTECHADMIN, 0},
|
||||
{SMODE_ADMIN, 1},
|
||||
{SMODE_COADMIN, 1},
|
||||
{SMODE_GUESTADMIN, 1},
|
||||
{0, 0},
|
||||
};
|
||||
|
||||
int ModInit(Module* mod_ptr)
|
||||
|
@ -278,30 +264,18 @@ static int cs_event_quit(CmdParams* cmdparams)
|
|||
* report mode change
|
||||
*/
|
||||
|
||||
static int cs_report_mode (ModeDesc* desclist, Client * u, int mask, int add, char mode)
|
||||
static int cs_report_mode (const char* modedesc, int serverflag, Client * u, int mask, int add, char mode)
|
||||
{
|
||||
ModeDesc* desc;
|
||||
|
||||
desc = desclist;
|
||||
while(desc->mask) {
|
||||
if(desc->mask == mask)
|
||||
break;
|
||||
desc ++;
|
||||
}
|
||||
if(desc->mask == 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if(desc->serverflag) {
|
||||
if(serverflag) {
|
||||
irc_chanalert(cs_bot, msg_mode_serv, u->name,
|
||||
add?"now":"no longer",
|
||||
desc->desc,
|
||||
modedesc,
|
||||
add?'+':'-',
|
||||
mode, u->user->server->name);
|
||||
} else {
|
||||
irc_chanalert(cs_bot, msg_mode, u->name,
|
||||
add?"now":"no longer",
|
||||
desc->desc,
|
||||
modedesc,
|
||||
add?'+':'-',
|
||||
mode);
|
||||
}
|
||||
|
@ -316,6 +290,7 @@ static int cs_event_umode(CmdParams* cmdparams)
|
|||
int mask;
|
||||
int add = 1;
|
||||
char *modes;
|
||||
ModeDef* def;
|
||||
|
||||
SET_SEGV_LOCATION();
|
||||
if (!cs_module->synched || !cs_cfg.mode_watch) {
|
||||
|
@ -338,12 +313,20 @@ static int cs_event_umode(CmdParams* cmdparams)
|
|||
add = 0;
|
||||
break;
|
||||
default:
|
||||
mask = GetModeMask (*modes);
|
||||
mask = GetUmodeMask (*modes);
|
||||
if (mask == UMODE_BOT) {
|
||||
irc_chanalert (cs_bot, msg_bot, cmdparams->source->name,
|
||||
add?"now":"no longer", add?'+':'-', *modes);
|
||||
} else {
|
||||
cs_report_mode (OperUmodes, cmdparams->source, mask, add, *modes);
|
||||
def = OperUmodes;
|
||||
while(def->mask) {
|
||||
if(def->mask == mask)
|
||||
{
|
||||
cs_report_mode(GetUmodeDesc(def->mask), def->serverflag, cmdparams->source, mask, add, *modes);
|
||||
break;
|
||||
}
|
||||
def ++;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -358,6 +341,7 @@ static int cs_event_smode(CmdParams* cmdparams)
|
|||
int mask;
|
||||
int add = 1;
|
||||
char *modes;
|
||||
ModeDef* def;
|
||||
|
||||
SET_SEGV_LOCATION();
|
||||
if (!cs_module->synched || !cs_cfg.mode_watch) {
|
||||
|
@ -380,8 +364,17 @@ static int cs_event_smode(CmdParams* cmdparams)
|
|||
add = 0;
|
||||
break;
|
||||
default:
|
||||
mask = GetSModeMask (*modes);
|
||||
cs_report_mode (OperSmodes, cmdparams->source, mask, add, *modes);
|
||||
mask = GetSmodeMask (*modes);
|
||||
def = OperSmodes;
|
||||
while(def->mask) {
|
||||
if(def->mask == mask)
|
||||
{
|
||||
cs_report_mode(GetSmodeDesc(def->mask), def->serverflag, cmdparams->source, mask, add, *modes);
|
||||
break;
|
||||
}
|
||||
def ++;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
modes++;
|
||||
|
|
|
@ -101,22 +101,22 @@ static int AccessAdd(CmdParams* cmdparams)
|
|||
if (cmdparams->ac < 3) {
|
||||
return NS_ERR_NEED_MORE_PARAMS;
|
||||
}
|
||||
if (hash_lookup(accesshash, cmdparams->av[0])) {
|
||||
irc_prefmsg(NULL, cmdparams->source, "Entry for %s already exists", cmdparams->av[0]);
|
||||
if (hash_lookup(accesshash, cmdparams->av[1])) {
|
||||
irc_prefmsg(NULL, cmdparams->source, "Entry for %s already exists", cmdparams->av[1]);
|
||||
return NS_SUCCESS;
|
||||
}
|
||||
if (strstr(cmdparams->av[1], "!")&& !strstr(cmdparams->av[1], "@")) {
|
||||
if (strstr(cmdparams->av[2], "!")&& !strstr(cmdparams->av[2], "@")) {
|
||||
irc_prefmsg(NULL, cmdparams->source, "Invalid format for hostmask. Must be of the form nick!user@host.");
|
||||
return NS_ERR_SYNTAX_ERROR;
|
||||
}
|
||||
level = atoi(cmdparams->av[2]);
|
||||
level = atoi(cmdparams->av[3]);
|
||||
if(level < 0 || level > NS_ULEVEL_ROOT) {
|
||||
irc_prefmsg(NULL, cmdparams->source, "Level out of range. Valid values range from 0 to 200.");
|
||||
return NS_ERR_PARAM_OUT_OF_RANGE;
|
||||
}
|
||||
access = malloc(sizeof(NeoAccess));
|
||||
strlcpy(access->nick, cmdparams->av[0], MAXNICK);
|
||||
strlcpy(access->mask, cmdparams->av[1], MAXHOST);
|
||||
strlcpy(access->nick, cmdparams->av[1], MAXNICK);
|
||||
strlcpy(access->mask, cmdparams->av[2], MAXHOST);
|
||||
access->level = level;
|
||||
node = hnode_create(access);
|
||||
hash_insert(accesshash, node, access->nick);
|
||||
|
@ -137,16 +137,16 @@ static int AccessDel(CmdParams* cmdparams)
|
|||
if (cmdparams->ac < 1) {
|
||||
return NS_ERR_SYNTAX_ERROR;
|
||||
}
|
||||
node = hash_lookup(accesshash, cmdparams->av[0]);
|
||||
node = hash_lookup(accesshash, cmdparams->av[1]);
|
||||
if (node) {
|
||||
hash_delete(accesshash, node);
|
||||
free(hnode_get(node));
|
||||
hnode_destroy(node);
|
||||
ircsnprintf(confpath, CONFBUFSIZE, "AccessList/%s", cmdparams->av[0]);
|
||||
ircsnprintf(confpath, CONFBUFSIZE, "AccessList/%s", cmdparams->av[1]);
|
||||
DelConf(confpath);
|
||||
irc_prefmsg(NULL, cmdparams->source, "Deleted %s from Access List", cmdparams->av[0]);
|
||||
irc_prefmsg(NULL, cmdparams->source, "Deleted %s from Access List", cmdparams->av[1]);
|
||||
} else {
|
||||
irc_prefmsg(NULL, cmdparams->source, "Error, Could not find %s in access list.", cmdparams->av[0]);
|
||||
irc_prefmsg(NULL, cmdparams->source, "Error, Could not find %s in access list.", cmdparams->av[1]);
|
||||
}
|
||||
return NS_SUCCESS;
|
||||
}
|
||||
|
@ -162,7 +162,7 @@ static int AccessList(CmdParams* cmdparams)
|
|||
hash_scan_begin(&accessscan, accesshash);
|
||||
while ((node = hash_scan_next(&accessscan)) != NULL) {
|
||||
access = hnode_get(node);
|
||||
irc_prefmsg(NULL, cmdparams->source, NULL, "%s %s (%d)", access->nick, access->mask, access->level);
|
||||
irc_prefmsg(NULL, cmdparams->source, "%s %s (%d)", access->nick, access->mask, access->level);
|
||||
}
|
||||
irc_prefmsg(NULL, cmdparams->source, "End of List.");
|
||||
return NS_SUCCESS;
|
||||
|
@ -171,11 +171,11 @@ static int AccessList(CmdParams* cmdparams)
|
|||
static int ea_cmd_access(CmdParams* cmdparams)
|
||||
{
|
||||
SET_SEGV_LOCATION();
|
||||
if (!strcasecmp(cmdparams->av[2], "add")) {
|
||||
if (!strcasecmp(cmdparams->av[0], "add")) {
|
||||
return AccessAdd(cmdparams);
|
||||
} else if (!strcasecmp(cmdparams->av[2], "del")) {
|
||||
} else if (!strcasecmp(cmdparams->av[0], "del")) {
|
||||
return AccessDel(cmdparams);
|
||||
} else if (!strcasecmp(cmdparams->av[2], "list")) {
|
||||
} else if (!strcasecmp(cmdparams->av[0], "list")) {
|
||||
return AccessList(cmdparams);
|
||||
}
|
||||
irc_prefmsg(NULL, cmdparams->source, "Invalid Syntax.");
|
||||
|
@ -184,14 +184,16 @@ static int ea_cmd_access(CmdParams* cmdparams)
|
|||
|
||||
static int GetAccessLevel(Client * u)
|
||||
{
|
||||
static char hostmask[MAXHOST];
|
||||
hnode_t *node;
|
||||
NeoAccess *access;
|
||||
|
||||
dlog(DEBUG2, "GetAccessLevel for %s", u->name);
|
||||
node = hash_lookup(accesshash, u->name);
|
||||
dlog (DEBUG2, "GetAccessLevel for %s", u->name);
|
||||
node = hash_lookup (accesshash, u->name);
|
||||
if (node) {
|
||||
access = hnode_get(node);
|
||||
if ((match(access->mask, u->user->hostname))) {
|
||||
ircsnprintf (hostmask, MAXHOST, "%s@%s", u->user->username, u->user->hostname);
|
||||
if ((match (access->mask, hostmask))) {
|
||||
return(access->level);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -344,14 +344,14 @@ static int hs_levels(CmdParams* cmdparams)
|
|||
{
|
||||
int t;
|
||||
|
||||
if (cmdparams->ac == 2) {
|
||||
if (cmdparams->ac == 0) {
|
||||
irc_prefmsg(hs_bot, cmdparams->source,
|
||||
"Configured Levels: ADD: %d, DEL: %d, LIST: %d, VIEW: %d",
|
||||
hs_cfg.add, hs_cfg.del, hs_cfg.list,hs_cfg.view);
|
||||
return NS_SUCCESS;
|
||||
} else if (cmdparams->ac == 3) {
|
||||
} else if (cmdparams->ac == 1) {
|
||||
if (UserLevel(cmdparams->source) >= NS_ULEVEL_ADMIN) {
|
||||
if (!ircstrcasecmp(cmdparams->av[2], "RESET")) {
|
||||
if (!ircstrcasecmp(cmdparams->av[0], "RESET")) {
|
||||
hs_cfg.add = 40;
|
||||
SetConf((void *) &hs_cfg.add, CFGINT, "AddLevel");
|
||||
hs_cfg.del = 40;
|
||||
|
@ -364,24 +364,24 @@ static int hs_levels(CmdParams* cmdparams)
|
|||
}
|
||||
}
|
||||
return NS_ERR_NO_PERMISSION;
|
||||
} else if (cmdparams->ac == 4) {
|
||||
} else if (cmdparams->ac == 2) {
|
||||
if (UserLevel(cmdparams->source) >= NS_ULEVEL_ADMIN) {
|
||||
t = atoi(cmdparams->av[3]);
|
||||
t = atoi(cmdparams->av[1]);
|
||||
if ((t <= 0) || (t > NS_ULEVEL_ROOT)) {
|
||||
irc_prefmsg(hs_bot, cmdparams->source,
|
||||
"Invalid Level. Must be between 1 and %d", NS_ULEVEL_ROOT);
|
||||
return NS_ERR_SYNTAX_ERROR;
|
||||
}
|
||||
if (!ircstrcasecmp(cmdparams->av[2], "ADD")) {
|
||||
if (!ircstrcasecmp(cmdparams->av[0], "ADD")) {
|
||||
hs_cfg.add = t;
|
||||
SetConf((void *) t, CFGINT, "AddLevel");
|
||||
} else if (!ircstrcasecmp(cmdparams->av[2], "DEL")) {
|
||||
} else if (!ircstrcasecmp(cmdparams->av[0], "DEL")) {
|
||||
hs_cfg.del = t;
|
||||
SetConf((void *) t, CFGINT, "DelLevel");
|
||||
} else if (!ircstrcasecmp(cmdparams->av[2], "LIST")) {
|
||||
} else if (!ircstrcasecmp(cmdparams->av[0], "LIST")) {
|
||||
hs_cfg.list = t;
|
||||
SetConf((void *) t, CFGINT, "ListLevel");
|
||||
} else if (!ircstrcasecmp(cmdparams->av[2], "VIEW")) {
|
||||
} else if (!ircstrcasecmp(cmdparams->av[0], "VIEW")) {
|
||||
hs_cfg.view = t;
|
||||
SetConf((void *) t, CFGINT, "ViewLevel");
|
||||
} else {
|
||||
|
@ -390,7 +390,7 @@ static int hs_levels(CmdParams* cmdparams)
|
|||
return 1;
|
||||
}
|
||||
irc_prefmsg(hs_bot, cmdparams->source,
|
||||
"Level for %s set to %d", cmdparams->av[2], t);
|
||||
"Level for %s set to %d", cmdparams->av[0], t);
|
||||
return NS_SUCCESS;
|
||||
}
|
||||
return NS_ERR_NO_PERMISSION;
|
||||
|
@ -400,16 +400,16 @@ static int hs_levels(CmdParams* cmdparams)
|
|||
|
||||
static int hs_bans(CmdParams* cmdparams)
|
||||
{
|
||||
if (cmdparams->ac == 2) {
|
||||
if (cmdparams->ac == 0) {
|
||||
hs_listban(cmdparams->source);
|
||||
return NS_SUCCESS;
|
||||
} else if (cmdparams->ac == 4) {
|
||||
} else if (cmdparams->ac == 2) {
|
||||
if (UserLevel(cmdparams->source) >= NS_ULEVEL_ADMIN) {
|
||||
if (!ircstrcasecmp(cmdparams->av[2], "ADD")) {
|
||||
hs_addban(cmdparams->source, cmdparams->av[3]);
|
||||
if (!ircstrcasecmp(cmdparams->av[0], "ADD")) {
|
||||
hs_addban(cmdparams->source, cmdparams->av[1]);
|
||||
return NS_SUCCESS;
|
||||
} else if (!ircstrcasecmp(cmdparams->av[2], "DEL")) {
|
||||
hs_delban(cmdparams->source, cmdparams->av[3]);
|
||||
} else if (!ircstrcasecmp(cmdparams->av[0], "DEL")) {
|
||||
hs_delban(cmdparams->source, cmdparams->av[1]);
|
||||
return NS_SUCCESS;
|
||||
}
|
||||
} else {
|
||||
|
@ -515,9 +515,9 @@ static int hs_chpass(CmdParams* cmdparams)
|
|||
char *oldpass;
|
||||
char *newpass;
|
||||
|
||||
nick = cmdparams->av[2];
|
||||
oldpass = cmdparams->av[3];
|
||||
newpass = cmdparams->av[4];
|
||||
nick = cmdparams->av[0];
|
||||
oldpass = cmdparams->av[1];
|
||||
newpass = cmdparams->av[2];
|
||||
|
||||
hn = list_find(vhosts, nick, findnick);
|
||||
if (hn) {
|
||||
|
@ -570,10 +570,10 @@ static int hs_add(CmdParams* cmdparams)
|
|||
char *h;
|
||||
char *p;
|
||||
|
||||
cmd = cmdparams->av[2];
|
||||
m = cmdparams->av[3];
|
||||
h = cmdparams->av[4];
|
||||
p = cmdparams->av[5];
|
||||
cmd = cmdparams->av[0];
|
||||
m = cmdparams->av[1];
|
||||
h = cmdparams->av[2];
|
||||
p = cmdparams->av[3];
|
||||
|
||||
SET_SEGV_LOCATION();
|
||||
hash_scan_begin(&hs, bannedvhosts);
|
||||
|
@ -643,10 +643,10 @@ static int hs_list(CmdParams* cmdparams)
|
|||
int vhostcount;
|
||||
|
||||
SET_SEGV_LOCATION();
|
||||
if (cmdparams->ac == 2) {
|
||||
if (cmdparams->ac == 0) {
|
||||
start = 0;
|
||||
} else if (cmdparams->ac == 3) {
|
||||
start = atoi(cmdparams->av[2]);
|
||||
} else if (cmdparams->ac == 1) {
|
||||
start = atoi(cmdparams->av[0]);
|
||||
}
|
||||
|
||||
vhostcount = list_count(vhosts);
|
||||
|
@ -695,7 +695,7 @@ static int hs_view(CmdParams* cmdparams)
|
|||
int tmpint;
|
||||
|
||||
SET_SEGV_LOCATION();
|
||||
tmpint = atoi(cmdparams->av[2]);
|
||||
tmpint = atoi(cmdparams->av[0]);
|
||||
if (!tmpint) {
|
||||
irc_prefmsg(hs_bot, cmdparams->source,
|
||||
"Syntax: /msg %s VIEW #", hs_bot->name);
|
||||
|
@ -775,7 +775,7 @@ static int hs_del(CmdParams* cmdparams)
|
|||
int tmpint;
|
||||
|
||||
SET_SEGV_LOCATION();
|
||||
tmpint = atoi(cmdparams->av[2]);
|
||||
tmpint = atoi(cmdparams->av[0]);
|
||||
if (!tmpint) {
|
||||
irc_prefmsg(hs_bot, cmdparams->source,
|
||||
"Syntax: /msg %s DEL #", hs_bot->name);
|
||||
|
@ -820,8 +820,8 @@ static int hs_login(CmdParams* cmdparams)
|
|||
char *pass;
|
||||
|
||||
SET_SEGV_LOCATION();
|
||||
login = cmdparams->av[2];
|
||||
pass = cmdparams->av[3];
|
||||
login = cmdparams->av[0];
|
||||
pass = cmdparams->av[1];
|
||||
/* Check HostName Against Data Contained in vhosts.data */
|
||||
hn = list_find(vhosts, login, findnick);
|
||||
if (hn) {
|
||||
|
|
|
@ -33,7 +33,7 @@
|
|||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="neostats.lib"
|
||||
OutputFile="$(OutDir)/hostserv.dll"
|
||||
OutputFile="../hostservd.dll"
|
||||
LinkIncremental="2"
|
||||
AdditionalLibraryDirectories="..\..\src\Debug"
|
||||
GenerateDebugInformation="TRUE"
|
||||
|
@ -82,7 +82,7 @@
|
|||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="neostats.lib"
|
||||
OutputFile="$(OutDir)/hostserv.dll"
|
||||
OutputFile="../hostserv.dll"
|
||||
LinkIncremental="1"
|
||||
AdditionalLibraryDirectories="..\..\src\Release"
|
||||
GenerateDebugInformation="TRUE"
|
||||
|
|
|
@ -27,7 +27,6 @@
|
|||
static int auth_cmd_authmodelist(CmdParams* cmdparams);
|
||||
|
||||
typedef struct UserAuthModes{
|
||||
char* modename;
|
||||
unsigned long umode;
|
||||
int level;
|
||||
} UserAuthModes;
|
||||
|
@ -68,42 +67,41 @@ ModuleInfo module_info = {
|
|||
|
||||
UserAuthModes user_auth_modes[] = {
|
||||
#ifdef UMODE_DEBUG
|
||||
{"Debug", UMODE_DEBUG, NS_ULEVEL_ROOT},
|
||||
{UMODE_DEBUG, NS_ULEVEL_ROOT},
|
||||
#endif
|
||||
{"Technical admin", UMODE_TECHADMIN, NS_ULEVEL_ADMIN},
|
||||
{UMODE_TECHADMIN, NS_ULEVEL_ADMIN},
|
||||
#ifdef UMODE_SERVICESOPER
|
||||
{"Services operator", UMODE_SERVICESOPER, NS_ULEVEL_OPER},
|
||||
{UMODE_SERVICESOPER,NS_ULEVEL_OPER},
|
||||
#endif
|
||||
#ifdef UMODE_IRCADMIN
|
||||
{"IRC admin", UMODE_IRCADMIN, NS_ULEVEL_OPER},
|
||||
{UMODE_IRCADMIN, NS_ULEVEL_OPER},
|
||||
#endif
|
||||
#ifdef UMODE_SUPER
|
||||
{"Super", UMODE_SUPER, NS_ULEVEL_OPER},
|
||||
{UMODE_SUPER, NS_ULEVEL_OPER},
|
||||
#endif
|
||||
#ifdef UMODE_SRA
|
||||
{"Services root", UMODE_SRA, NS_ULEVEL_ROOT},
|
||||
{UMODE_SRA, NS_ULEVEL_ROOT},
|
||||
#endif
|
||||
{"Services", UMODE_SERVICES, NS_ULEVEL_ROOT},
|
||||
{"Network admin", UMODE_NETADMIN, NS_ULEVEL_ADMIN},
|
||||
{"Services admin", UMODE_SADMIN, NS_ULEVEL_ADMIN},
|
||||
{"Server admin", UMODE_ADMIN, NS_ULEVEL_OPER},
|
||||
{"Co-admin", UMODE_COADMIN, NS_ULEVEL_OPER},
|
||||
{"IRC operator", UMODE_OPER, NS_ULEVEL_OPER},
|
||||
{"Local operator", UMODE_LOCOP, NS_ULEVEL_LOCOPER},
|
||||
{"Registered nick", UMODE_REGNICK, NS_ULEVEL_REG},
|
||||
{UMODE_SERVICES, NS_ULEVEL_ROOT},
|
||||
{UMODE_NETADMIN, NS_ULEVEL_ADMIN},
|
||||
{UMODE_SADMIN, NS_ULEVEL_ADMIN},
|
||||
{UMODE_ADMIN, NS_ULEVEL_OPER},
|
||||
{UMODE_COADMIN, NS_ULEVEL_OPER},
|
||||
{UMODE_OPER, NS_ULEVEL_OPER},
|
||||
{UMODE_LOCOP, NS_ULEVEL_LOCOPER},
|
||||
{UMODE_REGNICK, NS_ULEVEL_REG},
|
||||
};
|
||||
|
||||
const int user_auth_mode_count = ((sizeof (user_auth_modes) / sizeof (user_auth_modes[0])));
|
||||
|
||||
UserAuthModes user_auth_smodes[] = {
|
||||
{"Network admin", SMODE_NETADMIN, NS_ULEVEL_ADMIN},
|
||||
{"Co-netadmin", SMODE_CONETADMIN, 175},
|
||||
{"Technical admin", SMODE_TECHADMIN, 150},
|
||||
{"Co-techadmin", SMODE_COTECHADMIN, 125},
|
||||
{"Server admin", SMODE_ADMIN, 100},
|
||||
{"Guest admin", SMODE_GUESTADMIN, 100},
|
||||
{"Co-admin", SMODE_COADMIN, NS_ULEVEL_OPER},
|
||||
0
|
||||
{SMODE_NETADMIN, NS_ULEVEL_ADMIN},
|
||||
{SMODE_CONETADMIN, 175},
|
||||
{SMODE_TECHADMIN, 150},
|
||||
{SMODE_COTECHADMIN, 125},
|
||||
{SMODE_ADMIN, 100},
|
||||
{SMODE_GUESTADMIN, 100},
|
||||
{SMODE_COADMIN, NS_ULEVEL_OPER},
|
||||
};
|
||||
|
||||
const int user_auth_smode_count = ((sizeof (user_auth_smodes) / sizeof (user_auth_smodes[0])));
|
||||
|
@ -112,16 +110,16 @@ static int auth_cmd_authmodelist(CmdParams* cmdparams)
|
|||
{
|
||||
int i;
|
||||
|
||||
irc_prefmsg(NULL, cmdparams->source,
|
||||
irc_prefmsg (NULL, cmdparams->source,
|
||||
"User mode auth levels:");
|
||||
for (i = 0; i < user_auth_mode_count; i++) {
|
||||
irc_prefmsg(NULL, cmdparams->source, "%s: %d",
|
||||
user_auth_modes[i].modename, user_auth_modes[i].level);
|
||||
irc_prefmsg (NULL, cmdparams->source, "%s: %d",
|
||||
GetUmodeDesc (user_auth_modes[i].umode), user_auth_modes[i].level);
|
||||
}
|
||||
if (HaveFeature (FEATURE_USERSMODES)) {
|
||||
for (i = 0; i < user_auth_smode_count; i++) {
|
||||
irc_prefmsg(NULL, cmdparams->source, "%s: %d",
|
||||
user_auth_smodes[i].modename, user_auth_smodes[i].level);
|
||||
irc_prefmsg (NULL, cmdparams->source, "%s: %d",
|
||||
GetSmodeDesc (user_auth_smodes[i].umode), user_auth_smodes[i].level);
|
||||
}
|
||||
}
|
||||
return NS_SUCCESS;
|
||||
|
|
|
@ -735,7 +735,7 @@ irc_prefmsg (const Bot *botptr, const Client *target, const char *fmt, ...)
|
|||
if (config.want_privmsg) {
|
||||
irc_send_privmsg (botptr->u->name, target->name, ircd_buf);
|
||||
} else {
|
||||
irc_send_notice (botptr->u->name, target->name, ircd_buf);
|
||||
irc_send_notice (botptr?botptr->u->name:ns_botptr->u->name, target->name, ircd_buf);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1675,7 +1675,7 @@ send_cmd (char *fmt, ...)
|
|||
ircvsnprintf (buf, BUFSIZE, fmt, ap);
|
||||
va_end (ap);
|
||||
|
||||
dlog(DEBUG2, "TX: %s", buf);
|
||||
dlog(DEBUGTX, "%s", buf);
|
||||
if(strnlen (buf, BUFSIZE) < BUFSIZE - 2) {
|
||||
strlcat (buf, "\n", BUFSIZE);
|
||||
} else {
|
||||
|
|
|
@ -51,6 +51,8 @@ const char *loglevels[LOG_LEVELMAX] = {
|
|||
};
|
||||
|
||||
const char *dloglevels[DEBUGMAX] = {
|
||||
"DEBUGRX",
|
||||
"DEBUGTX",
|
||||
"DEBUG1",
|
||||
"DEBUG2",
|
||||
"DEBUG3",
|
||||
|
|
96
src/modes.c
96
src/modes.c
|
@ -38,6 +38,51 @@ ChanModes ircd_cmodes[MODE_TABLE_SIZE];
|
|||
UserModes ircd_umodes[MODE_TABLE_SIZE];
|
||||
UserModes ircd_smodes[MODE_TABLE_SIZE];
|
||||
|
||||
typedef struct ModeDesc {
|
||||
unsigned int mask;
|
||||
const char * desc;
|
||||
} ModeDesc;
|
||||
|
||||
static ModeDesc UmodeDesc[] = {
|
||||
#ifdef UMODE_DEBUG
|
||||
{UMODE_DEBUG, "Debug"},
|
||||
#endif
|
||||
{UMODE_TECHADMIN, "Technical Administrator"},
|
||||
#ifdef UMODE_SERVICESOPER
|
||||
{UMODE_SERVICESOPER,"Services operator"},
|
||||
#endif
|
||||
#ifdef UMODE_IRCADMIN
|
||||
{UMODE_IRCADMIN, "IRC admin"},
|
||||
#endif
|
||||
#ifdef UMODE_SUPER
|
||||
{UMODE_SUPER, "Super"},
|
||||
#endif
|
||||
#ifdef UMODE_SRA
|
||||
{UMODE_SRA, "Services root"},
|
||||
#endif
|
||||
{UMODE_SERVICES, "Network Service"},
|
||||
{UMODE_NETADMIN, "Network Administrator"},
|
||||
{UMODE_SADMIN, "Services Administrator"},
|
||||
{UMODE_ADMIN, "Server Administrator"},
|
||||
{UMODE_COADMIN, "Co-Server Administrator"},
|
||||
{UMODE_OPER, "Global Operator"},
|
||||
{UMODE_LOCOP, "Local Operator"},
|
||||
{UMODE_REGNICK, "Registered nick"},
|
||||
{UMODE_BOT, "Bot"},
|
||||
{0, 0},
|
||||
};
|
||||
|
||||
static ModeDesc SmodeDesc[] = {
|
||||
{SMODE_NETADMIN, "Network Administrator"},
|
||||
{SMODE_CONETADMIN, "Co-Network Administrator"},
|
||||
{SMODE_TECHADMIN, "Technical Administrator"},
|
||||
{SMODE_COTECHADMIN, "Co-Technical Administrator"},
|
||||
{SMODE_ADMIN, "Server Administrator"},
|
||||
{SMODE_GUESTADMIN, "Guest Administrator"},
|
||||
{SMODE_COADMIN, "Co-Server Administrator"},
|
||||
{0, 0},
|
||||
};
|
||||
|
||||
/** @brief InitIrcdModes
|
||||
*
|
||||
* Build internal mode tables by translating the protocol information
|
||||
|
@ -126,7 +171,7 @@ UmodeMaskToString(const long Umode)
|
|||
}
|
||||
}
|
||||
UmodeStringBuf[j] = '\0';
|
||||
return(UmodeStringBuf);
|
||||
return UmodeStringBuf;
|
||||
}
|
||||
|
||||
/** @brief UmodeStringToMask
|
||||
|
@ -162,7 +207,7 @@ UmodeStringToMask(const char* UmodeString, long Umode)
|
|||
}
|
||||
tmpmode++;
|
||||
}
|
||||
return(Umode);
|
||||
return Umode;
|
||||
}
|
||||
|
||||
/** @brief SmodeMaskToString
|
||||
|
@ -185,7 +230,7 @@ SmodeMaskToString(const long Smode)
|
|||
}
|
||||
}
|
||||
SmodeStringBuf[j] = '\0';
|
||||
return(SmodeStringBuf);
|
||||
return SmodeStringBuf;
|
||||
}
|
||||
|
||||
/** @brief SmodeStringToMask
|
||||
|
@ -221,7 +266,7 @@ SmodeStringToMask(const char* SmodeString, long Smode)
|
|||
}
|
||||
tmpmode++;
|
||||
}
|
||||
return(Smode);
|
||||
return Smode;
|
||||
}
|
||||
|
||||
/** @brief CUmodeStringToMask
|
||||
|
@ -231,7 +276,7 @@ SmodeStringToMask(const char* SmodeString, long Smode)
|
|||
* @return
|
||||
*/
|
||||
long
|
||||
CUmodeStringToMask(const char* UmodeString, long Umode)
|
||||
CUmodeStringToMask (const char* UmodeString, long Umode)
|
||||
{
|
||||
int add = 0;
|
||||
char* tmpmode;
|
||||
|
@ -257,23 +302,52 @@ CUmodeStringToMask(const char* UmodeString, long Umode)
|
|||
}
|
||||
tmpmode++;
|
||||
}
|
||||
return(Umode);
|
||||
return Umode;
|
||||
}
|
||||
|
||||
int IsBotMode(const char mode)
|
||||
int IsBotMode (const char mode)
|
||||
{
|
||||
if(ircd_umodes[(int)mode].umode & UMODE_BOT) {
|
||||
return 1;
|
||||
return NS_TRUE;
|
||||
}
|
||||
return 0;
|
||||
return NS_FALSE;
|
||||
}
|
||||
|
||||
int GetModeMask(const char mode)
|
||||
int GetUmodeMask (const char mode)
|
||||
{
|
||||
return ircd_umodes[(int)mode].umode;
|
||||
}
|
||||
|
||||
int GetSModeMask(const char mode)
|
||||
int GetSmodeMask (const char mode)
|
||||
{
|
||||
return ircd_smodes[(int)mode].umode;
|
||||
}
|
||||
|
||||
const char * GetUmodeDesc (const unsigned int mask)
|
||||
{
|
||||
ModeDesc* entry;
|
||||
|
||||
entry = UmodeDesc;
|
||||
while(entry->mask) {
|
||||
if (entry->mask == mask) {
|
||||
return entry->desc;
|
||||
}
|
||||
entry ++;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
const char * GetSmodeDesc (const unsigned int mask)
|
||||
{
|
||||
ModeDesc* entry;
|
||||
|
||||
entry = SmodeDesc;
|
||||
while(entry->mask) {
|
||||
if (entry->mask == mask) {
|
||||
return entry->desc;
|
||||
}
|
||||
entry ++;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
|
|
@ -849,7 +849,7 @@ parse (char *line)
|
|||
if (!(*line))
|
||||
return;
|
||||
dlog(DEBUG1, "------------------------BEGIN PARSE-------------------------");
|
||||
dlog(DEBUG1, "RX: %s", line);
|
||||
dlog(DEBUGRX, "%s", line);
|
||||
coreLine = strpbrk (line, " ");
|
||||
if (coreLine) {
|
||||
*coreLine = 0;
|
||||
|
|
Reference in a new issue