more work on mode processing plus fixes in modules

This commit is contained in:
Mark 2004-07-23 16:08:30 +00:00
parent 3c8fb09621
commit 99ba54bf08
11 changed files with 226 additions and 149 deletions

View file

@ -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)

View file

@ -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? */

View file

@ -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++;

View file

@ -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);
}
}

View file

@ -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) {

View file

@ -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"

View file

@ -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;

View file

@ -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 {

View file

@ -51,6 +51,8 @@ const char *loglevels[LOG_LEVELMAX] = {
};
const char *dloglevels[DEBUGMAX] = {
"DEBUGRX",
"DEBUGTX",
"DEBUG1",
"DEBUG2",
"DEBUG3",

View file

@ -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;
}

View file

@ -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;