diff --git a/ChangeLog b/ChangeLog index 2fbf1af5..e2724cb2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -4,6 +4,8 @@ Anything we add/remove/fix/change is in here (even our rants) Fish (F), Mark (M) =============================================================================== * NeoStats * Version 3.0.genesis + - ConnectServ: reverse colour define so default is disabled. (M) + - Core modules now use core config loading system (M) - All socket code now in socks.c for easier upgrade (M) - Early support for module semi auto config designed to perform loading of module config settings or set defaults without the module having to code it. diff --git a/src/bots.c b/src/bots.c index e9db9dae..2e49dd2d 100755 --- a/src/bots.c +++ b/src/bots.c @@ -427,31 +427,36 @@ int bot_nick_change (char *oldnick, char *newnick) { User *u; - Bot *botptr_new, *botptr; + Bot *botptr; + hnode_t *bn; SET_SEGV_LOCATION(); /* First, try to find out if the newnick is unique! */ u = finduser (oldnick); if (!u) { - nlog (LOG_WARNING, "A non-registered bot(%s) attempted to change its nick to %s", oldnick, newnick); + nlog (LOG_WARNING, "Unknown bot %s tried to change nick to %s", oldnick, newnick); return NS_FAILURE; } u = finduser (newnick); - if (!u) { - if ((botptr = findbot (oldnick)) != NULL) { - nlog (LOG_DEBUG3, "Bot %s Changed its nick to %s", oldnick, newnick); - botptr_new = new_bot (newnick); - /* add a brand new user */ - strlcpy (botptr_new->nick, newnick, MAXNICK); - botptr_new->moduleptr->info = botptr->moduleptr->info; - /* Now Delete the Old bot nick */ - del_ns_bot (oldnick); - snick_cmd (oldnick, newnick); - return NS_SUCCESS; - } + if (u) { + nlog (LOG_WARNING, "Bot %s tried to change nick to one that already exists %s", oldnick, newnick); + return NS_FAILURE; } - nlog (LOG_NOTICE, "Couldn't find Bot Nick %s in Bot list", oldnick); - return NS_FAILURE; + bn = hash_lookup (bh, oldnick); + if (!bn) { + nlog (LOG_NOTICE, "Couldn't find bot %s in bot list", oldnick); + return NS_FAILURE; + } + botptr = hnode_get (bn); + /* remove old hash entry */ + hash_delete (bh, bn); + nlog (LOG_DEBUG3, "Bot %s changed nick to %s", oldnick, newnick); + strlcpy (botptr->nick, newnick, MAXNICK); + /* insert new hash entry */ + hash_insert (bh, bn, botptr->nick); + /* send bot nick change */ + snick_cmd (oldnick, newnick); + return NS_SUCCESS; } /** @brief diff --git a/src/channels.c b/src/channels.c index d8ffbb16..c6c8fd8e 100644 --- a/src/channels.c +++ b/src/channels.c @@ -46,6 +46,18 @@ typedef struct Chanmem { hash_t *ch; +extern char quitreason[BUFSIZE]; + +static void +ChanPartHandler (list_t * list, lnode_t * node, void *v) +{ + part_chan ((User *)v, lnode_get (node), quitreason[0] != 0 ? quitreason : NULL); +} + +void PartAllChannels (User* u) +{ + list_process (u->chans, u, ChanPartHandler); +} /** @brief Process the Channel TS Time * @@ -663,7 +675,7 @@ join_chan (const char* nick, const char *chan) if (!ircstrcasecmp ("0", chan)) { /* join 0 is actually part all chans */ nlog (LOG_DEBUG2, "join_chan: parting %s from all channels", u->nick); - list_process (u->chans, u, UserPart); + PartAllChannels (u); return; } c = findchan (chan); diff --git a/src/ircd.c b/src/ircd.c index 1838d66c..8cbafb8f 100644 --- a/src/ircd.c +++ b/src/ircd.c @@ -627,7 +627,7 @@ void do_version (const char* nick, const char *remoteserver) { SET_SEGV_LOCATION(); - numeric (RPL_VERSION, nick, "%s :%s -> %s %s", me.versionfull, me.name, version_date, version_time); + numeric (RPL_VERSION, nick, "%s :%s -> %s %s", me.versionfull, me.name, ns_module_info.build_date, ns_module_info.build_time); ModulesVersion (nick, remoteserver); } @@ -1060,19 +1060,19 @@ ssvsmode_cmd (const char *target, const char *modes) } int -ssvshost_cmd (const char *who, const char *vhost) +ssvshost_cmd (const char *target, const char *vhost) { #ifdef GOTSVSHOST User *u; - u = finduser (who); + u = finduser (target); if (!u) { - nlog (LOG_WARNING, "ssvshost_cmd: can't find user %s", who); + nlog (LOG_WARNING, "ssvshost_cmd: can't find user %s", target); return 0; } strlcpy (u->vhost, vhost, MAXHOST); - send_svshost(me.name, who, vhost); + send_svshost(me.name, target, vhost); #else unsupported_cmd("SVSHOST"); #endif @@ -1507,13 +1507,13 @@ do_client (const char *nick, const char *arg1, const char *TS, void do_kill (const char *nick, const char *reason) { - DelUser (nick, 1, reason); + KillUser (nick, reason); } void do_quit (const char *nick, const char *quitmsg) { - DelUser (nick, 0, quitmsg); + QuitUser (nick, quitmsg); } void diff --git a/src/main.c b/src/main.c index 2e2503d6..e00f75f8 100644 --- a/src/main.c +++ b/src/main.c @@ -263,7 +263,7 @@ get_options (int argc, char **argv) return NS_FAILURE; case 'v': printf ("NeoStats Version %s\n", me.versionfull); - printf ("Compiled: %s at %s\n", version_date, version_time); + printf ("Compiled: %s at %s\n", ns_module_info.build_date, ns_module_info.build_time); printf ("Flag after version number indicates what IRCd NeoStats is compiled for:\n"); printf ("(U31)- Unreal 3.1.x IRCd\n"); printf ("(U32)- Unreal 3.2.x IRCd\n"); diff --git a/src/modules/connectserv/cs.c b/src/modules/connectserv/cs.c index a8c7a49c..6b2ecdaa 100644 --- a/src/modules/connectserv/cs.c +++ b/src/modules/connectserv/cs.c @@ -1,5 +1,5 @@ /* NeoStats - IRC Statistical Services -** Copyright (c) 1999-2004 Adam Rutter, Justin Hammond +** Copyright (c) 1999-2004 Adam Rutter, Justin Hammond, Mark Hetherington ** http://www.neostats.net/ ** ** Portions Copyright (c) 2000-2001 ^Enigma^ @@ -26,10 +26,10 @@ #include "neostats.h" #include "cs.h" -/* Uncomment this line to disable colours in ConnectServ +/* Uncomment this line to enable colours in ConnectServ channel messages */ -/* #define DISABLE_COLOUR_SUPPORT */ +/* #define ENABLE_COLOUR_SUPPORT */ static const char mode_netadmin[]="network administrator"; static const char mode_conetadmin[]="co network administrator"; @@ -44,7 +44,7 @@ static const char mode_locop[]="local operator"; static const char mode_netservice[]="network service"; static const char mode_bot[]="bot"; -#ifdef DISABLE_COLOUR_SUPPORT +#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"; static char msg_signoff[]="\2SIGNOFF\2 %s (%s@%s - %s) has signed off at %s - %s"; @@ -82,8 +82,6 @@ static int cs_event_nick(CmdParams* cmdparams); static int cs_event_server(CmdParams* cmdparams); static int cs_event_squit(CmdParams* cmdparams); -static void LoadConfig(void); - struct cs_cfg { int sign_watch; int kill_watch; @@ -131,6 +129,7 @@ static bot_cmd cs_commands[]= static bot_setting cs_settings[]= { {"NICK", &cs_botinfo.nick, SET_TYPE_NICK, 0, MAXNICK, NS_ULEVEL_ADMIN, "Nick", NULL, ns_help_set_nick, NULL, (void*)"ConnectServ" }, + {"ALTNICK", &cs_botinfo.altnick,SET_TYPE_NICK, 0, MAXNICK, NS_ULEVEL_ADMIN, "AltNick", NULL, ns_help_set_altnick, NULL, (void*)"ConnectServ" }, {"USER", &cs_botinfo.user, SET_TYPE_USER, 0, MAXUSER, NS_ULEVEL_ADMIN, "User", NULL, ns_help_set_user, NULL, (void*)"CS" }, {"HOST", &cs_botinfo.host, SET_TYPE_HOST, 0, MAXHOST, NS_ULEVEL_ADMIN, "Host", NULL, ns_help_set_host, NULL, (void*)"" }, {"REALNAME", &cs_botinfo.realname,SET_TYPE_REALNAME, 0, MAXREALNAME, NS_ULEVEL_ADMIN, "RealName",NULL, ns_help_set_realname, NULL, (void*)"" }, @@ -161,7 +160,7 @@ ModuleEvent module_events[] = { int ModInit(Module* mod_ptr) { cs_module = mod_ptr; - LoadConfig(); + ModuleConfig(cs_module, cs_settings); return 1; } @@ -245,7 +244,6 @@ static int cs_event_quit(CmdParams* cmdparams) free(cmd); free(lcl); return 1; - } } /* Print Disconnection Notice */ @@ -508,37 +506,6 @@ static int cs_event_nick(CmdParams* cmdparams) return 1; } -/* - * Load ConnectServ Configuration file and set defaults if does not exist - */ -static void LoadConfig(void) -{ - char *temp = NULL; - - GetConf((void *) &cs_cfg.sign_watch, CFGBOOL, "SignWatch"); - GetConf((void *) &cs_cfg.kill_watch, CFGBOOL, "KillWatch"); - GetConf((void *) &cs_cfg.mode_watch, CFGBOOL, "ModeWatch"); - GetConf((void *) &cs_cfg.nick_watch, CFGBOOL, "NickWatch"); - GetConf((void *) &cs_cfg.serv_watch, CFGBOOL, "ServWatch"); - GetConf((void *) &cs_cfg.use_exc, CFGBOOL, "Exclusions"; - if(GetConf((void *) &temp, CFGSTR, "Nick") > 0) { - strlcpy(cs_botinfo.nick, temp, MAXNICK); - free(temp); - } - if(GetConf((void *) &temp, CFGSTR, "User") > 0) { - strlcpy(cs_botinfo.user, temp, MAXUSER); - free(temp); - } - if(GetConf((void *) &temp, CFGSTR, "Host") > 0) { - strlcpy(cs_botinfo.host, temp, MAXHOST); - free(temp); - } - if(GetConf((void *) &temp, CFGSTR, "RealName") > 0) { - strlcpy(cs_botinfo.realname, temp, MAXREALNAME); - free(temp); - } -} - static int cs_event_server(CmdParams* cmdparams) { SET_SEGV_LOCATION(); diff --git a/src/modules/hostserv/hostserv.c b/src/modules/hostserv/hostserv.c index 096c8c63..234e5d3d 100644 --- a/src/modules/hostserv/hostserv.c +++ b/src/modules/hostserv/hostserv.c @@ -72,10 +72,9 @@ typedef struct hs_user { #endif static int hs_event_signon(CmdParams* cmdparams); -#if UMODE_REGNICK +#ifdef UMODE_REGNICK static int hs_event_mode(CmdParams* cmdparams); #endif -static int hs_about(CmdParams* cmdparams); static int hs_levels(CmdParams* cmdparams); static int hs_bans(CmdParams* cmdparams); static int hs_login(CmdParams* cmdparams); @@ -85,9 +84,9 @@ static int hs_list(CmdParams* cmdparams); static int hs_view(CmdParams* cmdparams); static int hs_del(CmdParams* cmdparams); -static void hs_listban(User * cmdparams->source.user); -static void hs_addban(User * cmdparams->source.user, char *ban); -static void hs_delban(User * cmdparams->source.user, char *ban); +static void hs_listban(User* u); +static void hs_addban(User* u, char *ban); +static void hs_delban(User* u, char *ban); static void SaveBans(void); static void hsdat(char *nick, char *host, char *vhost, char *pass, char *who); @@ -107,11 +106,11 @@ int ListArryCount = 0; Bot *hs_bot; static BotInfo hs_botinfo = { + "HostServ", + "HostServ", + "HS", "", - "", - "", - "", - "", + "Network virtual host service", }; static Module* hs_module; @@ -130,7 +129,6 @@ ModuleInfo module_info = { static bot_cmd hs_commands[]= { - {"ABOUT", hs_about, 0, 0, hs_help_about, hs_help_about_oneline }, {"ADD", hs_add, 4, (int)&hs_cfg.add, hs_help_add, hs_help_add_oneline }, {"DEL", hs_del, 1, (int)&hs_cfg.del, hs_help_del, hs_help_del_oneline }, {"LIST", hs_list, 0, (int)&hs_cfg.list, hs_help_list, hs_help_list_oneline }, @@ -144,13 +142,14 @@ static bot_cmd hs_commands[]= static bot_setting hs_settings[]= { - {"NICK", &hs_botinfo.nick, SET_TYPE_NICK, 0, MAXNICK, NS_ULEVEL_ADMIN, "Nick", NULL, ns_help_set_nick }, - {"USER", &hs_botinfo.user, SET_TYPE_USER, 0, MAXUSER, NS_ULEVEL_ADMIN, "User", NULL, ns_help_set_user }, - {"HOST", &hs_botinfo.host, SET_TYPE_HOST, 0, MAXHOST, NS_ULEVEL_ADMIN, "Host", NULL, ns_help_set_host }, - {"REALNAME", &hs_botinfo.realname,SET_TYPE_REALNAME, 0, MAXREALNAME, NS_ULEVEL_ADMIN, "RealName",NULL, ns_help_set_realname }, - {"EXPIRE", &hs_cfg.old, SET_TYPE_INT, 0, 99, NS_ULEVEL_ADMIN, "ExpireDays","days",hs_help_set_expire }, - {"HIDDENHOST", &hs_cfg.regnick, SET_TYPE_BOOLEAN, 0, 0, NS_ULEVEL_ADMIN, "UnetVhosts",NULL, hs_help_set_hiddenhost }, - {"HOSTNAME", &hs_cfg.vhostdom, SET_TYPE_STRING, 0, MAXHOST, NS_ULEVEL_ADMIN, "UnetDomain",NULL, hs_help_set_hostname }, + {"NICK", &hs_botinfo.nick, SET_TYPE_NICK, 0, MAXNICK, NS_ULEVEL_ADMIN, "Nick", NULL, ns_help_set_nick, NULL, (void*)"HostServ" }, + {"ALTNICK", &hs_botinfo.altnick,SET_TYPE_NICK, 0, MAXNICK, NS_ULEVEL_ADMIN, "AltNick", NULL, ns_help_set_altnick, NULL, (void*)"HostServ" }, + {"USER", &hs_botinfo.user, SET_TYPE_USER, 0, MAXUSER, NS_ULEVEL_ADMIN, "User", NULL, ns_help_set_user, NULL, (void*)"HS" }, + {"HOST", &hs_botinfo.host, SET_TYPE_HOST, 0, MAXHOST, NS_ULEVEL_ADMIN, "Host", NULL, ns_help_set_host, NULL, (void*)"" }, + {"REALNAME", &hs_botinfo.realname,SET_TYPE_REALNAME, 0, MAXREALNAME, NS_ULEVEL_ADMIN, "RealName",NULL, ns_help_set_realname, NULL, (void*)"Network virtual host service" }, + {"EXPIRE", &hs_cfg.old, SET_TYPE_INT, 0, 99, NS_ULEVEL_ADMIN, "ExpireDays","days",hs_help_set_expire, NULL, (void*)60 }, + {"HIDDENHOST", &hs_cfg.regnick, SET_TYPE_BOOLEAN, 0, 0, NS_ULEVEL_ADMIN, "UnetVhosts",NULL, hs_help_set_hiddenhost, NULL, (void*)0 }, + {"HOSTNAME", &hs_cfg.vhostdom, SET_TYPE_STRING, 0, MAXHOST, NS_ULEVEL_ADMIN, "UnetDomain",NULL, hs_help_set_hostname, NULL, (void*)"" }, {NULL, NULL, 0, 0, 0, 0, NULL, NULL, NULL }, }; @@ -177,24 +176,19 @@ void del_vhost(hs_map *vhost) /* no need to list sort here, because its already sorted */ } -void set_moddata(User *cmdparams->source.user) +void set_moddata(User* u) { hs_user *hs; - if (!cmdparams->source.user->moddata[hs_module->modnum]) { + if (!u->moddata[hs_module->modnum]) { hs = malloc(sizeof(hs_user)); hs->vhostset = 1; - cmdparams->source.user->moddata[hs_module->modnum] = hs; + u->moddata[hs_module->modnum] = hs; } } static int hs_event_quit(CmdParams* cmdparams) { - User *cmdparams->source.user; - - cmdparams->source.user = finduser(cmdparams->av[0]); - if (!cmdparams->source.user) /* User not found */ - return 1; if (cmdparams->source.user->moddata[hs_module->modnum]) { nlog(LOG_DEBUG2, "hs_event_quit: free module data"); free(cmdparams->source.user->moddata[hs_module->modnum]); @@ -208,15 +202,11 @@ static int hs_event_signon(CmdParams* cmdparams) { lnode_t *hn; hs_map *map; - User *cmdparams->source.user; SET_SEGV_LOCATION(); if (!is_synced) return 0; - cmdparams->source.user = finduser(cmdparams->av[0]); - if (!cmdparams->source.user) - return 1; if (IsMe(cmdparams->source.user)) return 1; @@ -275,9 +265,10 @@ int ModInit(Module* mod_ptr) vhosts = list_create(-1); bannedvhosts = hash_create(-1, 0, 0); if (!vhosts) { - nlog(LOG_CRITICAL, "Error, Can't create vhosts hash"); + nlog(LOG_CRITICAL, "Error, can't create vhosts hash"); return -1; } + ModuleConfig(hs_module, hs_settings); LoadConfig(); return 1; } @@ -294,12 +285,11 @@ void ModFini() list_destroy_nodes(vhosts); } -#if UMODE_REGNICK +#ifdef UMODE_REGNICK int hs_event_mode(CmdParams* cmdparams) { int add = 0; char *modes; - User *cmdparams->source.user; char vhost[MAXHOST]; /* bail out if its not enabled */ @@ -310,9 +300,6 @@ int hs_event_mode(CmdParams* cmdparams) if (!is_synced || !load_synch) return 0; - cmdparams->source.user = finduser(cmdparams->av[0]); - if (!cmdparams->source.user) /* User not found */ - return 1; if (is_oper(cmdparams->source.user)) /* don't set a opers vhost. Most likely already done */ return 1; @@ -371,12 +358,6 @@ static void hsdat(char *nick, char *host, char *vhost, char *pass, char *who) save_vhost(map); } -static int hs_about(CmdParams* cmdparams) -{ - privmsg_list(cmdparams->source.user->nick, hs_bot->nick, hs_help_about); - return 1; -} - static int hs_levels(CmdParams* cmdparams) { int t; @@ -460,27 +441,28 @@ static int hs_bans(CmdParams* cmdparams) return NS_ERR_SYNTAX_ERROR; } -static void hs_listban(User * cmdparams->source.user) +static void hs_listban(User* u) { hnode_t *hn; hscan_t hs; - int i = 0; + int i = 1; + hash_scan_begin(&hs, bannedvhosts); - prefmsg(cmdparams->source.user->nick, hs_bot->nick, "Banned vhosts"); + prefmsg(u->nick, hs_bot->nick, "Banned vhosts"); while ((hn = hash_scan_next(&hs)) != NULL) { - prefmsg(cmdparams->source.user->nick, hs_bot->nick, "%d - %s", ++i, - (char *) hnode_get(hn)); + prefmsg(u->nick, hs_bot->nick, "%d - %s", i, (char *)hnode_get(hn)); + i++; } - prefmsg(cmdparams->source.user->nick, hs_bot->nick, "End of List."); + prefmsg(u->nick, hs_bot->nick, "End of List."); } -static void hs_addban(User * cmdparams->source.user, char *ban) +static void hs_addban(User* u, char *ban) { hnode_t *hn; char *host; if (hash_lookup(bannedvhosts, ban) != NULL) { - prefmsg(cmdparams->source.user->nick, hs_bot->nick, + prefmsg(u->nick, hs_bot->nick, "%s already exists in the banned vhost list", ban); return; } @@ -488,14 +470,14 @@ static void hs_addban(User * cmdparams->source.user, char *ban) strlcpy(host, ban, MAXHOST); hn = hnode_create(host); hash_insert(bannedvhosts, hn, host); - prefmsg(cmdparams->source.user->nick, hs_bot->nick, + prefmsg(u->nick, hs_bot->nick, "%s added to the banned vhosts list", ban); chanalert(hs_bot->nick, "%s added %s to the banned vhosts list", - cmdparams->source.user->nick, ban); + u->nick, ban); SaveBans(); } -static void hs_delban(User * cmdparams->source.user, char *ban) +static void hs_delban(User* u, char *ban) { hnode_t *hn; hscan_t hs; @@ -504,7 +486,7 @@ static void hs_delban(User * cmdparams->source.user, char *ban) i = atoi(ban); if ((i < 1) || (i > hash_count(bannedvhosts))) { - prefmsg(cmdparams->source.user->nick, hs_bot->nick, + prefmsg(u->nick, hs_bot->nick, "Invalid Entry. /msg %s bans for the list", hs_bot->nick); return; @@ -515,22 +497,22 @@ static void hs_delban(User * cmdparams->source.user, char *ban) ++j; if (i == j) { hash_scan_delete(bannedvhosts, hn); - prefmsg(cmdparams->source.user->nick, hs_bot->nick, + prefmsg(u->nick, hs_bot->nick, "Deleted %s from the banned vhost list", (char *) hnode_get(hn)); chanalert(hs_bot->nick, "%s deleted %s from the banned vhost list", - cmdparams->source.user->nick, (char *) hnode_get(hn)); + u->nick, (char *) hnode_get(hn)); nlog(LOG_NOTICE, "%s deleted %s from the banned vhost list", - cmdparams->source.user->nick, (char *) hnode_get(hn)); + u->nick, (char *) hnode_get(hn)); free(hnode_get(hn)); hnode_destroy(hn); SaveBans(); return; } } - prefmsg(cmdparams->source.user->nick, hs_bot->nick, "Entry %d was not found (Weird?!?)", i); + prefmsg(u->nick, hs_bot->nick, "Entry %d was not found (Weird?!?)", i); } static void SaveBans() @@ -772,7 +754,6 @@ static void LoadHosts() { hs_map *map; lnode_t *hn; - char buf[BUFSIZE]; char *tmp; int count; char **LoadArry; @@ -922,35 +903,6 @@ static void LoadConfig(void) SET_SEGV_LOCATION(); - if (GetConf((void *) &temp, CFGSTR, "Nick") < 0) { - strlcpy(hs_bot->nick, "HostServ", MAXNICK); - } - else { - strlcpy(hs_bot->nick, temp, MAXNICK); - free(temp); - } - if(GetConf((void *) &temp, CFGSTR, "User") < 0) { - strlcpy(hs_botinfo.user, "HS", MAXUSER); - } - else { - strlcpy(hs_botinfo.user, temp, MAXUSER); - free(temp); - } - if(GetConf((void *) &temp, CFGSTR, "Host") < 0) { - strlcpy(hs_botinfo.host, me.name, MAXHOST); - } - else { - strlcpy(hs_botinfo.host, temp, MAXHOST); - free(temp); - } - if(GetConf((void *) &temp, CFGSTR, "RealName") < 0) { - strlcpy(hs_botinfo.realname, "Network Virtual Host Service", MAXREALNAME); - } - else { - strlcpy(hs_botinfo.realname, temp, MAXREALNAME); - free(temp); - } - GetConf((void *) &hs_cfg.view, CFGINT, "ViewLevel"); if ((hs_cfg.view > NS_ULEVEL_ROOT) || (hs_cfg.list <= 0)) hs_cfg.view = 100; @@ -963,20 +915,6 @@ static void LoadConfig(void) GetConf((void *) &hs_cfg.list, CFGINT, "ListLevel"); if ((hs_cfg.list > NS_ULEVEL_ROOT) || (hs_cfg.list <= 0)) hs_cfg.list = 40; - if(GetConf((void *) &hs_cfg.old, CFGINT, "ExpireDays") < 0) { - hs_cfg.old = 60; - } - GetConf((void *) &hs_cfg.regnick, CFGBOOL, "UnetVhosts"); - if (hs_cfg.regnick < 0) { - hs_cfg.regnick = 0; - } - if (GetConf((void *) &temp, CFGSTR, "UnetDomain") > 0) { - strlcpy(hs_cfg.vhostdom, temp, MAXHOST); - free(temp); - } else { - hs_cfg.vhostdom[0] = '\0'; - } - /* banned vhosts */ if (GetConf((void *) &temp, CFGSTR, "BannedVhosts") >= 0) { host = strtok(temp, ";"); diff --git a/src/modules/loveserv/loveserv.c b/src/modules/loveserv/loveserv.c index 9d493cf8..3a417d40 100644 --- a/src/modules/loveserv/loveserv.c +++ b/src/modules/loveserv/loveserv.c @@ -26,17 +26,6 @@ #include "neostats.h" #include "loveserv.h" -static Bot *ls_bot; -static BotInfo ls_botinfo = -{ - "LoveServ", - "LoveServ", - "LS", - "", - "Network love service", -}; -static Module* ls_module; - static int ls_rose(CmdParams* cmdparams); static int ls_kiss(CmdParams* cmdparams); static int ls_tonsil(CmdParams* cmdparams); @@ -48,6 +37,9 @@ static int ls_lovenote(CmdParams* cmdparams); static int ls_apology(CmdParams* cmdparams); static int ls_thankyou(CmdParams* cmdparams); +static Bot *ls_bot; +static Module* ls_module; + ModuleInfo module_info = { "LoveServ", "Network love service", @@ -61,6 +53,15 @@ ModuleInfo module_info = { 0, }; +static BotInfo ls_botinfo = +{ + "LoveServ", + "LoveServ", + "LS", + "", + "Network love service", +}; + static bot_cmd ls_commands[]= { {"ROSE", ls_rose, 1, 0, ls_help_rose, ls_help_rose_oneline }, @@ -78,13 +79,14 @@ static bot_cmd ls_commands[]= static bot_setting ls_settings[]= { - {"NICK", &ls_botinfo.nick, SET_TYPE_NICK, 0, MAXNICK, NS_ULEVEL_ADMIN, "Nick", NULL, ns_help_set_nick, NULL, (void*)"" }, - {"USER", &ls_botinfo.user, SET_TYPE_USER, 0, MAXUSER, NS_ULEVEL_ADMIN, "User", NULL, ns_help_set_user, NULL, (void*)"" }, + {"NICK", &ls_botinfo.nick, SET_TYPE_NICK, 0, MAXNICK, NS_ULEVEL_ADMIN, "Nick", NULL, ns_help_set_nick, NULL, (void*)"LoveServ" }, + {"ALTNICK", &ls_botinfo.altnick,SET_TYPE_NICK, 0, MAXNICK, NS_ULEVEL_ADMIN, "AltNick", NULL, ns_help_set_altnick, NULL, (void*)"LoveServ" }, + {"USER", &ls_botinfo.user, SET_TYPE_USER, 0, MAXUSER, NS_ULEVEL_ADMIN, "User", NULL, ns_help_set_user, NULL, (void*)"LS" }, {"HOST", &ls_botinfo.host, SET_TYPE_HOST, 0, MAXHOST, NS_ULEVEL_ADMIN, "Host", NULL, ns_help_set_host, NULL, (void*)"" }, - {"REALNAME",&ls_botinfo.realname,SET_TYPE_REALNAME, 0, MAXREALNAME, NS_ULEVEL_ADMIN, "RealName",NULL, ns_help_set_realname, NULL, (void*)"" }, + {"REALNAME",&ls_botinfo.realname,SET_TYPE_REALNAME, 0, MAXREALNAME, NS_ULEVEL_ADMIN, "RealName",NULL, ns_help_set_realname, NULL, (void*)"Network love service" }, }; -static int ls_event_online(char **av, int ac) +static int ls_event_online(CmdParams* cmdparams) { ls_bot = init_bot(ls_module, &ls_botinfo, services_bot_modes, BOT_FLAG_DEAF, ls_commands, ls_settings); return 1; @@ -97,24 +99,7 @@ ModuleEvent module_events[] = { int ModInit(Module* mod_ptr) { - char *temp = NULL; - - if(GetConf((void *) &temp, CFGSTR, "Nick") > 0) { - strlcpy(ls_botinfo.nick , temp, MAXNICK); - free(temp); - } - if(GetConf((void *) &temp, CFGSTR, "User") > 0) { - strlcpy(ls_botinfo.user, temp, MAXUSER); - free(temp); - } - if(GetConf((void *) &temp, CFGSTR, "Host") > 0) { - strlcpy(ls_botinfo.host, temp, MAXHOST); - free(temp); - } - if(GetConf((void *) &temp, CFGSTR, "RealName") > 0) { - strlcpy(ls_botinfo.realname, temp, MAXREALNAME); - free(temp); - } + ModuleConfig(ls_module, ls_settings); return 1; } diff --git a/src/modules/moraleserv/ms.c b/src/modules/moraleserv/ms.c index c6c600d5..6e53897c 100644 --- a/src/modules/moraleserv/ms.c +++ b/src/modules/moraleserv/ms.c @@ -75,6 +75,7 @@ static bot_cmd ms_commands[]= static bot_setting ms_settings[]= { {"NICK", &ms_botinfo.nick, SET_TYPE_NICK, 0, MAXNICK, NS_ULEVEL_ADMIN, "Nick", NULL, ns_help_set_nick, NULL, (void*)"MoraleServ" }, + {"ALTNICK", &ms_botinfo.altnick,SET_TYPE_NICK, 0, MAXNICK, NS_ULEVEL_ADMIN, "AltNick", NULL, ns_help_set_altnick, NULL, (void*)"MoraleServ" }, {"USER", &ms_botinfo.user, SET_TYPE_USER, 0, MAXUSER, NS_ULEVEL_ADMIN, "User", NULL, ns_help_set_user, NULL, (void*)"MS" }, {"HOST", &ms_botinfo.host, SET_TYPE_HOST, 0, MAXHOST, NS_ULEVEL_ADMIN, "Host", NULL, ns_help_set_host, NULL, (void*)"" }, {"REALNAME",&ms_botinfo.realname,SET_TYPE_REALNAME, 0, MAXREALNAME, NS_ULEVEL_ADMIN, "RealName",NULL, ns_help_set_realname, NULL, (void*)"Network morale service" }, @@ -93,24 +94,7 @@ ModuleEvent module_events[] = { int ModInit(Module* mod_ptr) { - char *temp = NULL; - - if(GetConf((void *) &temp, CFGSTR, "Nick") > 0) { - strlcpy(ms_botinfo.nick , temp, MAXNICK); - free(temp); - } - if(GetConf((void *) &temp, CFGSTR, "User") > 0) { - strlcpy(ms_botinfo.user, temp, MAXUSER); - free(temp); - } - if(GetConf((void *) &temp, CFGSTR, "Host") > 0) { - strlcpy(ms_botinfo.host, temp, MAXHOST); - free(temp); - } - if(GetConf((void *) &temp, CFGSTR, "RealName") > 0) { - strlcpy(ms_botinfo.realname, temp, MAXREALNAME); - free(temp); - } + ModuleConfig(ms_module, ms_settings); return 1; } diff --git a/src/modules/statserv/stats.c b/src/modules/statserv/stats.c index a06e37b8..826a319e 100755 --- a/src/modules/statserv/stats.c +++ b/src/modules/statserv/stats.c @@ -27,9 +27,8 @@ static char announce_buf[BUFSIZE]; -static int StatsMidnight(void); static int ss_event_ctcpversion(CmdParams* cmdparams); -static int ss_event_online(CmdParams* cmdparams); +int ss_event_online(CmdParams* cmdparams); static int ss_event_pong(CmdParams* cmdparams); static int ss_event_away(CmdParams* cmdparams); static int ss_event_server(CmdParams* cmdparams); @@ -85,61 +84,49 @@ static int check_interval() return 1; } -static int +static void +announce(int announcetype, const char *msg) +{ + switch(announcetype) { + case 3: + wallops (ss_bot->nick, "%s", msg); + break; + case 2: + globops (ss_bot->nick, "%s", msg); + break; + case 1: + default: + chanalert (ss_bot->nick, "%s", msg); + break; + } +} + +static void announce_record(const char *msg, ...) { va_list ap; - if(StatServ.recordalert < 0) { - return 1; + if(StatServ.recordalert < 0 || check_interval() < 0) { + return; } - if (check_interval() > 0) { - va_start (ap, msg); - ircvsnprintf (announce_buf, BUFSIZE, msg, ap); - va_end (ap); - switch(StatServ.recordalert) { - case 3: - wallops (ss_bot->nick, "%s", announce_buf); - break; - case 2: - globops (ss_bot->nick, "%s", announce_buf); - break; - case 1: - default: - chanalert (ss_bot->nick, "%s", announce_buf); - break; - } - } - return 1; + va_start (ap, msg); + ircvsnprintf (announce_buf, BUFSIZE, msg, ap); + va_end (ap); + announce(StatServ.recordalert, announce_buf); } -static int +static void announce_lag(const char *msg, ...) { va_list ap; - if(StatServ.lagalert < 0) { - return 1; + if(StatServ.lagalert < 0 || check_interval() < 0) { + return; } - - if (check_interval() > 0) { - va_start (ap, msg); - ircvsnprintf (announce_buf, BUFSIZE, msg, ap); - va_end (ap); - switch(StatServ.lagalert) { - case 3: - wallops (ss_bot->nick, "%s", announce_buf); - break; - case 2: - globops (ss_bot->nick, "%s", announce_buf); - break; - case 1: - default: - chanalert (ss_bot->nick, "%s", announce_buf); - break; - } - } - return 1; + va_start (ap, msg); + ircvsnprintf (announce_buf, BUFSIZE, msg, ap); + va_end (ap); + announce(StatServ.lagalert, announce_buf); } static CVersions *findversions(char *name) @@ -200,13 +187,13 @@ int ss_event_ctcpversion(CmdParams* cmdparams) { lnode_t *node; CVersions *clientv; - char *nocols = cmdparams->cmdparams->av[1]; + char *nocols = cmdparams->av[1]; strip_mirc_codes(nocols); clientv = findversions(nocols); if (clientv) { - nlog(LOG_DEBUG2, "Found Client Version Node %s", nocols); + nlog(LOG_DEBUG2, "Found version: %s", nocols); clientv->count++; return 1; } @@ -215,8 +202,7 @@ int ss_event_ctcpversion(CmdParams* cmdparams) clientv->count = 1; node = lnode_create(clientv); list_append(Vhead, node); - nlog(LOG_DEBUG2, "Added Version to List %s", - clientv->name); + nlog(LOG_DEBUG2, "Added version: %s", clientv->name); return 1; } @@ -261,7 +247,7 @@ int ss_event_delchan(CmdParams* cmdparams) lnode_destroy(ln); free(cs); } else { - nlog(LOG_WARNING, "Ehhh, Couldn't find channel %s when deleting out of stats", cmdparams->av[0]); + nlog(LOG_WARNING, "Couldn't find channel %s when deleting from stats", cmdparams->av[0]); } return 1; } @@ -305,7 +291,7 @@ int ss_event_part(CmdParams* cmdparams) { CStats *cs; /* only check exclusions after increasing channel count */ - if (StatServ.exclusions && (IsExcluded(cmdparams->channel)|| IsExcluded(cmdparams->source.user)))) { + if (StatServ.exclusions && (IsExcluded(cmdparams->channel) || IsExcluded(cmdparams->source.user))) { return 1; } cs = findchanstats(cmdparams->channel->name); @@ -329,6 +315,7 @@ int ss_event_topic(CmdParams* cmdparams) } return 1; } + int ss_event_kick(CmdParams* cmdparams) { CStats *cs; @@ -337,7 +324,6 @@ int ss_event_kick(CmdParams* cmdparams) if (StatServ.exclusions && IsExcluded(cmdparams->channel)) { return 1; } - cs = findchanstats(cmdparams->channel->name); if (cs) { IncreaseKicks(cs); @@ -347,13 +333,13 @@ int ss_event_kick(CmdParams* cmdparams) } } return 1; - } CStats *findchanstats(char *name) { CStats *cs; lnode_t *cn; + cn = list_find(Chead, name, comparef); if (cn) { cs = lnode_get(cn); @@ -388,6 +374,7 @@ int ss_event_server(CmdParams* cmdparams) int ss_event_squit(CmdParams* cmdparams) { SStats *ss; + SET_SEGV_LOCATION(); DecreaseServers(); ss = findstats(cmdparams->source.server->name); @@ -452,7 +439,6 @@ int ss_event_mode(CmdParams* cmdparams) "Unable to find stats for %s", cmdparams->source.user->server->name); return -1; } - modes = cmdparams->av[1]; while (*modes) { switch (*modes) { @@ -567,13 +553,10 @@ int ss_event_signon(CmdParams* cmdparams) announce_record("\2NEW NETWORK RECORD!\2 Wow, a New Global User record has been reached with %ld users!", stats_network.users); } - if (stats_network.users > daily.users) { daily.users = stats_network.users; daily.t_users = me.now; } - - return 1; } @@ -585,12 +568,9 @@ int ss_event_pong(CmdParams* cmdparams) /* we don't want negative pings! */ if (cmdparams->source.server->ping < 0) return -1; - - ss = findstats(cmdparams->source.server->name); if (!ss) return -1; - /* this is a tidy up from old versions of StatServ that used to have negative pings! */ if (ss->lowest_ping < 0) { ss->lowest_ping = 0; @@ -598,7 +578,6 @@ int ss_event_pong(CmdParams* cmdparams) if (ss->highest_ping < 0) { ss->highest_ping = 0; } - if (cmdparams->source.server->ping > ss->highest_ping) { ss->highest_ping = cmdparams->source.server->ping; ss->t_highest_ping = me.now; @@ -607,40 +586,11 @@ int ss_event_pong(CmdParams* cmdparams) ss->lowest_ping = cmdparams->source.server->ping; ss->t_lowest_ping = me.now; } - /* ok, updated the statistics, now lets see if this server is "lagged out" */ if (cmdparams->source.server->ping > StatServ.lagtime) { announce_lag("\2%s\2 is lagged out with a ping of %d", cmdparams->source.server->name, cmdparams->source.server->ping); } - - return 1; -} - -extern bot_cmd ss_commands[]; -extern bot_setting ss_settings[]; -Bot *ss_bot; -BotInfo ss_botinfo = -{ - "", - "", - "", - "", - "", -}; -Module* ss_module; - -int ss_event_online(CmdParams* cmdparams) -{ - SET_SEGV_LOCATION(); - ss_bot = init_bot (ss_module, &ss_botinfo, services_bot_modes, BOT_FLAG_RESTRICT_OPERS|BOT_FLAG_DEAF, ss_commands, ss_settings); - StatServ.onchan = 1; - /* now that we are online, setup the timer to save the Stats database every so often */ - add_timer (ss_module, SaveStats, "SaveStats", DBSAVETIME); - add_timer (ss_module, ss_html, "ss_html", 3600); - /* also add a timer to check if its midnight (to reset the daily stats */ - add_timer (ss_module, StatsMidnight, "StatsMidnight", 60); - add_timer (ss_module, DelOldChan, "DelOldChan", 3600); return 1; } @@ -651,7 +601,7 @@ SStats *new_stats(const char *name) SET_SEGV_LOCATION(); nlog(LOG_DEBUG2, "new_stats(%s)", name); - s = scalloc(sizeof(SStats), 1); + s = scalloc(sizeof(SStats)); if (!s) { FATAL_ERROR("Out of memory.") } @@ -665,7 +615,7 @@ SStats *new_stats(const char *name) sn = hnode_create(s); if (hash_isfull(Shead)) { nlog(LOG_CRITICAL, "StatServ Server hash is full!"); - free s; + free(s); return NULL; } hash_insert(Shead, sn, s->name); diff --git a/src/modules/statserv/statserv.c b/src/modules/statserv/statserv.c index ae5da25a..72968f12 100644 --- a/src/modules/statserv/statserv.c +++ b/src/modules/statserv/statserv.c @@ -38,14 +38,14 @@ static int ss_operlist(CmdParams* cmdparams); #ifdef GOTBOTMODE static int ss_botlist(CmdParams* cmdparams); #endif -static int ss_version(CmdParams* cmdparams); -static int ss_about(CmdParams* cmdparams); static int ss_server(CmdParams* cmdparams); static int ss_map(CmdParams* cmdparams); static int ss_netstats(CmdParams* cmdparams); static int ss_clientversions(CmdParams* cmdparams); static int ss_forcehtml(CmdParams* cmdparams); -static void ss_Config(void); + +Bot *ss_bot; +static Module* ss_module; ModuleInfo module_info = { "statserv", @@ -60,72 +60,69 @@ ModuleInfo module_info = { 0, }; -static void ss_Config(void) +static BotInfo ss_botinfo = { - char *tmp; + "StatServ", + "StatServ", + "SS", + "", + "Statistics service", +}; +static bot_cmd ss_commands[]= +{ + {"SERVER", ss_server, 0, 0, ss_help_server, ss_help_server_oneline}, + {"MAP", ss_map, 0, 0, ss_help_map, ss_help_map_oneline}, + {"CHAN", ss_chans, 0, 0, ss_help_chan, ss_help_chan_oneline}, + {"NETSTATS", ss_netstats, 0, 0, ss_help_netstats, ss_help_netstats_oneline}, + {"DAILY", ss_daily, 0, 0, ss_help_daily, ss_help_daily_oneline}, + {"TLDMAP", ss_tld_map, 0, 0, ss_help_tldmap, ss_help_tldmap_oneline}, + {"OPERLIST", ss_operlist, 0, 0, ss_help_operlist, ss_help_operlist_oneline}, +#ifdef GOTBOTMODE + {"BOTLIST", ss_botlist, 0, 0, ss_help_botlist, ss_help_botlist_oneline}, +#endif + {"CLIENTVERSIONS", ss_clientversions, 0, 0, ss_help_clientversions, ss_help_clientversions_oneline}, + {"FORCEHTML", ss_forcehtml, 0, NS_ULEVEL_ADMIN, ss_help_forcehtml, ss_help_forcehtml_oneline}, + {"STATS", ss_stats, 1, NS_ULEVEL_ADMIN, ss_help_stats, ss_help_stats_oneline}, + {NULL, NULL, 0, 0, NULL, NULL} +}; + +static bot_setting ss_settings[]= +{ + {"NICK", &ss_botinfo.nick, SET_TYPE_NICK, 0, MAXNICK, NS_ULEVEL_ADMIN, "Nick", NULL, ns_help_set_nick, NULL, (void*)"StatServ" }, + {"ALTNICK", &ss_botinfo.altnick, SET_TYPE_NICK, 0, MAXNICK, NS_ULEVEL_ADMIN, "AltNick", NULL, ns_help_set_altnick, NULL, (void*)"StatServ" }, + {"USER", &ss_botinfo.user, SET_TYPE_USER, 0, MAXUSER, NS_ULEVEL_ADMIN, "User", NULL, ns_help_set_user, NULL, (void*)"SS" }, + {"HOST", &ss_botinfo.host, SET_TYPE_HOST, 0, MAXHOST, NS_ULEVEL_ADMIN, "Host", NULL, ns_help_set_host, NULL, (void*)"" }, + {"REALNAME", &ss_botinfo.realname, SET_TYPE_REALNAME, 0, MAXREALNAME, NS_ULEVEL_ADMIN, "RealName", NULL, ns_help_set_realname, NULL, (void*)"Statistics service" }, + {"HTML", &StatServ.html, SET_TYPE_BOOLEAN, 0, 0, NS_ULEVEL_ADMIN, "HTML_Enabled",NULL, ss_help_set_html}, + {"HTMLPATH", &StatServ.htmlpath, SET_TYPE_STRING, 0, MAXPATH, NS_ULEVEL_ADMIN, "HTML_Path", NULL, ss_help_set_htmlpath }, + {"MSGINTERVAL", &StatServ.msginterval, SET_TYPE_INT, 1, 99, NS_ULEVEL_ADMIN, "MsgInterval", "seconds", ss_help_set_msginterval }, + {"MSGLIMIT", &StatServ.msglimit, SET_TYPE_INT, 1, 99, NS_ULEVEL_ADMIN, "MsgLimit", NULL, ss_help_set_msglimit }, + {"LAGTIME", &StatServ.lagtime, SET_TYPE_INT, 1, 256, NS_ULEVEL_ADMIN, "LagTime", "seconds", ss_help_set_lagtime }, + {"LAGALERT", &StatServ.lagalert, SET_TYPE_INT, 0, 3, NS_ULEVEL_ADMIN, "LagAlert", NULL, ss_help_set_lagalert }, + {"RECORDALERT", &StatServ.recordalert, SET_TYPE_INT, 0, 3, NS_ULEVEL_ADMIN, "RecordAlert", NULL, ss_help_set_recordalert }, + {"USEEXCLUSIONS",&StatServ.exclusions, SET_TYPE_BOOLEAN, 0, 0, NS_ULEVEL_ADMIN, "Exclusions", NULL, ss_help_set_exclusions }, + {NULL, NULL, 0, 0, 0, 0, NULL, NULL, NULL }, +}; + +int ss_event_online(CmdParams* cmdparams) +{ SET_SEGV_LOCATION(); - - if (GetConf((void *) &tmp, CFGSTR, "Nick") < 0) { - strlcpy(ss_botinfo.nick, "StatServ", MAXNICK); - } else { - strlcpy(ss_botinfo.nick, tmp, MAXNICK); - free(tmp); - } - if (GetConf((void *) &tmp, CFGSTR, "User") < 0) { - strlcpy(ss_botinfo.user, "SS", MAXUSER); - } else { - strlcpy(ss_botinfo.user, tmp, MAXUSER); - free(tmp); - } - if (GetConf((void *) &tmp, CFGSTR, "Host") < 0) { - strlcpy(ss_botinfo.host, me.name, MAXHOST); - } else { - strlcpy(ss_botinfo.host, tmp, MAXHOST); - free(tmp); - } - if (GetConf((void *) &tmp, CFGSTR, "RealName") < 0) { - ircsnprintf(ss_botinfo.realname, MAXREALNAME, "/msg %s help", - ss_botinfo.nick); - } else { - strlcpy(ss_botinfo.realname, tmp, MAXREALNAME); - free(tmp); - } - if (GetConf((void *) &StatServ.lagtime, CFGINT, "LagTime") < 0) { - StatServ.lagtime = 30; - } - if (GetConf((void *) &StatServ.exclusions, CFGBOOL, "Exclusions") < 0) { - StatServ.exclusions = 0; - } - if (GetConf((void *) &StatServ.lagalert, CFGINT, "LagAlert") < 0) { - StatServ.lagalert = 1; - } - if (GetConf((void *) &StatServ.recordalert, CFGINT, "RecordAlert") < 0) { - StatServ.recordalert = 1; - } - if (GetConf((void *) &StatServ.msginterval , CFGINT, "MsgInterval") < 0) { - StatServ.msginterval = 60; - } - if (GetConf((void *) &StatServ.msglimit , CFGINT, "MsgLimit") < 0) { - StatServ.msglimit = 5; - } - if (GetConf((void *) &tmp, CFGSTR, "HTML_Path") < 0) { - StatServ.html = 0; - StatServ.htmlpath[0] = 0; - } else { - /* assume that html is enabled if we don't have a setting for it */ - if (GetConf((void *) &StatServ.html, CFGINT, "HTML_Enabled") < 0) { - StatServ.html = 1; - } - strlcpy(StatServ.htmlpath, tmp, MAXPATH); - free(tmp); - } + ss_bot = init_bot (ss_module, &ss_botinfo, services_bot_modes, BOT_FLAG_RESTRICT_OPERS|BOT_FLAG_DEAF, ss_commands, ss_settings); + StatServ.onchan = 1; + /* now that we are online, setup the timer to save the Stats database every so often */ + add_timer (ss_module, SaveStats, "SaveStats", DBSAVETIME); + add_timer (ss_module, ss_html, "ss_html", 3600); + /* also add a timer to check if its midnight (to reset the daily stats */ + add_timer (ss_module, StatsMidnight, "StatsMidnight", 60); + add_timer (ss_module, DelOldChan, "DelOldChan", 3600); + return 1; } int ModInit(Module* mod_ptr) { Server *ss; - User *cmdparams->source.user; + User *u; hnode_t *node; hscan_t scan; #ifdef SQLSRV @@ -133,8 +130,8 @@ int ModInit(Module* mod_ptr) #endif int count, i; Channel *c; - char **cmdparams->av; - int cmdparams->ac = 0; + char **av; + int ac = 0; char *chan; lnode_t *chanmem; @@ -146,7 +143,7 @@ int ModInit(Module* mod_ptr) /* we want nickip messages */ me.want_nickip = 1; - ss_Config(); + ModuleConfig(ss_module, ss_settings); if (StatServ.html && StatServ.htmlpath[0] == 0) { nlog(LOG_NOTICE, "StatServ HTML stats disabled as HTML_PATH is not set"); @@ -158,24 +155,24 @@ int ModInit(Module* mod_ptr) hash_scan_begin(&scan, sh); while ((node = hash_scan_next(&scan)) != NULL) { ss = hnode_get(node); - cmdparams->ac = 0; - AddStringToList(&cmdparams->av, ss->name, &cmdparams->ac); - ss_event_server(cmdparams->av, cmdparams->ac); - free(cmdparams->av); - cmdparams->ac = 0; + ac = 0; + AddStringToList(&av, ss->name, &ac); + ss_event_server(av, ac); + free(av); + ac = 0; nlog(LOG_DEBUG2, "Added Server %s to StatServ List", ss->name); } hash_scan_begin(&scan, uh); while ((node = hash_scan_next(&scan)) != NULL) { - cmdparams->source.user = hnode_get(node); - cmdparams->ac = 0; - AddStringToList(&cmdparams->av, cmdparams->source.user->nick, &cmdparams->ac); - ss_event_signon(cmdparams->av, cmdparams->ac); - AddStringToList(&cmdparams->av, cmdparams->source.user->modes, &cmdparams->ac); - ss_event_mode(cmdparams->av, cmdparams->ac); - free(cmdparams->av); - cmdparams->ac = 0; - nlog(LOG_DEBUG2, "Add user %s to StatServ List", cmdparams->source.user->nick); + u = hnode_get(node); + ac = 0; + AddStringToList(&av, u->nick, &ac); + ss_event_signon(av, ac); + AddStringToList(&av, u->modes, &ac); + ss_event_mode(av, ac); + free(av); + ac = 0; + nlog(LOG_DEBUG2, "Add user %s to StatServ List", u->nick); } hash_scan_begin(&scan, ch); while ((node = hash_scan_next(&scan)) != NULL) { @@ -183,22 +180,21 @@ int ModInit(Module* mod_ptr) count = list_count(c->chanmembers); chanmem = list_first(c->chanmembers); chan = lnode_get(chanmem); - cmdparams->ac = 0; - AddStringToList(&cmdparams->av, c->name, &cmdparams->ac); - ss_event_newchan(cmdparams->av, cmdparams->ac); - free(cmdparams->av); - cmdparams->ac = 0; + ac = 0; + AddStringToList(&av, c->name, &ac); + ss_event_newchan(av, ac); + free(av); + ac = 0; for (i = 1; i <= count; i++) { nlog(LOG_DEBUG2, "Chanjoin %s", c->name); - cmdparams->ac = 0; - AddStringToList(&cmdparams->av, c->name, &cmdparams->ac); - AddStringToList(&cmdparams->av, chan, &cmdparams->ac); - ss_event_join(cmdparams->av, cmdparams->ac); - free(cmdparams->av); - cmdparams->ac = 0; + ac = 0; + AddStringToList(&av, c->name, &ac); + AddStringToList(&av, chan, &ac); + ss_event_join(av, ac); + free(av); + ac = 0; if (i < count) { - chanmem = - list_next(c->chanmembers, chanmem); + chanmem = list_next(c->chanmembers, chanmem); chan = lnode_get(chanmem); } } @@ -254,43 +250,6 @@ void ModFini() #endif } -bot_cmd ss_commands[]= -{ - {"ABOUT", ss_about, 0, 0, ss_help_about, ss_help_about_oneline}, - {"VERSION", ss_version, 0, 0, ss_help_version, ss_help_version_oneline}, - {"SERVER", ss_server, 0, 0, ss_help_server, ss_help_server_oneline}, - {"MAP", ss_map, 0, 0, ss_help_map, ss_help_map_oneline}, - {"CHAN", ss_chans, 0, 0, ss_help_chan, ss_help_chan_oneline}, - {"NETSTATS", ss_netstats, 0, 0, ss_help_netstats, ss_help_netstats_oneline}, - {"DAILY", ss_daily, 0, 0, ss_help_daily, ss_help_daily_oneline}, - {"TLDMAP", ss_tld_map, 0, 0, ss_help_tldmap, ss_help_tldmap_oneline}, - {"OPERLIST", ss_operlist, 0, 0, ss_help_operlist, ss_help_operlist_oneline}, -#ifdef GOTBOTMODE - {"BOTLIST", ss_botlist, 0, 0, ss_help_botlist, ss_help_botlist_oneline}, -#endif - {"CLIENTVERSIONS", ss_clientversions, 0, 0, ss_help_clientversions, ss_help_clientversions_oneline}, - {"FORCEHTML", ss_forcehtml, 0, NS_ULEVEL_ADMIN, ss_help_forcehtml, ss_help_forcehtml_oneline}, - {"STATS", ss_stats, 1, NS_ULEVEL_ADMIN, ss_help_stats, ss_help_stats_oneline}, - {NULL, NULL, 0, 0, NULL, NULL} -}; - -bot_setting ss_settings[]= -{ - {"NICK", &ss_botinfo.nick, SET_TYPE_NICK, 0, MAXNICK, NS_ULEVEL_ADMIN, "Nick", NULL, ns_help_set_nick }, - {"USER", &ss_botinfo.user, SET_TYPE_USER, 0, MAXUSER, NS_ULEVEL_ADMIN, "User", NULL, ns_help_set_user }, - {"HOST", &ss_botinfo.host, SET_TYPE_HOST, 0, MAXHOST, NS_ULEVEL_ADMIN, "Host", NULL, ns_help_set_host }, - {"REALNAME", &ss_botinfo.realname, SET_TYPE_REALNAME, 0, MAXREALNAME, NS_ULEVEL_ADMIN, "RealName", NULL, ns_help_set_realname }, - {"HTML", &StatServ.html, SET_TYPE_BOOLEAN, 0, 0, NS_ULEVEL_ADMIN, "HTML_Enabled",NULL, ss_help_set_html}, - {"HTMLPATH", &StatServ.htmlpath, SET_TYPE_STRING, 0, MAXPATH, NS_ULEVEL_ADMIN, "HTML_Path", NULL, ss_help_set_htmlpath }, - {"MSGINTERVAL", &StatServ.msginterval, SET_TYPE_INT, 1, 99, NS_ULEVEL_ADMIN, "MsgInterval", "seconds", ss_help_set_msginterval }, - {"MSGLIMIT", &StatServ.msglimit, SET_TYPE_INT, 1, 99, NS_ULEVEL_ADMIN, "MsgLimit", NULL, ss_help_set_msglimit }, - {"LAGTIME", &StatServ.lagtime, SET_TYPE_INT, 1, 256, NS_ULEVEL_ADMIN, "LagTime", "seconds", ss_help_set_lagtime }, - {"LAGALERT", &StatServ.lagalert, SET_TYPE_INT, 0, 3, NS_ULEVEL_ADMIN, "LagAlert", NULL, ss_help_set_lagalert }, - {"RECORDALERT", &StatServ.recordalert, SET_TYPE_INT, 0, 3, NS_ULEVEL_ADMIN, "RecordAlert", NULL, ss_help_set_recordalert }, - {"USEEXCLUSIONS",&StatServ.exclusions, SET_TYPE_BOOLEAN, 0, 0, NS_ULEVEL_ADMIN, "Exclusions", NULL, ss_help_set_exclusions }, - {NULL, NULL, 0, 0, 0, 0, NULL, NULL, NULL }, -}; - int topchan(const void *key1, const void *key2) { const CStats *chan1 = key1; @@ -541,22 +500,6 @@ static int ss_tld_map(CmdParams* cmdparams) return 1; } -static int ss_version(CmdParams* cmdparams) -{ - SET_SEGV_LOCATION(); - prefmsg(cmdparams->source.user->nick, ss_bot->nick, "\2%s Version Information\2", ss_bot->nick); - prefmsg(cmdparams->source.user->nick, ss_bot->nick, "%s Version: %s Compiled %s at %s", ss_bot->nick, - module_info.version, module_info.build_date, module_info.build_time); - prefmsg(cmdparams->source.user->nick, ss_bot->nick, "http://www.neostats.net"); - return 1; -} - -static int ss_about(CmdParams* cmdparams) -{ - privmsg_list(cmdparams->source.user->nick, ss_bot->nick, ss_help_about); - return 1; -} - static int ss_netstats(CmdParams* cmdparams) { SET_SEGV_LOCATION(); @@ -601,7 +544,7 @@ static int ss_daily(CmdParams* cmdparams) return 1; } -static void makemap(char *uplink, User * cmdparams->source.user, int level) +static void makemap(char *uplink, User * u, int level) { hscan_t hs; hnode_t *sn; @@ -617,27 +560,27 @@ static void makemap(char *uplink, User * cmdparams->source.user, int level) if ((level == 0) && (s->uplink[0] == 0)) { /* its the root server */ if (StatServ.exclusions && IsExcluded(s)) { - makemap(s->name, cmdparams->source.user, level); + makemap(s->name, u, level); } - prefmsg(cmdparams->source.user->nick, ss_bot->nick, + prefmsg(u->nick, ss_bot->nick, "\2%-45s [ %d/%d ] [ %d/%d ] [ %ld/%ld ]", ss->name, ss->users, (int)ss->maxusers, ss->opers, ss->maxopers, (long)s->ping, ss->highest_ping); - makemap(s->name, cmdparams->source.user, level + 1); + makemap(s->name, u, level + 1); } else if ((level > 0) && !ircstrcasecmp(uplink, s->uplink)) { if (StatServ.exclusions && IsExcluded(s)) { - makemap(s->name, cmdparams->source.user, level); + makemap(s->name, u, level); } /* its not the root server */ buf[0]='\0'; for (i = 1; i < level; i++) { strlcat (buf, " |", 256); } - prefmsg(cmdparams->source.user->nick, ss_bot->nick, + prefmsg(u->nick, ss_bot->nick, "%s \\_\2%-40s [ %d/%d ] [ %d/%d ] [ %ld/%ld ]", buf, ss->name, ss->users, (int)ss->maxusers, ss->opers, ss->maxopers, (long)s->ping, ss->highest_ping); - makemap(s->name, cmdparams->source.user, level + 1); + makemap(s->name, u, level + 1); } } } diff --git a/src/modules/statserv/statserv.h b/src/modules/statserv/statserv.h index 16cb6c26..1f2ad5fa 100644 --- a/src/modules/statserv/statserv.h +++ b/src/modules/statserv/statserv.h @@ -40,10 +40,8 @@ /* but only save data older than 1 hour! */ #define PROGCHANTIME 3600 -extern BotInfo ss_botinfo; extern Bot *ss_bot; extern ModuleInfo module_info; -extern Module* ss_module; typedef struct tld_ TLD; typedef struct region_ Region; @@ -166,6 +164,7 @@ struct region_ { int daily_users; }; +int StatsMidnight(void); /* statserv.c */ void statserv(char *); int topchan(const void *key1, const void *key2); diff --git a/src/neostats.h b/src/neostats.h index 668123de..bac628d4 100755 --- a/src/neostats.h +++ b/src/neostats.h @@ -322,7 +322,6 @@ extern hash_t *ch; /* this is the dns structure */ extern adns_state ads; - /* version info */ extern const char version_date[], version_time[]; @@ -861,7 +860,7 @@ int sswhois_cmd (const char *target, const char *swhois); int ssvsnick_cmd (const char *target, const char *newnick); int ssvsjoin_cmd (const char *target, const char *chan); int ssvspart_cmd (const char *target, const char *chan); -int ssvshost_cmd (const char *who, const char *vhost); +int ssvshost_cmd (const char *target, const char *vhost); int ssvsmode_cmd (const char *target, const char *modes); int ssvskill_cmd (const char *target, const char *reason, ...) __attribute__((format(printf,2,3))); /* 2=format 3=params */ int sakill_cmd (const char *host, const char *ident, const char *setby, const int length, const char *reason, ...); @@ -927,6 +926,7 @@ int new_transfer(char *url, char *params, NS_TRANSFER savetofileormemory, char * /* Some standard text help messages */ extern const char *ns_help_set_nick[]; +extern const char *ns_help_set_altnick[]; extern const char *ns_help_set_user[]; extern const char *ns_help_set_host[]; extern const char *ns_help_set_realname[]; diff --git a/src/ns_help.c b/src/ns_help.c index 96b2c8bd..edf27ba9 100644 --- a/src/ns_help.c +++ b/src/ns_help.c @@ -241,6 +241,11 @@ const char *ns_help_set_nick[] = { NULL }; +const char *ns_help_set_altnick[] = { + "\2ALTNICK \2 Change bot alternate nickname", + NULL +}; + const char *ns_help_set_user[] = { "\2USER \2 Change bot username", "(requires restart to take effect).", diff --git a/src/services.c b/src/services.c index 01116fc8..e6da1361 100644 --- a/src/services.c +++ b/src/services.c @@ -62,7 +62,7 @@ static const char *ns_about[] = { NULL }; -static ModuleInfo ns_module_info = { +ModuleInfo ns_module_info = { "NeoStats", "NeoStats Statistical services", ns_copyright, diff --git a/src/services.h b/src/services.h index 7e71e3b9..46e050cc 100644 --- a/src/services.h +++ b/src/services.h @@ -24,6 +24,7 @@ #ifndef _SERVICES_H_ #define _SERVICES_H_ +extern ModuleInfo ns_module_info; extern BotInfo ns_botinfo; extern Bot* ns_botptr; diff --git a/src/users.c b/src/users.c index 915e3168..531fba8b 100644 --- a/src/users.c +++ b/src/users.c @@ -43,7 +43,7 @@ hash_t *uh; -static char quitreason[BUFSIZE]; +char quitreason[BUFSIZE]; static User * new_user (const char *nick) @@ -92,7 +92,6 @@ AddUser (const char *nick, const char *user, const char *host, const char *realn unsigned long ipaddress = 0; unsigned long time; User *u; - int i; #ifndef GOTNICKIP struct in_addr *ipad; int res; @@ -107,24 +106,20 @@ AddUser (const char *nick, const char *user, const char *host, const char *realn if(ip) { ipaddress = strtoul (ip, NULL, 10); - } else { #ifndef GOTNICKIP - if (me.want_nickip == 1) { - /* first, if the u->host is a ip address, just convert it */ - ipad = malloc(sizeof(struct in_addr)); - res = inet_aton(host, ipad); - if (res > 0) { - /* its valid */ - ipaddress = htonl(ipad->s_addr); - free(ipad); - } else { - /* kick of a dns reverse lookup for this host */ - dns_lookup((char *)host, adns_r_addr, lookupnickip, (void *)nick); - ipaddress = 0; - } - } else { + } else if (me.want_nickip == 1) { + /* first, if the u->host is a ip address, just convert it */ + ipad = malloc(sizeof(struct in_addr)); + res = inet_aton(host, ipad); + if (res > 0) { + /* its valid */ + ipaddress = htonl(ipad->s_addr); + free(ipad); + } else { + /* kick of a dns reverse lookup for this host */ + dns_lookup((char *)host, adns_r_addr, lookupnickip, (void *)nick); ipaddress = 0; - } + } #endif } if(TS) { @@ -144,36 +139,19 @@ AddUser (const char *nick, const char *user, const char *host, const char *realn strlcpy (u->realname, realname, MAXREALNAME); u->server = findserver (server); u->tslastmsg = me.now; - u->flood = 0; - u->is_away = 0; - u->Umode = 0; - u->flags = 0; -#ifdef GOTUSERSMODES - u->Smode = 0; -#endif u->chans = list_create (MAXJOINCHANS); - u->modes[0]= '\0'; u->ipaddr.s_addr = htonl (ipaddress); u->TS = time; - - /* make sure the module pointers are all null */ - for (i = 0; i < NUM_MODULES; i++) { - u->moddata[i] = NULL; - } - if (!ircstrcasecmp(server, me.name)) { u->flags |= NS_FLAGS_ME; } - /* check if the user is excluded */ ns_do_exclude_user(u); - #ifdef BASE64NICKNAME if(numeric) { setnickbase64 (u->nick, numeric); } #endif - cmdparams = (CmdParams*) scalloc (sizeof(CmdParams)); cmdparams->source.user = u; SendAllModuleEvent (EVENT_SIGNON, cmdparams); @@ -184,67 +162,87 @@ AddUser (const char *nick, const char *user, const char *host, const char *realn free (cmdparams); } -void -UserPart (list_t * list, lnode_t * node, void *v) +static void deluser(User* u) { - part_chan ((User *)v, lnode_get (node), quitreason[0] != 0 ? quitreason : NULL); -} - -void -DelUser (const char *nick, int killflag, const char *reason) -{ - CmdParams * cmdparams; - char killnick[MAXNICK]; - int botflag = 0; - User *u; hnode_t *un; - SET_SEGV_LOCATION(); - nlog (LOG_DEBUG2, "doDelUser: %s", nick); - u = finduser(nick); - if(!u) { - nlog (LOG_WARNING, "doDelUser: %s failed!", nick); - return; - } un = hash_lookup (uh, u->nick); if (!un) { - nlog (LOG_WARNING, "doDelUser: %s failed!", nick); + nlog (LOG_WARNING, "deluser: %s failed!", u->nick); return; } - u = hnode_get (un); - bzero(quitreason, BUFSIZE); - if(reason) { - strlcpy(quitreason, reason, BUFSIZE); - strip_mirc_codes(quitreason); - } - list_process (u->chans, u, UserPart); - /* run the event to delete a user */ - cmdparams = (CmdParams*) scalloc (sizeof(CmdParams)); - cmdparams->source.user = u; - if(reason) { - cmdparams->param = (char*)quitreason; - } - if (killflag == 0) { - SendAllModuleEvent (EVENT_QUIT, cmdparams); - } else if (killflag == 1) { - SendAllModuleEvent (EVENT_KILL, cmdparams); - } /* if its one of our bots, remove it from the modlist */ if ( IsMe(u) ) { - if (killflag == 1) { - nlog (LOG_NOTICE, "doDelUser: deleting bot %s as it was killed", u->nick); - strlcpy(killnick,u->nick,MAXNICK); - botflag = 1; - } del_ns_bot (u->nick); } hash_delete (uh, un); hnode_destroy (un); list_destroy (u->chans); free (u); - if(botflag) { +} + +void +KillUser (const char *nick, const char *reason) +{ + CmdParams * cmdparams; + User *u; + + SET_SEGV_LOCATION(); + nlog (LOG_DEBUG2, "KillUser: %s", nick); + u = finduser(nick); + if(!u) { + nlog (LOG_WARNING, "KillUser: %s failed!", nick); + return; + } + bzero(quitreason, BUFSIZE); + if(reason) { + strlcpy(quitreason, reason, BUFSIZE); + strip_mirc_codes(quitreason); + } + PartAllChannels (u); + /* run the event to delete a user */ + cmdparams = (CmdParams*) scalloc (sizeof(CmdParams)); + cmdparams->source.user = u; + if(reason) { + cmdparams->param = (char*)quitreason; + } + SendAllModuleEvent (EVENT_KILL, cmdparams); + /* if its one of our bots inform the module */ + if ( IsMe(u) ) { + nlog (LOG_NOTICE, "KillUser: deleting bot %s as it was killed", u->nick); SendModuleEvent (EVENT_BOTKILL, cmdparams, findbot(u->nick)); } + deluser(u); + free (cmdparams); +} + +void +QuitUser (const char *nick, const char *reason) +{ + CmdParams * cmdparams; + User *u; + + SET_SEGV_LOCATION(); + nlog (LOG_DEBUG2, "QuitUser: %s", nick); + u = finduser(nick); + if(!u) { + nlog (LOG_WARNING, "QuitUser: %s failed!", nick); + return; + } + bzero(quitreason, BUFSIZE); + if(reason) { + strlcpy(quitreason, reason, BUFSIZE); + strip_mirc_codes(quitreason); + } + PartAllChannels (u); + /* run the event to delete a user */ + cmdparams = (CmdParams*) scalloc (sizeof(CmdParams)); + cmdparams->source.user = u; + if(reason) { + cmdparams->param = (char*)quitreason; + } + SendAllModuleEvent (EVENT_QUIT, cmdparams); + deluser(u); free (cmdparams); } @@ -255,35 +253,33 @@ UserAway (const char *nick, const char *awaymsg) User *u; u = finduser (nick); - if (u) { - if (awaymsg) { - strlcpy(u->awaymsg, awaymsg, MAXHOST); - } else { - u->awaymsg[0] = 0; - } - cmdparams = (CmdParams*) scalloc (sizeof(CmdParams)); - cmdparams->source.user = u; - if ((u->is_away == 1) && (!awaymsg)) { - u->is_away = 0; - } else if ((u->is_away == 0) && (awaymsg)) { - u->is_away = 1; - } - SendAllModuleEvent (EVENT_AWAY, cmdparams); - free (cmdparams); - } else { + if (!u) { nlog (LOG_WARNING, "UserAway: unable to find user %s for away", nick); + return; } + if (awaymsg) { + strlcpy(u->awaymsg, awaymsg, MAXHOST); + } else { + u->awaymsg[0] = 0; + } + cmdparams = (CmdParams*) scalloc (sizeof(CmdParams)); + cmdparams->source.user = u; + if ((u->is_away == 1) && (!awaymsg)) { + u->is_away = 0; + } else if ((u->is_away == 0) && (awaymsg)) { + u->is_away = 1; + } + SendAllModuleEvent (EVENT_AWAY, cmdparams); + free (cmdparams); } int UserNick (const char * oldnick, const char *newnick, const char * ts) { CmdParams * cmdparams; - char uoldnick[MAXNICK]; hnode_t *un; lnode_t *cm; User * u; - time_t time; SET_SEGV_LOCATION(); u = finduser (oldnick); @@ -291,14 +287,6 @@ UserNick (const char * oldnick, const char *newnick, const char * ts) nlog (LOG_WARNING, "UserNick: can't find user %s", oldnick); return NS_FAILURE; } - strlcpy(uoldnick, u->nick, MAXNICK); - - if(ts) { - time = atoi (ts); - } else { - time = me.now; - } - nlog (LOG_DEBUG2, "UserNick: %s -> %s", u->nick, newnick); un = hash_lookup (uh, u->nick); if (!un) { @@ -314,12 +302,14 @@ UserNick (const char * oldnick, const char *newnick, const char * ts) hash_delete (uh, un); strlcpy (u->nick, newnick, MAXNICK); if(ts) { - u->TS = time; + u->TS = atoi (ts); + } else { + u->TS = me.now; } hash_insert (uh, un, u->nick); cmdparams = (CmdParams*) scalloc (sizeof(CmdParams)); cmdparams->source.user = u; - cmdparams->param = uoldnick; + cmdparams->param = (char *)oldnick; SendAllModuleEvent (EVENT_NICK, cmdparams); free (cmdparams); return NS_SUCCESS; @@ -381,7 +371,7 @@ void *display_vhost(void *tbl, char *col, char *sql, void *row) { #ifdef UMODE_HIDE /* Do we have a hidden host? */ if(u->Umode & UMODE_HIDE) { - return u->vhost; + return u->vhost; } return "*"; #else @@ -584,8 +574,6 @@ TBLDEF neo_users = { }; #endif /* SQLSRV */ - - int InitUsers () { @@ -598,8 +586,6 @@ InitUsers () neo_users.address = uh; rta_add_table(&neo_users); #endif - - return NS_SUCCESS; } @@ -644,6 +630,7 @@ UserDump (const char *nick) User *u; hnode_t *un; hscan_t us; + SET_SEGV_LOCATION(); debugtochannel("================USERDUMP================"); if (!nick) { @@ -667,6 +654,7 @@ int UserLevel (User * u) { int ulevel = 0; + ulevel = UserAuth(u); #ifdef DEBUG #ifdef CODERHACK @@ -780,7 +768,7 @@ void FiniUsers (void) hash_scan_begin(&hs, uh); while ((un = hash_scan_next(&hs)) != NULL) { u = hnode_get (un); - list_process (u->chans, u, UserPart); + PartAllChannels (u); /* something is wrong if its our bots */ if ( IsMe(u) ) { nlog (LOG_NOTICE, "FiniUsers called with a neostats bot online: %s", u->nick); diff --git a/src/users.h b/src/users.h index e87b9e29..63c4bdf6 100644 --- a/src/users.h +++ b/src/users.h @@ -27,11 +27,11 @@ int InitUsers (void); void FiniUsers (void); void AddUser (const char *nick, const char *user, const char *host, const char *realname, const char *server, const char*ip, const char* TS, const char* numeric); -void DelUser (const char *nick, int killflag, const char *reason); +void KillUser (const char *nick, const char *reason); +void QuitUser (const char *nick, const char *reason); void SetUserVhost (const char* nick, const char* vhost); void SetUserServicesTS (const char* nick, const char* ts); int UserNick (const char * oldnick, const char * newnick, const char * ts); -void UserPart (list_t *list, lnode_t *node, void *v); void UserMode (const char *nick, const char *modes); #ifdef GOTUSERSMODES void UserSMode (const char *nick, const char *modes);