Various bug fixes
authorEntrope <entrope@clan-dk.org>
Wed, 3 Mar 2004 01:47:41 +0000 (01:47 +0000)
committerEntrope <entrope@clan-dk.org>
Wed, 3 Mar 2004 01:47:41 +0000 (01:47 +0000)
* In ?kickbanall, mod_chanmode_alloc(1) when we only use one arg.

* In ?modcmd ... channel_access, accept "0" to mean the same as "none."

* In log.c, make a single function to free the oldest log entry for a
log_type struct.

* Add more checks for cmd==NULL in chanserv.c:eject_user().
git-archimport-id: srvx@srvx.net--2004-srvx/srvx--devo--1.3--patch-22

src/chanserv.c
src/log.c
src/modcmd.c
src/opserv.c

index f7ee36a1234f0e257bb3c67715090ced3d5ae097..8edf11750097f662429beb74e580a659ac760eb5 100644 (file)
@@ -2787,7 +2787,8 @@ eject_user(struct userNode *user, struct chanNode *channel, unsigned int argc, c
                         free(bData->reason);
                    bData->reason = strdup(reason);
                     safestrncpy(bData->owner, (user->handle_info ? user->handle_info->handle : user->nick), sizeof(bData->owner));
-                   reply("CSMSG_REASON_CHANGE", ban);
+                    if(cmd)
+                        reply("CSMSG_REASON_CHANGE", ban);
                    if(!bData->expires)
                         goto post_add_ban;
                }
@@ -2818,7 +2819,11 @@ eject_user(struct userNode *user, struct chanNode *channel, unsigned int argc, c
                        if(bData->expires)
                            timeq_add(bData->expires, expire_ban, bData);
 
-                       if(duration)
+                        if(!cmd)
+                        {
+                            /* automated kickban */
+                        }
+                       else if(duration)
                            reply("CSMSG_BAN_EXTENDED", ban, intervalString(interval, duration));
                        else
                            reply("CSMSG_BAN_ADDED", name, channel->name);
@@ -2826,7 +2831,8 @@ eject_user(struct userNode *user, struct chanNode *channel, unsigned int argc, c
                        goto post_add_ban;
                    }
                }
-               reply("CSMSG_REDUNDANT_BAN", name, channel->name);
+                if(cmd)
+                    reply("CSMSG_REDUNDANT_BAN", name, channel->name);
 
                free(ban);
                return 0;
@@ -2875,7 +2881,8 @@ eject_user(struct userNode *user, struct chanNode *channel, unsigned int argc, c
 
        if(channel->banlist.used >= MAXBANS)
        {
-           reply("CSMSG_BANLIST_FULL", channel->name);
+            if(cmd)
+                reply("CSMSG_BANLIST_FULL", channel->name);
            free(ban);
            return 0;
        }
@@ -2901,7 +2908,8 @@ eject_user(struct userNode *user, struct chanNode *channel, unsigned int argc, c
 
         if(exists && (action == ACTION_BAN))
        {
-            reply("CSMSG_REDUNDANT_BAN", name, channel->name);
+            if(cmd)
+                reply("CSMSG_REDUNDANT_BAN", name, channel->name);
             free(ban);
             return 0;
         }
index 15d8e142e1590ed27bd4f63345a12038aaf60653..35309792b249a959a65ec598b7dfd83559ef9abe 100644 (file)
--- a/src/log.c
+++ b/src/log.c
@@ -86,6 +86,7 @@ log_open(const char *name)
     struct logDestination *ld;
     char *sep;
     char type_name[32];
+
     if ((ld = dict_find(log_dests, name, NULL))) {
         ld->refcnt++;
         return ld;
@@ -100,9 +101,8 @@ log_open(const char *name)
         log_module(MAIN_LOG, LOG_ERROR, "Invalid log type for log '%s'.", name);
         return 0;
     }
-    if (!(ld = vtbl->open(sep ? sep+1 : 0))) {
+    if (!(ld = vtbl->open(sep ? sep+1 : 0)))
         return 0;
-    }
     ld->name = strdup(name);
     dict_insert(log_dests, ld->name, ld);
     ld->refcnt = 1;
@@ -115,20 +115,17 @@ logList_open(struct logList *ll, struct record_data *rd)
     struct logDestination *ld;
     unsigned int ii;
 
-    if (!ll->size) {
+    if (!ll->size)
         logList_init(ll);
-    }
     switch (rd->type) {
     case RECDB_QSTRING:
-        if ((ld = log_open(rd->d.qstring))) {
+        if ((ld = log_open(rd->d.qstring)))
             logList_append(ll, ld);
-        }
         break;
     case RECDB_STRING_LIST:
         for (ii=0; ii<rd->d.slist->used; ++ii) {
-            if ((ld = log_open(rd->d.slist->list[ii]))) {
+            if ((ld = log_open(rd->d.slist->list[ii])))
                 logList_append(ll, ld);
-            }
         }
         break;
     default:
@@ -141,9 +138,8 @@ logList_join(struct logList *target, const struct logList *source)
 {
     unsigned int ii, jj, kk;
 
-    if (!source->used) {
+    if (!source->used)
         return;
-    }
     jj = target->used;
     target->used += source->used;
     target->size += source->used;
@@ -198,17 +194,27 @@ close_logs(void)
     }
 }
 
+static void
+log_type_free_oldest(struct log_type *lt)
+{
+    struct logEntry *next;
+
+    if (!lt->log_oldest)
+        return;
+    next = lt->log_oldest->next;
+    free(lt->log_oldest->default_desc);
+    free(lt->log_oldest);
+    lt->log_oldest = next;
+    lt->log_count--;
+}
+
 static void
 log_type_free(void *ptr)
 {
     struct log_type *lt = ptr;
-    struct logEntry *le, *next;
-    
-    for (le = lt->log_oldest; le; le = next) {
-        next = le->next;
-        free(le->default_desc);
-        free(le);
-    }
+
+    while (lt->log_oldest)
+        log_type_free_oldest(lt);
     free(lt);
 }
 
@@ -248,7 +254,8 @@ log_parse_logset(char *buffer, struct string_list *slist)
     slist->used = 0;
     while (buffer) {
         char *cont = strchr(buffer, ',');
-        if (cont) *cont++ = 0;
+        if (cont)
+            *cont++ = 0;
         string_list_append(slist, strdup(buffer));
         buffer = cont;
     }
@@ -272,11 +279,10 @@ log_parse_sevset(char *buffer, char targets[LOG_NUM_SEVERITIES])
                     targets[bound] = 1;
             }
         } else if (buffer[0] == '<') {
-            if (buffer[1] == '=') {
+            if (buffer[1] == '=')
                 bound = find_severity(buffer+2) + 1;
-            } else {
+            else
                 bound = find_severity(buffer+1);
-            }
             for (first = 1; bound > 0; bound--) {
                 /* make people explicitly specify replay targets */
                 if (bound != LOG_REPLAY || first) {
@@ -285,11 +291,10 @@ log_parse_sevset(char *buffer, char targets[LOG_NUM_SEVERITIES])
                 }
             }
         } else if (buffer[0] == '>') {
-            if (buffer[1] == '=') {
+            if (buffer[1] == '=')
                 bound = find_severity(buffer+2);
-            } else {
+            else
                 bound = find_severity(buffer+1) + 1;
-            }
             for (first = 1; bound < LOG_NUM_SEVERITIES; bound++) {
                 /* make people explicitly specify replay targets */
                 if (bound != LOG_REPLAY || first) {
@@ -323,9 +328,11 @@ log_parse_options(struct log_type *type, struct dict *conf)
 {
     const char *opt;
     opt = database_get_data(conf, "max_age", RECDB_QSTRING);
-    if (opt) type->max_age = ParseInterval(opt);
+    if (opt)
+        type->max_age = ParseInterval(opt);
     opt = database_get_data(conf, "max_count", RECDB_QSTRING);
-    if (opt) type->max_count = strtoul(opt, NULL, 10);
+    if (opt)
+        type->max_count = strtoul(opt, NULL, 10);
 }
 
 static void
@@ -375,9 +382,8 @@ log_conf_read(void)
             }
         }
     }
-    if (log_debugged) {
+    if (log_debugged)
         log_debug();
-    }
 }
 
 void
@@ -391,9 +397,8 @@ log_debug(void)
     logList_init(&target);
     logList_append(&target, log_stdout);
 
-    for (sev = 0; sev < LOG_NUM_SEVERITIES; ++sev) {
+    for (sev = 0; sev < LOG_NUM_SEVERITIES; ++sev)
         logList_join(&log_default->logs[sev], &target);
-    }
 
     logList_close(&target);
     log_debugged = 1;
@@ -427,11 +432,13 @@ log_register_type(const char *name, const char *default_log)
         /* If any severity level was unspecified in the config, use the default. */
         dest = NULL;
         for (sev = 0; sev < LOG_NUM_SEVERITIES; ++sev) {
-            if (sev == LOG_REPLAY) continue; /* never default LOG_REPLAY */
+            if (sev == LOG_REPLAY)
+                continue; /* never default LOG_REPLAY */
             if (!type->logs[sev].size) {
                 logList_init(&type->logs[sev]);
                 if (!dest) {
-                    if (!(dest = log_open(default_log))) break;
+                    if (!(dest = log_open(default_log)))
+                        break;
                     dest->refcnt--;
                 }
                 logList_append(&type->logs[sev], dest);
@@ -459,15 +466,12 @@ log_audit(struct log_type *type, enum log_severity sev, struct userNode *user, s
     }
     /* Allocate and fill in the log entry */
     size = sizeof(*entry) + strlen(user->nick) + strlen(command) + 2;
-    if (user->handle_info) {
+    if (user->handle_info)
         size += strlen(user->handle_info->handle) + 1;
-    }
-    if (channel_name) {
+    if (channel_name)
         size += strlen(channel_name) + 1;
-    }
-    if (flags & AUDIT_HOSTMASK) {
+    if (flags & AUDIT_HOSTMASK)
         size += strlen(user->ident) + strlen(user->hostname) + 2;
-    }
     entry = calloc(1, size);
     str_next = (char*)(entry + 1);
     entry->time = now;
@@ -507,29 +511,18 @@ log_audit(struct log_type *type, enum log_severity sev, struct userNode *user, s
     /* insert into the linked list */
     entry->next = 0;
     entry->prev = type->log_newest;
-    if (type->log_newest) {
+    if (type->log_newest)
         type->log_newest->next = entry;
-    } else {
+    else
         type->log_oldest = entry;
-    }
     type->log_newest = entry;
     type->log_count++;
 
     /* remove old elements from the linked list */
-    while (type->log_count > type->max_count) {
-        struct logEntry *next = type->log_oldest->next;
-        free(type->log_oldest->default_desc);
-        free(type->log_oldest);
-        type->log_oldest = next;
-        type->log_count--;
-    }
-    while (type->log_oldest && (type->log_oldest->time + type->max_age < (unsigned long)now)) {
-        struct logEntry *next = type->log_oldest->next;
-        free(type->log_oldest->default_desc);
-        free(type->log_oldest);
-        type->log_oldest = next;
-        type->log_count--;
-    }
+    while (type->log_count > type->max_count)
+        log_type_free_oldest(type);
+    while (type->log_oldest && (type->log_oldest->time + type->max_age < (unsigned long)now))
+        log_type_free_oldest(type);
     if (type->log_oldest)
         type->log_oldest->prev = 0;
     else
@@ -635,17 +628,15 @@ log_discrim_create(struct userNode *service, struct userNode *user, unsigned int
         } else if (!irccasecmp(argv[ii], "age")) {
             const char *cmp = argv[++ii];
             if (cmp[0] == '<') {
-                if (cmp[1] == '=') {
+                if (cmp[1] == '=')
                     discrim->min_time = now - ParseInterval(cmp+2);
-                } else {
+                else
                     discrim->min_time = now - (ParseInterval(cmp+1) - 1);
-                }
             } else if (cmp[0] == '>') {
-                if (cmp[1] == '=') {
+                if (cmp[1] == '=')
                     discrim->max_time = now - ParseInterval(cmp+2);
-                } else {
+                else
                     discrim->max_time = now - (ParseInterval(cmp+1) - 1);
-                }
             } else {
                 discrim->min_time = now - ParseInterval(cmp+2);
             }
@@ -887,13 +878,12 @@ ldStd_open(const char *args) {
     ld->fname = strdup(args);
 
     /* Print to stderr if given "err" and default to stdout otherwise. */
-    if (atoi(args)) {
+    if (atoi(args))
         ld->output = fdopen(atoi(args), "a");
-    } else if (!strcasecmp(args, "err")) {
+    else if (!strcasecmp(args, "err"))
         ld->output = stdout;
-    } else {
+    else
         ld->output = stderr;
-    }
 
     return &ld->base;
 }
index 1cb8399ca7051b4e94a10e34b71749f92a8e53c5..d4b59fbbfe23feac0b7d3b1d823d2c64cd119ab5 100644 (file)
@@ -337,7 +337,7 @@ svccmd_configure(struct svccmd *cmd, struct userNode *user, struct userNode *bot
         return 1;
     } else if (!irccasecmp(param, "channel_level") || !irccasecmp(param, "channel_access") || !irccasecmp(param, "access")) {
         unsigned short ul;
-        if (!irccasecmp(value, "none")) {
+        if (!irccasecmp(value, "none") || !irccasecmp(value, "0")) {
             cmd->min_channel_access = 0;
             return 1;
         } else if ((ul = user_level_from_name(value, UL_OWNER)) > 0) {
index 0fb5fd25c6cb53a1ae514d14fbc6a58001a55b7a..ed09ccb33cfe5be631ed69b38d4ad346802dd4a5 100644 (file)
@@ -1039,7 +1039,7 @@ static MODCMD_FUNC(cmd_kickbanall)
         change->args[1].mode = MODE_BAN;
         change->args[1].hostmask = "*!*@*";
     } else {
-        change = mod_chanmode_alloc(2);
+        change = mod_chanmode_alloc(1);
         change->args[0].mode = MODE_BAN;
         change->args[0].hostmask = "*!*@*";
     }