diff options
author | drstein drstein@31f1291d-b8d6-0310-a050-a5561fc1590b <drstein drstein@31f1291d-b8d6-0310-a050-a5561fc1590b@5417fbe8-f217-4b02-8779-1006273d7864> | 2008-02-05 19:16:42 +0000 |
---|---|---|
committer | drstein drstein@31f1291d-b8d6-0310-a050-a5561fc1590b <drstein drstein@31f1291d-b8d6-0310-a050-a5561fc1590b@5417fbe8-f217-4b02-8779-1006273d7864> | 2008-02-05 19:16:42 +0000 |
commit | 2a08701f557179d6a3787aae896d7dd9eb6e8982 (patch) | |
tree | ff5b7ef0575d94496e85256718da08cba4db84b2 /src/botserv.c | |
parent | 1baff08ad8255b254149d456c632c853d3dc5c81 (diff) |
BUILD : 1.7.21 (1374) BUGS : 820 NOTES : do_cmode() called without passing TS
git-svn-id: svn://svn.anope.org/anope/trunk@1374 31f1291d-b8d6-0310-a050-a5561fc1590b
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@1089 5417fbe8-f217-4b02-8779-1006273d7864
Diffstat (limited to 'src/botserv.c')
-rw-r--r-- | src/botserv.c | 70 |
1 files changed, 56 insertions, 14 deletions
diff --git a/src/botserv.c b/src/botserv.c index cc2dadd89..46f5fe3ac 100644 --- a/src/botserv.c +++ b/src/botserv.c @@ -767,25 +767,50 @@ void bot_join(ChannelInfo * ci) int count = ci->c->bancount; if (count) { char botmask[BUFSIZE]; + char buf[BUFSIZE]; char **bans = scalloc(sizeof(char *) * count, 1); - char *av[3]; + char *av[4]; + int ac; memcpy(bans, ci->c->bans, sizeof(char *) * count); snprintf(botmask, sizeof(botmask), "%s!%s@%s", ci->bi->nick, ci->bi->user, ci->bi->host); - av[0] = ci->c->name; - av[1] = sstrdup("-b"); + if (ircdcap->tsmode) { + snprintf(buf, BUFSIZE - 1, "%ld", (long int) time(NULL)); + av[0] = ci->c->name; + av[1] = buf; + av[2] = sstrdup("-b"); + ac = 4; + } else { + av[0] = ci->c->name; + av[1] = sstrdup("-b"); + ac = 3; + } + for (i = 0; i < count; i++) { if (match_wild_nocase(ci->c->bans[i], botmask)) { anope_cmd_mode(ci->bi->nick, ci->name, "-b %s", bans[i]); - av[2] = sstrdup(bans[i]); - do_cmode(ci->bi->nick, 3, av); - free(av[2]); + if (ircdcap->tsmode) + av[3] = sstrdup(bans[i]); + else + av[2] = sstrdup(bans[i]); + + do_cmode(ci->bi->nick, ac, av); + + if (ircdcap->tsmode) + free(av[3]); + else + free(av[2]); } } - free(av[1]); + + if (ircdcap->tsmode) + free(av[2]); + else + free(av[1]); + free(bans); } @@ -832,19 +857,36 @@ static void check_ban(ChannelInfo * ci, User * u, int ttbtype) bd->ttb[ttbtype]++; if (bd->ttb[ttbtype] == ci->ttb[ttbtype]) { - char *av[3]; + char *av[4]; + int ac; char mask[BUFSIZE]; + char buf[BUFSIZE]; bd->ttb[ttbtype] = 0; - av[0] = ci->name; - av[1] = sstrdup("+b"); get_idealban(ci, u, mask, sizeof(mask)); - av[2] = mask; - anope_cmd_mode(ci->bi->nick, av[0], "+b %s", av[2]); - do_cmode(ci->bi->nick, 3, av); + + if (ircdcap->tsmode) { + snprintf(buf, BUFSIZE - 1, "%ld", (long int) time(NULL)); + av[0] = ci->name; + av[1] = buf; + av[2] = sstrdup("+b"); + av[3] = mask; + ac = 4; + } else { + av[0] = ci->name; + av[1] = sstrdup("+b"); + av[2] = mask; + ac = 3; + } + + anope_cmd_mode(ci->bi->nick, ci->name, "+b %s", mask); + do_cmode(ci->bi->nick, ac, av); send_event(EVENT_BOT_BAN, 3, u->nick, ci->name, mask); - free(av[1]); + if (ircdcap->tsmode) + free(av[2]); + else + free(av[1]); } } |