From ddcbe7b803f4bd28eb930220f9ee03d128bce2d2 Mon Sep 17 00:00:00 2001 From: Michael Poole Date: Wed, 28 Nov 2007 05:47:11 +0000 Subject: [PATCH] Once again allow MODE #channel -b+b *!*@*.example.com *!*@*.foo.example.com Fixes bug SF#1840011. git-svn-id: file:///home/klmitch/undernet-ircu/undernet-ircu-svn/ircu2/branches/u2_10_12_branch@1846 c9e4aea6-c8fd-4c43-8297-357d70d61c8c --- ChangeLog | 5 +++++ ircd/channel.c | 9 +++++---- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 131e12d..0cb609a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2007-11-28 Michael Poole + + * ircd/channel.c (mode_ban_invalidate): Clarify Doxygen comments. + (apply_ban): Only block narrower bans if the wider ban is active. + 2007-11-24 Michael Poole * ircd/m_names.c (do_names): Don't try to re-initialize the start diff --git a/ircd/channel.c b/ircd/channel.c index 4ba3669..d6e72c8 100644 --- a/ircd/channel.c +++ b/ircd/channel.c @@ -2172,9 +2172,10 @@ modebuf_extract(struct ModeBuf *mbuf, char *buf) return; } -/** Simple function to invalidate bans +/** Simple function to invalidate a channel's ban cache. * - * This function sets all bans as being valid. + * This function marks all members of the channel as being neither + * banned nor banned. * * @param chan The channel to operate on. */ @@ -2766,9 +2767,9 @@ int apply_ban(struct Ban **banlist, struct Ban *newban, int do_free) assert(newban->flags & (BAN_ADD|BAN_DEL)); if (newban->flags & BAN_ADD) { size_t totlen = 0; - /* If a less specific entry is found, fail. */ + /* If a less specific *active* entry is found, fail. */ for (ban = *banlist; ban; ban = ban->next) { - if (!bmatch(ban, newban)) { + if (!bmatch(ban, newban) && !(ban->flags & BAN_DEL)) { if (do_free) free_ban(newban); return 1; -- 2.20.1