change = mod_chanmode_alloc(channel->banlist.used);
for (ii=0; ii<channel->banlist.used; ii++) {
change->args[ii].mode = MODE_REMOVE | MODE_BAN;
- change->args[ii].u.hostmask = channel->banlist.list[ii]->ban;
+ change->args[ii].u.hostmask = strdup(channel->banlist.list[ii]->ban);
}
modcmd_chanmode_announce(change);
+ for (ii=0; ii<change->argc; ++ii)
+ free((char*)change->args[ii].u.hostmask);
mod_chanmode_free(change);
reply("OSMSG_CLEARBANS_DONE", channel->name);
return 1;
return 1;
}
-#if defined(WITH_MALLOC_SRVX)
+#if defined(WITH_MALLOC_SRVX) || defined(WITH_MALLOC_SLAB)
static MODCMD_FUNC(cmd_stats_memory) {
extern unsigned long alloc_count, alloc_size;
reply("OSMSG_STATS_MEMORY", alloc_count, alloc_size);
change.args[0].u.member = AddChannelUser(opserv, channel);
change.argc++;
}
- if (!(channel->modes & MODE_MODERATED))
- change.modes_set |= MODE_MODERATED;
+ change.modes_set = (MODE_MODERATED | MODE_DELAYJOINS) & ~channel->modes;
if (change.modes_set || change.argc)
mod_chanmode_announce(opserv, channel, &change);
send_target_message(0, channel->name, opserv, "OSMSG_FLOOD_MODERATE");
opserv_define_func("STATS UPLINK", cmd_stats_uplink, 0, 0, 0);
opserv_define_func("STATS UPTIME", cmd_stats_uptime, 0, 0, 0);
opserv_define_func("STATS WARN", cmd_stats_warn, 0, 0, 0);
-#if defined(WITH_MALLOC_SRVX)
+#if defined(WITH_MALLOC_SRVX) || defined(WITH_MALLOC_SLAB)
opserv_define_func("STATS MEMORY", cmd_stats_memory, 0, 0, 0);
#endif
opserv_define_func("TRACE", cmd_trace, 100, 0, 3);