ChanServ seen fixes; other cleanups
authorMichael Poole <mdpoole+arch@troilus.org>
Wed, 17 Mar 2004 04:27:17 +0000 (04:27 +0000)
committerMichael Poole <mdpoole+arch@troilus.org>
Wed, 17 Mar 2004 04:27:17 +0000 (04:27 +0000)
* 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
src/chanserv.c
src/helpfile.c
src/helpfile.h
src/log.c
src/main.c
src/nickserv.c

index 9031a12ea0a5badc4a95f6daa87e0a8e6c31fa89..203ecfa2f2370523b7758869cabbdf55a54f46a3 100644 (file)
@@ -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)
 ],
 [
index c6137c85d55ddb74438c31fc256e24d1949343c7..8ad057af26ba089d123e4f2c041adbf4321582b4 100644 (file)
@@ -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
index c0fd52a0b6d6969efe96ae66161e98d254e29624..092045c5951a146b432748ae837a2535d7b3c8c2 100644 (file)
@@ -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();
index dbef4fed61bb46eaba9ab6e2667dcfa94ad2f177..cf0ea6e267f7a719cc011e95c9cfef7c606e29a4 100644 (file)
@@ -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);
index c2f15605e2ae2c4431dd508a9c2cf0b08b32e592..22804e84e233433cf30cfe2ed04d1c1360c6d2bc 100644 (file)
--- 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);
                     }
                 }
index 962d3c600a5a84797bbc711ce48c5d78d1ad170e..ec925665e956d64956f817d0e1ea9c59b46d7ea9 100644 (file)
@@ -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();
 
index fab3460623a908c13fae5854b03fb14425d0d296..46b02b6b1dbf058d64b74e5ed50a1c24b54925e0 100644 (file)
@@ -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;