diff --git a/Changes b/Changes index 5a07a36b1..3c1a507ad 100644 --- a/Changes +++ b/Changes @@ -13,6 +13,9 @@ Provided by Anope Dev. - 2006 03/01 F Fixed # prefix check on /cs forbid. [#461] 03/01 F Fixed events on /join 0. [#417] 03/01 F Added NULL checks to add_invite and add_exception. [#419] +03/01 F Fixed suspend check on /cs invite. [#429] +03/01 F Fixed memleaks in some protocol files. [#434] +03/01 F Fixed bot check on /bs unassign. [#446] Provided by nenolod. - 2006 02/03 A Support for Charybdis IRCd. [ #00] diff --git a/src/core/bs_unassign.c b/src/core/bs_unassign.c index 1789189ba..1bc978c81 100644 --- a/src/core/bs_unassign.c +++ b/src/core/bs_unassign.c @@ -79,9 +79,10 @@ int do_unassign(User * u) notice_lang(s_BotServ, u, CHAN_X_FORBIDDEN, chan); else if (!is_services_admin(u) && !check_access(u, ci, CA_ASSIGN)) notice_lang(s_BotServ, u, ACCESS_DENIED); + else if (!ci->bi) + notice_help(s_BotServ, u, BOT_NOT_ASSIGNED); else { - if (ci->bi) - unassign(u, ci); + unassign(u, ci); notice_lang(s_BotServ, u, BOT_UNASSIGN_UNASSIGNED, ci->name); } return MOD_CONT; diff --git a/src/core/cs_invite.c b/src/core/cs_invite.c index bd3bb8e2b..1687151fc 100644 --- a/src/core/cs_invite.c +++ b/src/core/cs_invite.c @@ -79,6 +79,8 @@ int do_invite(User * u) notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, chan); } else if (ci->flags & CI_VERBOTEN) { notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, chan); + } else if (ci->flags & CI_SUSPENDED) { + notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, chan); } else if (!u || !check_access(u, ci, CA_INVITE)) { notice_lang(s_ChanServ, u, PERMISSION_DENIED); } else { diff --git a/src/protocol/charybdis.c b/src/protocol/charybdis.c index 5add45073..a04653e27 100644 --- a/src/protocol/charybdis.c +++ b/src/protocol/charybdis.c @@ -676,11 +676,16 @@ int anope_event_tburst(char *source, int ac, char **av) alog("debug: TOPIC %s for nonexistent channel %s", merge_args(ac - 1, av + 1), av[0]); } + if (setter) + free(setter); return MOD_CONT; } - if (check_topiclock(c, topic_time)) + if (check_topiclock(c, topic_time)) { + if (setter) + free(setter); return MOD_CONT; + } if (c->topic) { free(c->topic); @@ -693,6 +698,8 @@ int anope_event_tburst(char *source, int ac, char **av) c->topic_time = topic_time; record_topic(av[0]); + if (setter) + free(setter); return MOD_CONT; } @@ -1702,7 +1709,10 @@ int anope_event_bmask(char *source, int ac, char **av) if (!stricmp(av[2], "I")) { add_invite(c, b); } + if (b) + free(b); } + free(bans); } return MOD_CONT; } diff --git a/src/protocol/ptlink.c b/src/protocol/ptlink.c index 13f1ba7b3..8b7039941 100644 --- a/src/protocol/ptlink.c +++ b/src/protocol/ptlink.c @@ -418,6 +418,7 @@ int anope_event_newmask(char *source, int ac, char **av) { User *u; char *newhost = NULL, *newuser = NULL; + int tofree = 0; if (ac != 1) return MOD_CONT; @@ -445,7 +446,9 @@ int anope_event_newmask(char *source, int ac, char **av) newuser = myStrGetOnlyToken(av[0], '@', 0); if (newuser) { newhost = myStrGetTokenRemainder(av[0], '@', 1); + tofree = 1; change_user_username(u, newuser); + free(newuser); } else { newhost = av[0]; } @@ -455,9 +458,11 @@ int anope_event_newmask(char *source, int ac, char **av) u->mode |= UMODE_VH; - if (newhost) { + if (newhost) change_user_host(u, newhost); - } + + if (tofree) + free(newhost); return MOD_CONT; } diff --git a/src/protocol/ratbox.c b/src/protocol/ratbox.c index 47b1b68f9..ea591a0ce 100644 --- a/src/protocol/ratbox.c +++ b/src/protocol/ratbox.c @@ -667,11 +667,16 @@ int anope_event_tburst(char *source, int ac, char **av) alog("debug: TOPIC %s for nonexistent channel %s", merge_args(ac - 1, av + 1), av[0]); } + if (setter) + free(setter); return MOD_CONT; } - if (check_topiclock(c, topic_time)) + if (check_topiclock(c, topic_time)) { + if (setter) + free(setter); return MOD_CONT; + } if (c->topic) { free(c->topic); @@ -684,6 +689,8 @@ int anope_event_tburst(char *source, int ac, char **av) c->topic_time = topic_time; record_topic(av[0]); + if (setter) + free(setter); return MOD_CONT; } @@ -1679,7 +1686,10 @@ int anope_event_bmask(char *source, int ac, char **av) if (!stricmp(av[2], "I")) { add_invite(c, b); } + if (b) + free(b); } + free(bans); } return MOD_CONT; } diff --git a/src/protocol/shadowircd.c b/src/protocol/shadowircd.c index 6d3410073..0c2741f93 100644 --- a/src/protocol/shadowircd.c +++ b/src/protocol/shadowircd.c @@ -706,11 +706,16 @@ int anope_event_tburst(char *source, int ac, char **av) alog("debug: TOPIC %s for nonexistent channel %s", merge_args(ac - 1, av + 1), av[0]); } + if (setter) + free(setter); return MOD_CONT; } - if (check_topiclock(c, topic_time)) + if (check_topiclock(c, topic_time)) { + if (setter) + free(setter); return MOD_CONT; + } if (c->topic) { free(c->topic); @@ -723,6 +728,8 @@ int anope_event_tburst(char *source, int ac, char **av) c->topic_time = topic_time; record_topic(av[0]); + if (setter) + free(setter); return MOD_CONT; } @@ -1627,7 +1634,10 @@ int anope_event_bmask(char *source, int ac, char **av) if (!stricmp(av[2], "I")) { add_invite(c, b); } + if (b) + free(b); } + free(bans); } return MOD_CONT; }