summaryrefslogtreecommitdiff
path: root/src/core/cs_clear.c
diff options
context:
space:
mode:
authordrstein 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
committerdrstein 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
commit2a08701f557179d6a3787aae896d7dd9eb6e8982 (patch)
treeff5b7ef0575d94496e85256718da08cba4db84b2 /src/core/cs_clear.c
parent1baff08ad8255b254149d456c632c853d3dc5c81 (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.c216
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) {