mirror of
https://github.com/anope/anope.git
synced 2026-07-10 09:23:14 +02:00
BUILD : 1.7.21 (1436) BUGS : 937 NOTES : Rewrote CLEAR OPS to have it send correct mode changes on all ircds.
git-svn-id: svn://svn.anope.org/anope/trunk@1436 31f1291d-b8d6-0310-a050-a5561fc1590b git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@1151 5417fbe8-f217-4b02-8779-1006273d7864
This commit is contained in:
parent
feaa01b272
commit
42f6fa51db
@@ -59,6 +59,7 @@ Anope Version S V N
|
||||
09/03 F Fixed variables not correctly shown in help. [#873]
|
||||
09/04 F Rewrote the ignore system to fix several issues. [#930]
|
||||
09/13 F AKICK now respects the PEACE setting. [#935]
|
||||
09/14 F Fixed CLEAR not always sending correct modes. [#938]
|
||||
|
||||
Provided by Jobe <jobe@anope.org> - 2008
|
||||
09/13 F Fixed bug in ratbox RESV support. [#937]
|
||||
|
||||
+59
-110
@@ -69,7 +69,6 @@ int do_clear(User * u)
|
||||
{
|
||||
char *chan = strtok(NULL, " ");
|
||||
char *what = strtok(NULL, " ");
|
||||
char tmp[BUFSIZE];
|
||||
Channel *c;
|
||||
ChannelInfo *ci;
|
||||
|
||||
@@ -181,13 +180,13 @@ int do_clear(User * u)
|
||||
|
||||
notice_lang(s_ChanServ, u, CHAN_CLEARED_MODES, chan);
|
||||
} else if (stricmp(what, "ops") == 0) {
|
||||
char *av[4];
|
||||
int ac;
|
||||
char buf[BUFSIZE];
|
||||
char *av[6]; /* The max we have to hold: chan, ts, modes(max3), nick, nick, nick */
|
||||
int ac, isop, isadmin, isown, count, i;
|
||||
char buf[BUFSIZE], tmp[BUFSIZE], tmp2[BUFSIZE];
|
||||
struct c_userlist *cu, *next;
|
||||
|
||||
if (ircd->svsmode_ucmode) {
|
||||
av[0] = sstrdup(chan);
|
||||
av[0] = chan;
|
||||
anope_cmd_svsmode_chan(av[0], "-o", NULL);
|
||||
if (ircd->owner) {
|
||||
anope_cmd_svsmode_chan(av[0], ircd->ownerunset, NULL);
|
||||
@@ -197,127 +196,77 @@ int do_clear(User * u)
|
||||
}
|
||||
for (cu = c->users; cu; cu = next) {
|
||||
next = cu->next;
|
||||
if (!chan_has_user_status(c, cu->user, CUS_OP)) {
|
||||
if (!chan_has_user_status(c, cu->user, CUS_PROTECT)) {
|
||||
if (!chan_has_user_status(c, cu->user, CUS_OWNER)) {
|
||||
continue;
|
||||
} else {
|
||||
snprintf(tmp, BUFSIZE, "%so",
|
||||
ircd->ownerunset);
|
||||
isop = chan_has_user_status(c, cu->user, CUS_OP);
|
||||
isadmin = chan_has_user_status(c, cu->user, CUS_PROTECT);
|
||||
isown = chan_has_user_status(c, cu->user, CUS_OWNER);
|
||||
count = (isop ? 1 : 0) + (isadmin ? 1 : 0) + (isown ? 1 : 0);
|
||||
|
||||
if (ircdcap->tsmode) {
|
||||
snprintf(buf, BUFSIZE - 1, "%ld", (long int) time(NULL));
|
||||
av[1] = buf;
|
||||
av[2] = sstrdup(tmp);
|
||||
} else {
|
||||
av[1] = sstrdup(tmp);
|
||||
}
|
||||
if (!isop && !isadmin && !isown)
|
||||
continue;
|
||||
|
||||
}
|
||||
} else {
|
||||
snprintf(tmp, BUFSIZE, "%so", ircd->adminunset);
|
||||
|
||||
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 {
|
||||
if (ircdcap->tsmode) {
|
||||
snprintf(buf, BUFSIZE - 1, "%ld", (long int) time(NULL));
|
||||
av[1] = buf;
|
||||
av[2] = sstrdup("-o");
|
||||
} else {
|
||||
av[1] = sstrdup("-o");
|
||||
}
|
||||
}
|
||||
snprintf(tmp, BUFSIZE, "-%s%s%s", (isop ? "o" : ""), (isadmin ?
|
||||
ircd->adminunset+1 : ""), (isown ? ircd->ownerunset+1 : ""));
|
||||
|
||||
if (ircdcap->tsmode) {
|
||||
av[3] = sstrdup(cu->user->nick);
|
||||
ac = 4;
|
||||
snprintf(buf, BUFSIZE - 1, "%ld", (long int) time(NULL));
|
||||
av[1] = buf;
|
||||
av[2] = tmp;
|
||||
/* We have to give as much nicks as modes.. - Viper */
|
||||
for (i = 0; i < count; i++)
|
||||
av[i+3] = cu->user->nick;
|
||||
ac = 3 + i;
|
||||
} else {
|
||||
av[2] = sstrdup(cu->user->nick);
|
||||
ac = 3;
|
||||
av[1] = tmp;
|
||||
/* We have to give as much nicks as modes.. - Viper */
|
||||
for (i = 0; i < count; i++)
|
||||
av[i+2] = cu->user->nick;
|
||||
ac = 2 + i;
|
||||
}
|
||||
|
||||
do_cmode(s_ChanServ, ac, av);
|
||||
|
||||
if (ircdcap->tsmode) {
|
||||
free(av[3]);
|
||||
free(av[2]);
|
||||
} else {
|
||||
free(av[2]);
|
||||
free(av[1]);
|
||||
}
|
||||
}
|
||||
free(av[0]);
|
||||
} else {
|
||||
av[0] = chan;
|
||||
for (cu = c->users; cu; cu = next) {
|
||||
next = cu->next;
|
||||
av[0] = sstrdup(chan);
|
||||
if (!chan_has_user_status(c, cu->user, CUS_OP)) {
|
||||
if (!chan_has_user_status(c, cu->user, CUS_PROTECT)) {
|
||||
if (!chan_has_user_status(c, cu->user, CUS_OWNER)) {
|
||||
continue;
|
||||
} else {
|
||||
snprintf(tmp, BUFSIZE, "%so",
|
||||
ircd->ownerunset);
|
||||
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);
|
||||
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 {
|
||||
if (ircdcap->tsmode) {
|
||||
snprintf(buf, BUFSIZE - 1, "%ld", (long int) time(NULL));
|
||||
av[1] = buf;
|
||||
av[2] = sstrdup("-o");
|
||||
} else {
|
||||
av[1] = sstrdup("-o");
|
||||
}
|
||||
}
|
||||
isop = chan_has_user_status(c, cu->user, CUS_OP);
|
||||
isadmin = chan_has_user_status(c, cu->user, CUS_PROTECT);
|
||||
isown = chan_has_user_status(c, cu->user, CUS_OWNER);
|
||||
count = (isop ? 1 : 0) + (isadmin ? 1 : 0) + (isown ? 1 : 0);
|
||||
|
||||
if (!isop && !isadmin && !isown)
|
||||
continue;
|
||||
|
||||
snprintf(tmp, BUFSIZE, "-%s%s%s", (isop ? "o" : ""), (isadmin ?
|
||||
ircd->adminunset+1 : ""), (isown ? ircd->ownerunset+1 : ""));
|
||||
/* We need to send the IRCd a nick for every mode.. - Viper */
|
||||
snprintf(tmp2, BUFSIZE, "%s %s %s", (isop ? cu->user->nick : ""),
|
||||
(isadmin ? cu->user->nick : ""), (isown ? cu->user->nick : ""));
|
||||
|
||||
if (!tmp)
|
||||
continue;
|
||||
|
||||
if (ircdcap->tsmode) {
|
||||
av[3] = sstrdup(cu->user->nick);
|
||||
ac = 4;
|
||||
snprintf(buf, BUFSIZE - 1, "%ld", (long int) time(NULL));
|
||||
av[1] = buf;
|
||||
av[2] = tmp;
|
||||
/* We have to give as much nicks as modes.. - Viper */
|
||||
for (i = 0; i < count; i++)
|
||||
av[i+3] = cu->user->nick;
|
||||
ac = 3 + i;
|
||||
|
||||
anope_cmd_mode(whosends(ci), av[0], "%s :%s", av[2],
|
||||
av[3]);
|
||||
anope_cmd_mode(whosends(ci), av[0], "%s %s", av[2], tmp2);
|
||||
} else {
|
||||
av[2] = sstrdup(cu->user->nick);
|
||||
ac = 3;
|
||||
av[1] = tmp;
|
||||
/* We have to give as much nicks as modes.. - Viper */
|
||||
for (i = 0; i < count; i++)
|
||||
av[i+2] = cu->user->nick;
|
||||
ac = 2 + i;
|
||||
|
||||
anope_cmd_mode(whosends(ci), av[0], "%s :%s", av[1],
|
||||
av[2]);
|
||||
anope_cmd_mode(whosends(ci), av[0], "%s %s", av[1], tmp2);
|
||||
}
|
||||
|
||||
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]);
|
||||
}
|
||||
}
|
||||
}
|
||||
notice_lang(s_ChanServ, u, CHAN_CLEARED_OPS, chan);
|
||||
@@ -356,10 +305,10 @@ int do_clear(User * u)
|
||||
break;
|
||||
} else {
|
||||
if (ircdcap->tsmode)
|
||||
anope_cmd_mode(whosends(ci), av[0], "%s :%s", av[2],
|
||||
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],
|
||||
anope_cmd_mode(whosends(ci), av[0], "%s %s", av[1],
|
||||
av[2]);
|
||||
}
|
||||
do_cmode(s_ChanServ, ac, av);
|
||||
@@ -410,10 +359,10 @@ int do_clear(User * u)
|
||||
break;
|
||||
} else {
|
||||
if (ircdcap->tsmode) {
|
||||
anope_cmd_mode(whosends(ci), av[0], "%s :%s", av[2],
|
||||
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],
|
||||
anope_cmd_mode(whosends(ci), av[0], "%s %s", av[1],
|
||||
av[2]);
|
||||
}
|
||||
}
|
||||
|
||||
+5
-1
@@ -9,10 +9,14 @@ VERSION_MAJOR="1"
|
||||
VERSION_MINOR="7"
|
||||
VERSION_PATCH="21"
|
||||
VERSION_EXTRA="-svn"
|
||||
VERSION_BUILD="1435"
|
||||
VERSION_BUILD="1436"
|
||||
|
||||
# $Log$
|
||||
#
|
||||
# BUILD : 1.7.21 (1436)
|
||||
# BUGS : 937
|
||||
# NOTES : Rewrote CLEAR OPS to have it send correct mode changes on all ircds.
|
||||
#
|
||||
# BUILD : 1.7.21 (1435)
|
||||
# BUGS : 935
|
||||
# NOTES : AKICK now respects ChanServ PEACE. Checks are performed before adding a nick/mask.
|
||||
|
||||
Reference in New Issue
Block a user