-ServerSpy.net
-[FEATREQ] finish ServerSpy.net support
-
-Core
-[FEATREQ] per-service "set privmsg" option
-
---------
-<def|office> featreq: is_authed criteria for trace
-<Zoot> featreq: disallow the use of the channel criteria in addalert
<myriad> [featreq] something to turn off security override after a set period of time
-<word-up_Wwv> [FEATREQ] how about adding a suspended symbol to the authserv channelaccesslist, would be handy and informative
<adam> [featreq] an account flag that disallows users from using /ns kill (or some other way to prevent/deter nick holding on an account-level)
<Byte> [featreq] people cant !invite over a timeban
<Commander> [featreq] allow srvx to listen on a port for an ircd to connect to it
[adam(m@myriad.lackofdiscipline.com)] yeah, and possibly another flag or some way to stop a hostmask range from registering any new nicks
[adam(m@myriad.lackofdiscipline.com)] we're having people grab nicks of other users who don't understand how the system works
[msg(adam)] yeah, blocking account or nick registrations for an address (or block of addresses) was another featreq on the web page
-<Incutio> put notes into the /msg o chaninfo output
---------
[FEATREQ] Suspension durations and/or comments when suspending user access to a channel
-[FEATREQ] Timestamps for channel notes and DNRs
-
[FEATREQ] support "unregistered": ?ctrace print mode +s unregistered
-
-[FEATREQ] move "version" command into modcmd core; register module versions with modcmd
str = database_get_data(conf_node, KEY_MAX_CHAN_BANS, RECDB_QSTRING);
chanserv_conf.max_chan_bans = str ? atoi(str) : 512;
str = database_get_data(conf_node, KEY_NICK, RECDB_QSTRING);
- if(str) NickChange(chanserv, str, 0);
+ if(chanserv && str)
+ NickChange(chanserv, str, 0);
str = database_get_data(conf_node, KEY_REFRESH_PERIOD, RECDB_QSTRING);
chanserv_conf.refresh_period = str ? ParseInterval(str) : 3*60*60;
str = database_get_data(conf_node, KEY_CTCP_SHORT_BAN_DURATION, RECDB_QSTRING);
void
init_chanserv(const char *nick)
{
- chanserv = AddService(nick, "Channel Services");
CS_LOG = log_register_type("ChanServ", "file:chanserv.log");
conf_register_reload(chanserv_conf_read);
note_types = dict_new();
dict_set_free_data(note_types, chanserv_deref_note_type);
+ if(nick)
+ {
+ chanserv = AddService(nick, "Channel Services");
+ service_register(chanserv, '!');
+ reg_chanmsg_func('\001', chanserv, chanserv_ctcp_check);
+ }
saxdb_register("ChanServ", chanserv_saxdb_read, chanserv_saxdb_write);
- reg_chanmsg_func('\001', chanserv, chanserv_ctcp_check);
if(chanserv_conf.channel_expire_frequency)
timeq_add(now + chanserv_conf.channel_expire_frequency, expire_channels, NULL);
global_conf.announcements_default = str ? enabled_string(str) : 1;
str = database_get_data(conf_node, KEY_NICK, RECDB_QSTRING);
- if(str)
+ if(global && str)
NickChange(global, str, 0);
}
static void
global_db_cleanup(void)
{
- while (messageList) message_del(messageList);
+ while(messageList)
+ message_del(messageList);
}
void
init_global(const char *nick)
{
- global = AddService(nick, "Global Services");
G_LOG = log_register_type("Global", "file:global.log");
reg_new_user_func(global_process_user);
reg_auth_func(global_process_auth);
modcmd_register(global_module, "NOTICE", cmd_notice, 3, MODCMD_REQUIRE_AUTHED, "flags", "+oper", NULL);
modcmd_register(global_module, "REMOVE", cmd_remove, 2, MODCMD_REQUIRE_AUTHED, "flags", "+oper", NULL);
- global_service = service_register(global, 0);
+ if(nick)
+ {
+ global = AddService(nick, "Global Services");
+ global_service = service_register(global, 0);
+ }
saxdb_register("Global", global_saxdb_read, global_saxdb_write);
reg_exit_func(global_db_cleanup);
message_register_table(msgtab);
dict_t dict;
info = conf_get_data("services/global/nick", RECDB_QSTRING);
- if (info && (info[0] != '.'))
- init_global(info);
+ if (info[0] == '.')
+ info = NULL;
+ init_global(info);
info = conf_get_data("services/nickserv/nick", RECDB_QSTRING);
- if (info && (info[0] != '.'))
- init_nickserv(info);
+ if (info[0] == '.')
+ info = NULL;
+ init_nickserv(info);
info = conf_get_data("services/chanserv/nick", RECDB_QSTRING);
- if (info && (info[0] != '.'))
- init_chanserv(info);
+ if (info[0] == '.')
+ info = NULL;
+ init_chanserv(info);
god_policer_params = policer_params_new();
if ((dict = conf_get_data("policers/commands-god", RECDB_OBJECT))) {
}
info = conf_get_data("services/opserv/nick", RECDB_QSTRING);
- if (info)
- init_opserv(info);
+ if (info[0] == '.')
+ info = NULL;
+ init_opserv(info);
}
#ifdef HAVE_SYS_RESOURCE_H
if (str)
nickserv_load_dict(str);
str = database_get_data(conf_node, KEY_NICK, RECDB_QSTRING);
- if (str)
+ if (nickserv && str)
NickChange(nickserv, str, 0);
str = database_get_data(conf_node, KEY_AUTOGAG_ENABLED, RECDB_QSTRING);
nickserv_conf.autogag_enabled = str ? strtoul(str, NULL, 0) : 1;
init_nickserv(const char *nick)
{
unsigned int i;
- nickserv = AddService(nick, "Nick Services");
NS_LOG = log_register_type("NickServ", "file:nickserv.log");
reg_new_user_func(handle_new_user);
reg_nick_change_func(handle_nick_change);
userList_init(&curr_helpers);
- nickserv_service = service_register(nickserv, 0);
+ if (nick) {
+ nickserv = AddService(nick, "Nick Services");
+ nickserv_service = service_register(nickserv, 0);
+ }
saxdb_register("NickServ", nickserv_saxdb_read, nickserv_saxdb_write);
reg_exit_func(nickserv_db_cleanup);
if(nickserv_conf.handle_expire_frequency)
static dict_t opserv_nick_based_alerts; /* data is struct opserv_user_alert* */
static dict_t opserv_channel_alerts; /* data is struct opserv_user_alert* */
static struct module *opserv_module;
-static struct service *opserv_service;
static struct log_type *OS_LOG;
static unsigned int new_user_flood;
static char *level_strings[1001];
free(alert);
}
-static struct svccmd *
-opserv_get_command(const char *name) {
- return dict_find(opserv_service->commands, name, NULL);
-}
-
#define opserv_debug(format...) do { if (opserv_conf.debug_channel) send_channel_notice(opserv_conf.debug_channel , opserv , ## format); } while (0)
#define opserv_alert(format...) do { if (opserv_conf.alert_channel) send_channel_notice(opserv_conf.alert_channel , opserv , ## format); } while (0)
static struct helpfile_expansion
opserv_help_expand(const char *variable)
{
+ extern struct userNode *message_source;
struct helpfile_expansion exp;
+ struct service *service;
struct svccmd *cmd;
dict_iterator_t it;
int row;
unsigned int level;
- if (!irccasecmp(variable, "index")) {
+ if (!(service = service_find(message_source->nick))) {
+ exp.type = HF_STRING;
+ exp.value.str = NULL;
+ } else if (!irccasecmp(variable, "index")) {
exp.type = HF_TABLE;
exp.value.table.length = 1;
exp.value.table.width = 2;
exp.value.table.flags = TABLE_REPEAT_HEADERS | TABLE_REPEAT_ROWS;
- exp.value.table.contents = calloc(dict_size(opserv_service->commands)+1, sizeof(char**));
+ exp.value.table.contents = calloc(dict_size(service->commands)+1, sizeof(char**));
exp.value.table.contents[0] = calloc(exp.value.table.width, sizeof(char*));
exp.value.table.contents[0][0] = "Command";
exp.value.table.contents[0][1] = "Level";
- for (it=dict_first(opserv_service->commands); it; it=iter_next(it)) {
+ for (it=dict_first(service->commands); it; it=iter_next(it)) {
cmd = iter_data(it);
row = exp.value.table.length++;
exp.value.table.contents[row] = calloc(exp.value.table.width, sizeof(char*));
exp.value.table.contents[row][1] = level_strings[level];
}
} else if (!strncasecmp(variable, "level", 5)) {
- cmd = opserv_get_command(variable+6);
+ cmd = dict_find(service->commands, variable+6, NULL);
exp.type = HF_STRING;
if (cmd) {
level = cmd->min_opserv_level;
char buf[MAXLEN];
sprintf(buf, "trace %s", argv[1]);
- if (!(subcmd = opserv_get_command(buf))) {
+ if (!(subcmd = dict_find(cmd->parent->commands, buf, NULL))) {
reply("OSMSG_BAD_ACTION", argv[1]);
return 0;
}
}
sprintf(buf, "%s %s", argv[0], argv[0]);
- if ((subcmd = opserv_get_command(buf))
+ if ((subcmd = dict_find(cmd->parent->commands, buf, NULL))
&& !svccmd_can_invoke(user, cmd->parent->bot, subcmd, channel, SVCCMD_NOISY)) {
return 0;
}
return 0;
}
sprintf(buf, "%s %s", argv[0], argv[0]);
- if ((subcmd = opserv_get_command(buf))
+ if ((subcmd = dict_find(cmd->parent->commands, buf, NULL))
&& !svccmd_can_invoke(user, cmd->parent->bot, subcmd, channel, SVCCMD_NOISY)) {
return 0;
}
name = argv[1];
sprintf(buf, "addalert %s", argv[2]);
- if (!(subcmd = opserv_get_command(buf))) {
+ if (!(subcmd = dict_find(cmd->parent->commands, buf, NULL))) {
reply("OSMSG_UNKNOWN_REACTION", argv[2]);
return 0;
}
}
conf_node = rd->d.object;
str = database_get_data(conf_node, KEY_DEBUG_CHANNEL, RECDB_QSTRING);
- if (str) {
+ if (opserv && str) {
str2 = database_get_data(conf_node, KEY_DEBUG_CHANNEL_MODES, RECDB_QSTRING);
if (!str2)
str2 = "+tinms";
opserv_conf.debug_channel = NULL;
}
str = database_get_data(conf_node, KEY_ALERT_CHANNEL, RECDB_QSTRING);
- if (str) {
+ if (opserv && str) {
str2 = database_get_data(conf_node, KEY_ALERT_CHANNEL_MODES, RECDB_QSTRING);
if (!str2)
str2 = "+tns";
opserv_conf.alert_channel = NULL;
}
str = database_get_data(conf_node, KEY_STAFF_AUTH_CHANNEL, RECDB_QSTRING);
- if (str) {
+ if (opserv && str) {
str2 = database_get_data(conf_node, KEY_STAFF_AUTH_CHANNEL_MODES, RECDB_QSTRING);
if (!str2)
str2 = "+timns";
str = database_get_data(conf_node, KEY_JOIN_FLOOD_MODERATE_THRESH, RECDB_QSTRING);
opserv_conf.join_flood_moderate_threshold = str ? strtoul(str, NULL, 0) : 50;
str = database_get_data(conf_node, KEY_NICK, RECDB_QSTRING);
- if (str)
+ if (opserv && str)
NickChange(opserv, str, 0);
str = database_get_data(conf_node, KEY_CLONE_GLINE_DURATION, RECDB_QSTRING);
opserv_conf.clone_gline_duration = str ? ParseInterval(str) : 3600;
void
init_opserv(const char *nick)
{
- opserv = AddService(nick, "Oper Services");
OS_LOG = log_register_type("OpServ", "file:opserv.log");
conf_register_reload(opserv_conf_read);
opserv_db_init();
saxdb_register("OpServ", opserv_saxdb_read, opserv_saxdb_write);
- opserv_service = service_find(opserv->nick);
+ if(nick)
+ {
+ opserv = AddService(nick, "Oper Services");
+ service_register(opserv, '?');
+ }
reg_exit_func(opserv_db_cleanup);
message_register_table(msgtab);