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/core/cs_clear.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/core/cs_clear.c')
-rw-r--r-- | src/core/cs_clear.c | 216 |
1 files changed, 174 insertions, 42 deletions
diff --git a/src/core/cs_clear.c b/src/core/cs_clear.c index db0f1d52f..16e5d6044 100644 --- a/src/core/cs_clear.c +++ b/src/core/cs_clear.c @@ -192,7 +192,9 @@ int do_clear(User * u) notice_lang(s_ChanServ, u, CHAN_CLEARED_MODES, chan); } else if (stricmp(what, "ops") == 0) { - char *av[3]; + char *av[4]; + int ac; + char buf[BUFSIZE]; struct c_userlist *cu, *next; if (ircd->svsmode_ucmode) { @@ -213,20 +215,54 @@ int do_clear(User * u) } else { snprintf(tmp, BUFSIZE, "%so", ircd->ownerunset); - av[1] = sstrdup(tmp); + + if (ircdcap->tsmode) { + snprintf(buf, BUFSIZE - 1, "%ld", (long int) time(NULL)); + av[1] = buf; + av[2] = sstrdup(tmp); + } else { + av[1] = sstrdup(tmp); + } } } else { snprintf(tmp, BUFSIZE, "%so", ircd->adminunset); - av[1] = sstrdup(tmp); + + if (ircdcap->tsmode) { + snprintf(buf, BUFSIZE - 1, "%ld", (long int) time(NULL)); + av[1] = buf; + av[2] = sstrdup(tmp); + } else { + av[1] = sstrdup(tmp); + } } } else { - av[1] = sstrdup("-o"); + if (ircdcap->tsmode) { + snprintf(buf, BUFSIZE - 1, "%ld", (long int) time(NULL)); + av[1] = buf; + av[2] = sstrdup("-o"); + } else { + av[1] = sstrdup("-o"); + } + } + + if (ircdcap->tsmode) { + av[3] = sstrdup(cu->user->nick); + ac = 4; + } else { + av[2] = sstrdup(cu->user->nick); + ac = 3; + } + + do_cmode(s_ChanServ, ac, av); + + if (ircdcap->tsmode) { + free(av[3]); + free(av[2]); + } else { + free(av[2]); + free(av[1]); } - av[2] = sstrdup(cu->user->nick); - do_cmode(s_ChanServ, 3, av); - free(av[2]); - free(av[1]); } free(av[0]); } else { @@ -240,73 +276,169 @@ int do_clear(User * u) } else { snprintf(tmp, BUFSIZE, "%so", ircd->ownerunset); - av[1] = sstrdup(tmp); + if (ircdcap->tsmode) { + snprintf(buf, BUFSIZE - 1, "%ld", (long int) time(NULL)); + av[1] = buf; + av[2] = sstrdup(tmp); + } else { + av[1] = sstrdup(tmp); + } } } else { snprintf(tmp, BUFSIZE, "%so", ircd->adminunset); - av[1] = sstrdup(tmp); + if (ircdcap->tsmode) { + snprintf(buf, BUFSIZE - 1, "%ld", (long int) time(NULL)); + av[1] = buf; + av[2] = sstrdup(tmp); + } else { + av[1] = sstrdup(tmp); + } } } else { - av[1] = sstrdup("-o"); + if (ircdcap->tsmode) { + snprintf(buf, BUFSIZE - 1, "%ld", (long int) time(NULL)); + av[1] = buf; + av[2] = sstrdup("-o"); + } else { + av[1] = sstrdup("-o"); + } + } + + if (ircdcap->tsmode) { + av[3] = sstrdup(cu->user->nick); + ac = 4; + + anope_cmd_mode(whosends(ci), av[0], "%s :%s", av[2], + av[3]); + } else { + av[2] = sstrdup(cu->user->nick); + ac = 3; + + anope_cmd_mode(whosends(ci), av[0], "%s :%s", av[1], + av[2]); + } + + do_cmode(s_ChanServ, ac, av); + + if (ircdcap->tsmode) { + free(av[3]); + free(av[2]); + free(av[0]); + } else { + free(av[2]); + free(av[1]); + free(av[0]); } - av[2] = sstrdup(cu->user->nick); - anope_cmd_mode(whosends(ci), av[0], "%s :%s", av[1], - av[2]); - do_cmode(s_ChanServ, 3, av); - free(av[2]); - free(av[1]); - free(av[0]); } } notice_lang(s_ChanServ, u, CHAN_CLEARED_OPS, chan); } else if (ircd->halfop && stricmp(what, "hops") == 0) { - char *av[3]; + char *av[4]; + int ac; + char buf[BUFSIZE]; struct c_userlist *cu, *next; for (cu = c->users; cu; cu = next) { next = cu->next; if (!chan_has_user_status(c, cu->user, CUS_HALFOP)) continue; - av[0] = sstrdup(chan); - av[1] = sstrdup("-h"); - av[2] = sstrdup(cu->user->nick); + + if (ircdcap->tsmode) { + snprintf(buf, BUFSIZE - 1, "%ld", (long int) time(NULL)); + av[0] = sstrdup(chan); + av[1] = buf; + av[2] = sstrdup("-h"); + av[3] = sstrdup(cu->user->nick); + ac = 4; + } else { + av[0] = sstrdup(chan); + av[1] = sstrdup("-h"); + av[2] = sstrdup(cu->user->nick); + ac = 3; + } + if (ircd->svsmode_ucmode) { - anope_cmd_svsmode_chan(av[0], av[1], NULL); - do_cmode(s_ChanServ, 3, av); + if (ircdcap->tsmode) + anope_cmd_svsmode_chan(av[0], av[2], NULL); + else + anope_cmd_svsmode_chan(av[0], av[1], NULL); + + do_cmode(s_ChanServ, ac, av); break; } else { - anope_cmd_mode(whosends(ci), av[0], "%s :%s", av[1], - av[2]); + if (ircdcap->tsmode) + anope_cmd_mode(whosends(ci), av[0], "%s :%s", av[2], + av[3]); + else + anope_cmd_mode(whosends(ci), av[0], "%s :%s", av[1], + av[2]); + } + do_cmode(s_ChanServ, ac, av); + + if (ircdcap->tsmode) { + free(av[3]); + free(av[2]); + free(av[0]); + } else { + free(av[2]); + free(av[1]); + free(av[0]); } - do_cmode(s_ChanServ, 3, av); - free(av[2]); - free(av[1]); - free(av[0]); } notice_lang(s_ChanServ, u, CHAN_CLEARED_HOPS, chan); } else if (stricmp(what, "voices") == 0) { - char *av[3]; + char *av[4]; + int ac; + char buf[BUFSIZE]; struct c_userlist *cu, *next; for (cu = c->users; cu; cu = next) { next = cu->next; if (!chan_has_user_status(c, cu->user, CUS_VOICE)) continue; - av[0] = sstrdup(chan); - av[1] = sstrdup("-v"); - av[2] = sstrdup(cu->user->nick); + + if (ircdcap->tsmode) { + snprintf(buf, BUFSIZE - 1, "%ld", (long int) time(NULL)); + av[0] = sstrdup(chan); + av[1] = buf; + av[2] = sstrdup("-v"); + av[3] = sstrdup(cu->user->nick); + ac = 4; + } else { + av[0] = sstrdup(chan); + av[1] = sstrdup("-v"); + av[2] = sstrdup(cu->user->nick); + ac = 3; + } + if (ircd->svsmode_ucmode) { - anope_cmd_svsmode_chan(av[0], av[1], NULL); - do_cmode(s_ChanServ, 3, av); + if (ircdcap->tsmode) + anope_cmd_svsmode_chan(av[0], av[2], NULL); + else + anope_cmd_svsmode_chan(av[0], av[1], NULL); + + do_cmode(s_ChanServ, ac, av); break; } else { - anope_cmd_mode(whosends(ci), av[0], "%s :%s", av[1], - av[2]); + if (ircdcap->tsmode) { + anope_cmd_mode(whosends(ci), av[0], "%s :%s", av[2], + av[3]); + } else { + anope_cmd_mode(whosends(ci), av[0], "%s :%s", av[1], + av[2]); + } + } + do_cmode(s_ChanServ, ac, av); + + if (ircdcap->tsmode) { + free(av[3]); + free(av[2]); + free(av[0]); + } else { + free(av[2]); + free(av[1]); + free(av[0]); } - do_cmode(s_ChanServ, 3, av); - free(av[2]); - free(av[1]); - free(av[0]); } notice_lang(s_ChanServ, u, CHAN_CLEARED_VOICES, chan); } else if (stricmp(what, "users") == 0) { |