From 5c29ff8f88a641f94b1227ed0a50d8f2d6d60709 Mon Sep 17 00:00:00 2001 From: Michael Poole Date: Wed, 17 Mar 2004 04:27:17 +0000 Subject: [PATCH] ChanServ seen fixes; other cleanups * Remove rule to generate the unused EXTRA_MODULES preprocessor macro. * Properly adjust ChanServ seen time when a user leaves or is kicked from a channel. * Read languages from disk before initializing the core services, since they must all be available when loading accounts. * Fix a typo in the log BNF documentation, and add =SEVLIT support for consistency. * Add missing "invalid" to NSMSG_INVALID_ANNOUNCE string. git-archimport-id: srvx@srvx.net--2004-srvx/srvx--devo--1.3--patch-29 --- configure.in | 1 - src/chanserv.c | 8 ++++++++ src/helpfile.c | 6 ++---- src/helpfile.h | 2 +- src/log.c | 7 +++++-- src/main.c | 2 +- src/nickserv.c | 37 +++++++++++++++++++++++-------------- 7 files changed, 40 insertions(+), 23 deletions(-) diff --git a/configure.in b/configure.in index 9031a12..203ecfa 100644 --- a/configure.in +++ b/configure.in @@ -252,7 +252,6 @@ AC_ARG_ENABLE(modules, done IFS="$OIFS" MODULE_OBJS="$MODULE_OBJS $EXTRA_MODULE_OBJS" - AC_DEFINE(EXTRA_MODULES, 1, [Define if there are extra modules to be initialized.]) AC_MSG_RESULT($module_list) ], [ diff --git a/src/chanserv.c b/src/chanserv.c index c6137c8..8ad057a 100644 --- a/src/chanserv.c +++ b/src/chanserv.c @@ -5956,7 +5956,10 @@ handle_part(struct userNode *user, struct chanNode *channel, UNUSED_ARG(const ch } if((uData = GetTrueChannelAccess(cData, user->handle_info))) + { scan_user_presence(uData, user); + uData->seen = now; + } if(IsHelping(user) && IsSupportHelper(user)) { @@ -5977,6 +5980,8 @@ handle_part(struct userNode *user, struct chanNode *channel, UNUSED_ARG(const ch static void handle_kick(struct userNode *kicker, struct userNode *victim, struct chanNode *channel) { + struct userData *uData; + if(!channel->channel_info || !kicker || IsService(kicker) || (kicker == victim) || IsSuspended(channel->channel_info) || (kicker->handle_info && kicker->handle_info == victim->handle_info)) @@ -5987,6 +5992,9 @@ handle_kick(struct userNode *kicker, struct userNode *victim, struct chanNode *c const char *reason = user_find_message(kicker, "CSMSG_USER_PROTECTED"); KickChannelUser(kicker, channel, chanserv, reason); } + + if((uData = GetTrueChannelAccess(channel->channel_info, victim->handle_info))) + uData->seen = now; } static int diff --git a/src/helpfile.c b/src/helpfile.c index c0fd52a..092045c 100644 --- a/src/helpfile.c +++ b/src/helpfile.c @@ -165,10 +165,8 @@ static struct language *language_read(const char *name) /* Open the directory stream; if we can't, fail. */ snprintf(filename, sizeof(filename), "languages/%s", name); - if (!(dir = opendir(filename))) { - + if (!(dir = opendir(filename))) return NULL; - } if (!(lang = dict_find(languages, name, NULL))) lang = language_alloc(name); @@ -993,7 +991,7 @@ void message_register_table(const struct message_entry *table) } } -void helpfile_finalize(void) +void helpfile_init(void) { message_register_table(msgtab); language_read_all(); diff --git a/src/helpfile.h b/src/helpfile.h index dbef4fe..cf0ea6e 100644 --- a/src/helpfile.h +++ b/src/helpfile.h @@ -94,7 +94,7 @@ struct language *language_find(const char *name); const char *language_find_message(struct language *lang, const char *msgid); #define handle_find_message(HANDLE, MSGID) language_find_message((HANDLE) ? (HANDLE)->language : lang_C, (MSGID)) #define user_find_message(USER, MSGID) language_find_message((USER)->handle_info ? (USER)->handle_info->language : lang_C, (MSGID)) -void helpfile_finalize(void); +void helpfile_init(void); struct helpfile *open_helpfile(const char *fname, expand_func_t expand); void close_helpfile(struct helpfile *hf); diff --git a/src/log.c b/src/log.c index c2f1560..22804e8 100644 --- a/src/log.c +++ b/src/log.c @@ -244,7 +244,7 @@ find_severity(const char *text) * KEY := LOGSET '.' SEVSET * LOGSET := LOGLIT | LOGLIT ',' LOGSET * LOGLIT := a registered log type - * SEVSET := '*' | SEVLIT | '<' SEVLIT | '<=' SEVLIT | '>' SEVLIT | '>=' SEVLIT | SEVLIG ',' SEVSET + * SEVSET := '*' | SEVLIT | '=' SEVLIT | '<' SEVLIT | '<=' SEVLIT | '>' SEVLIT | '>=' SEVLIT | SEVLIT ',' SEVSET * SEVLIT := one of log_severity_names * A KEY contains the Cartesian product of the logs in its LOGSET * and the severities in its SEVSET. @@ -305,6 +305,8 @@ log_parse_sevset(char *buffer, char targets[LOG_NUM_SEVERITIES]) } } } else { + if (buffer[0] == '=') + buffer++; bound = find_severity(buffer); targets[bound] = 1; } @@ -369,7 +371,8 @@ log_conf_read(void) for (ii = 0; ii < slist->used; ++ii) { type = log_register_type(slist->list[ii], NULL); for (sev = 0; sev < LOG_NUM_SEVERITIES; ++sev) { - if (!sevset[sev]) continue; + if (!sevset[sev]) + continue; logList_join(&type->logs[sev], &logList); } } diff --git a/src/main.c b/src/main.c index 962d3c6..ec92566 100644 --- a/src/main.c +++ b/src/main.c @@ -822,12 +822,12 @@ int main(int argc, char *argv[]) saxdb_init(); gline_init(); sendmail_init(); + helpfile_init(); conf_globals(); /* initializes the core services */ conf_rlimits(); modules_init(); message_register_table(msgtab); modcmd_finalize(); - helpfile_finalize(); saxdb_finalize(); modules_finalize(); diff --git a/src/nickserv.c b/src/nickserv.c index fab3460..46b02b6 100644 --- a/src/nickserv.c +++ b/src/nickserv.c @@ -262,7 +262,7 @@ static const struct message_entry msgtab[] = { { "NSMSG_CLONE_AUTH", "Warning: %s (%s@%s) authed to your account." }, { "NSMSG_SETTING_LIST", "$b$N account settings:$b" }, { "NSMSG_INVALID_OPTION", "$b%s$b is an invalid account setting." }, - { "NSMSG_INVALID_ANNOUNCE", "$b%s$b is an announcements value." }, + { "NSMSG_INVALID_ANNOUNCE", "$b%s$b is an invalid announcements value." }, { "NSMSG_SET_INFO", "$bINFO: $b%s" }, { "NSMSG_SET_WIDTH", "$bWIDTH: $b%d" }, { "NSMSG_SET_TABLEWIDTH", "$bTABLEWIDTH: $b%d" }, @@ -2293,8 +2293,7 @@ static OPTION_FUNC(opt_language) send_message(user, nickserv, "NSMSG_LANGUAGE_NOT_FOUND", argv[1], lang->name); hi->language = lang; } - lang = hi->language ? hi->language : lang_C; - send_message(user, nickserv, "NSMSG_SET_LANGUAGE", lang->name); + send_message(user, nickserv, "NSMSG_SET_LANGUAGE", hi->language->name); return 1; } @@ -2597,7 +2596,7 @@ nickserv_saxdb_write(struct saxdb_context *ctx) { } if (hi->opserv_level) saxdb_write_int(ctx, KEY_OPSERV_LEVEL, hi->opserv_level); - if (hi->language && (hi->language != lang_C)) + if (hi->language != lang_C) saxdb_write_string(ctx, KEY_LANGUAGE, hi->language->name); saxdb_write_string(ctx, KEY_PASSWD, hi->passwd); saxdb_write_int(ctx, KEY_REGISTER_ON, hi->registered); @@ -3117,7 +3116,8 @@ nickserv_db_read_handle(const char *handle, dict_t obj) str = database_get_data(obj, KEY_OPSERV_LEVEL, RECDB_QSTRING); hi->opserv_level = str ? strtoul(str, NULL, 0) : 0; str = database_get_data(obj, KEY_INFO, RECDB_QSTRING); - if (str) hi->infoline = strdup(str); + if (str) + hi->infoline = strdup(str); str = database_get_data(obj, KEY_REGISTER_ON, RECDB_QSTRING); hi->registered = str ? (time_t)strtoul(str, NULL, 0) : now; str = database_get_data(obj, KEY_LAST_SEEN, RECDB_QSTRING); @@ -3143,12 +3143,16 @@ nickserv_db_read_handle(const char *handle, dict_t obj) str = database_get_data(obj, KEY_TABLE_WIDTH, RECDB_QSTRING); hi->table_width = str ? strtoul(str, NULL, 0) : 0; str = database_get_data(obj, KEY_LAST_QUIT_HOST, RECDB_QSTRING); - if (!str) str = database_get_data(obj, KEY_LAST_AUTHED_HOST, RECDB_QSTRING); - if (str) safestrncpy(hi->last_quit_host, str, sizeof(hi->last_quit_host)); + if (!str) + str = database_get_data(obj, KEY_LAST_AUTHED_HOST, RECDB_QSTRING); + if (str) + safestrncpy(hi->last_quit_host, str, sizeof(hi->last_quit_host)); str = database_get_data(obj, KEY_EMAIL_ADDR, RECDB_QSTRING); - if (str) nickserv_set_email_addr(hi, str); + if (str) + nickserv_set_email_addr(hi, str); str = database_get_data(obj, KEY_EPITHET, RECDB_QSTRING); - if (str) hi->epithet = strdup(str); + if (str) + hi->epithet = strdup(str); subdb = database_get_data(obj, KEY_COOKIE, RECDB_OBJECT); if (subdb) { const char *data, *type, *expires, *cookie_str; @@ -3300,7 +3304,8 @@ nickserv_conf_read(void) return; } str = database_get_data(conf_node, KEY_VALID_HANDLE_REGEX, RECDB_QSTRING); - if (!str) str = database_get_data(conf_node, KEY_VALID_ACCOUNT_REGEX, RECDB_QSTRING); + if (!str) + str = database_get_data(conf_node, KEY_VALID_ACCOUNT_REGEX, RECDB_QSTRING); if (nickserv_conf.valid_handle_regex_set) regfree(&nickserv_conf.valid_handle_regex); if (str) { int err = regcomp(&nickserv_conf.valid_handle_regex, str, REG_EXTENDED|REG_ICASE|REG_NOSUB); @@ -3319,7 +3324,8 @@ nickserv_conf_read(void) nickserv_conf.valid_nick_regex_set = 0; } str = database_get_data(conf_node, KEY_NICKS_PER_HANDLE, RECDB_QSTRING); - if (!str) str = database_get_data(conf_node, KEY_NICKS_PER_ACCOUNT, RECDB_QSTRING); + if (!str) + str = database_get_data(conf_node, KEY_NICKS_PER_ACCOUNT, RECDB_QSTRING); nickserv_conf.nicks_per_handle = str ? strtoul(str, NULL, 0) : 4; str = database_get_data(conf_node, KEY_DISABLE_NICKS, RECDB_QSTRING); nickserv_conf.disable_nicks = str ? strtoul(str, NULL, 0) : 0; @@ -3340,13 +3346,16 @@ nickserv_conf_read(void) str = database_get_data(conf_node, KEY_SET_EPITHET_LEVEL, RECDB_QSTRING); nickserv_conf.set_epithet_level = str ? strtoul(str, NULL, 0) : 1; str = database_get_data(conf_node, KEY_HANDLE_EXPIRE_FREQ, RECDB_QSTRING); - if (!str) str = database_get_data(conf_node, KEY_ACCOUNT_EXPIRE_FREQ, RECDB_QSTRING); + if (!str) + str = database_get_data(conf_node, KEY_ACCOUNT_EXPIRE_FREQ, RECDB_QSTRING); nickserv_conf.handle_expire_frequency = str ? ParseInterval(str) : 86400; str = database_get_data(conf_node, KEY_HANDLE_EXPIRE_DELAY, RECDB_QSTRING); - if (!str) str = database_get_data(conf_node, KEY_ACCOUNT_EXPIRE_DELAY, RECDB_QSTRING); + if (!str) + str = database_get_data(conf_node, KEY_ACCOUNT_EXPIRE_DELAY, RECDB_QSTRING); nickserv_conf.handle_expire_delay = str ? ParseInterval(str) : 86400*30; str = database_get_data(conf_node, KEY_NOCHAN_HANDLE_EXPIRE_DELAY, RECDB_QSTRING); - if (!str) str = database_get_data(conf_node, KEY_NOCHAN_ACCOUNT_EXPIRE_DELAY, RECDB_QSTRING); + if (!str) + str = database_get_data(conf_node, KEY_NOCHAN_ACCOUNT_EXPIRE_DELAY, RECDB_QSTRING); nickserv_conf.nochan_handle_expire_delay = str ? ParseInterval(str) : 86400*15; str = database_get_data(conf_node, "warn_clone_auth", RECDB_QSTRING); nickserv_conf.warn_clone_auth = str ? !disabled_string(str) : 1; -- 2.20.1