1
0
mirror of https://github.com/anope/anope.git synced 2026-07-05 06:13:13 +02:00

BUILD : 1.7.18 (1241) BUGS : 707 NOTES : Applied a patch by jilles to fix various charybdis and ts6 related issues

git-svn-id: svn://svn.anope.org/anope/trunk@1241 31f1291d-b8d6-0310-a050-a5561fc1590b


git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@960 5417fbe8-f217-4b02-8779-1006273d7864
This commit is contained in:
geniusdex geniusdex@31f1291d-b8d6-0310-a050-a5561fc1590b
2007-04-21 12:35:13 +00:00
parent 208219f8ec
commit d04fbb953b
4 changed files with 80 additions and 58 deletions
+3
View File
@@ -25,6 +25,9 @@ Provided by Jan Milants <jan_renee@msn.com> - 2007
04/21 F Array count decremention in the ChanServ access lists. [#662]
04/21 F Swapped ACCESS_ADD and ACCESS_CHANGE events in cs_xop. [#705]
Provided by Jilles Tjoelker <jilles+anope@stack.nl> - 2007
04/21 F Various Charybdis and TS6 related fixes. [#707]
Anope Version 1.7.18
--------------------
12/09 A Ability to see if AutoOp is enabled in NickServ INFO displays. [#621]
+6 -44
View File
@@ -218,7 +218,8 @@ void chan_set_modes(const char *source, Channel * chan, int ac, char **av,
}
}
if (!(user = finduser(*av))) {
if (!(user = finduser(*av))
&& !(UseTS6 && ircd->ts6 && (user = find_byuid(*av)))) {
if (debug) {
alog("debug: MODE %s %c%c for nonexistent user %s",
chan->name, (add ? '+' : '-'), mode, *av);
@@ -1080,7 +1081,7 @@ void do_cmode(const char *source, int ac, char **av)
void do_cmode(const char *source, int ac, char **av)
{
Channel *chan;
Channel *chan;
ChannelInfo *ci = NULL;
int i;
char *t;
@@ -1106,37 +1107,10 @@ void do_cmode(const char *source, int ac, char **av)
}
}
}
if (UseTS6 && ircd->ts6) {
if (*av[0] == '#' || *av[0] == '&') {
if (debug) {
alog("debug: Before TS6 swap: do_cmode() chan %s : mode %s : extra %s", av[1], av[2], av[3]);
}
if (ac >= 2) {
av[0] = sstrdup(av[1]);
tofree0 = 1;
} else {
av[0] = NULL;
}
if (ac >= 3) {
av[1] = sstrdup(av[2]);
tofree1 = 1;
} else {
av[1] = NULL;
}
if (ac >= 4) {
av[2] = sstrdup(av[3]);
tofree2 = 1;
} else {
av[2] = NULL;
}
if (debug) {
alog("debug: After TS swap: do_cmode() chan %s : mode %s : extra %s", av[0], av[1], av[2]);
}
} else {
if (debug) {
/* :42XAAAAAO TMODE 1106409026 #ircops +b *!*@*.aol.com */
if (UseTS6 && ircd->ts6) {
if (isdigit(av[0][0])) {
ac--;
av++;
}
@@ -1148,12 +1122,6 @@ void do_cmode(const char *source, int ac, char **av)
if (!(ci && (ci->flags & CI_VERBOTEN)))
if (debug) {
alog("debug: MODE %s for nonexistent channel %s",
merge_args(ac - 1, av + 1), av[0]);
}
if (tofree0)
free(av[0]);
if (tofree1)
free(av[1]);
merge_args(ac - 1, av + 1), av[0]);
}
return;
@@ -1169,12 +1137,6 @@ void do_cmode(const char *source, int ac, char **av)
}
ac--;
av++;
chan_set_modes(source, chan, ac, av, 1);
if (tofree0)
free(av[0]);
if (tofree1)
free(av[1]);
av++;
chan_set_modes(source, chan, ac, av, 1);
}
+66 -13
View File
@@ -73,12 +73,12 @@ IRCDVar myIrcd[] = {
0, /* Chan Reg */
0, /* Channel Mode */
0, /* vidents */
0, /* svshold */
1, /* svshold */
0, /* time stamp on mode */
0, /* NICKIP */
0, /* UMODE */
0, /* O:LINE */
0, /* VHOST ON NICK */
1, /* VHOST ON NICK */
0, /* Change RealName */
CMODE_p, /* No Knock */
0, /* Admin Only */
@@ -596,14 +596,14 @@ int anope_event_nick(char *source, int ac, char **av)
/* Source is always the server */
*source = '\0';
user = do_nick(source, av[0], av[4], av[5], s->name, av[8],
strtoul(av[2], NULL, 10), 0, 0, "*", av[7]);
strtoul(av[2], NULL, 10), 0, 0, NULL, av[7]);
if (user) {
anope_set_umode(user, 1, &av[3]);
}
} else {
if (ac != 2) {
user = do_nick(source, av[0], av[4], av[5], av[6], av[7],
strtoul(av[2], NULL, 10), 0, 0, "*", NULL);
strtoul(av[2], NULL, 10), 0, 0, NULL, NULL);
if (user)
anope_set_umode(user, 1, &av[3]);
} else {
@@ -614,6 +614,41 @@ int anope_event_nick(char *source, int ac, char **av)
return MOD_CONT;
}
/*
TS6
av[0] = nick
av[1] = hop
av[2] = ts
av[3] = modes
av[4] = user
av[5] = vhost
av[6] = IP
av[7] = UID
ac[8] = host or *
ac[9] = services login
av[10] = info
*/
int anope_event_euid(char *source, int ac, char **av)
{
Server *s;
User *user;
time_t ts;
if (UseTS6 && ac == 11) {
s = findserver_uid(servlist, source);
/* Source is always the server */
*source = '\0';
ts = strtoul(av[2], NULL, 10);
user = do_nick(source, av[0], av[4], !strcmp(av[8], "*") ? av[5] : av[8], s->name, av[10],
ts, !stricmp(av[0], av[9]) ? ts : 0, 0, av[5], av[7]);
if (user) {
anope_set_umode(user, 1, &av[3]);
}
}
return MOD_CONT;
}
int anope_event_topic(char *source, int ac, char **av)
{
User *u;
@@ -737,7 +772,6 @@ void moduleAddIRCDMsgs(void)
if (UseTS6) {
TS6SID = sstrdup(Numeric);
UseTSMODE = 1; /* TMODE */
}
m = createMessage("401", anope_event_null); addCoreMessage(IRCD,m);
@@ -777,6 +811,7 @@ void moduleAddIRCDMsgs(void)
m = createMessage("421", anope_event_null); addCoreMessage(IRCD,m);
m = createMessage("ENCAP", anope_event_null); addCoreMessage(IRCD,m);
m = createMessage("SID", anope_event_sid); addCoreMessage(IRCD,m);
m = createMessage("EUID", anope_event_euid); addCoreMessage(IRCD,m);
}
/* *INDENT-ON* */
@@ -967,11 +1002,12 @@ void charybdis_cmd_svsinfo()
PARA - supports invite broadcasting for +p
ENCAP - supports message encapsulation
SERVICES - supports services-oriented TS6 extensions
EUID - supports EUID and non-ENCAP CHGHOST
*/
void charybdis_cmd_capab()
{
send_cmd(NULL,
"CAPAB :QS EX CHW IE KLN GLN KNOCK TB UNKLN CLUSTER ENCAP SERVICES");
"CAPAB :QS EX CHW IE KLN GLN KNOCK TB UNKLN CLUSTER ENCAP SERVICES EUID");
}
/* PASS */
@@ -1069,10 +1105,16 @@ int anope_event_away(char *source, int ac, char **av)
int anope_event_kill(char *source, int ac, char **av)
{
User *u = NULL;
if (ac != 2)
return MOD_CONT;
m_kill(av[0], av[1]);
if (UseTS6) {
u = find_byuid(av[0]);
}
m_kill(u ? u->nick : av[0], av[1]);
return MOD_CONT;
}
@@ -1092,7 +1134,8 @@ void charybdis_cmd_eob()
int anope_event_join(char *source, int ac, char **av)
{
if (ac != 1) {
do_sjoin(source, ac, av);
/* ignore cmodes in JOIN as per TS6 v8 */
do_sjoin(source, ac > 2 ? 2 : ac, av);
return MOD_CONT;
} else {
do_join(source, ac, av);
@@ -1524,7 +1567,7 @@ int anope_event_mode(char *source, int ac, char **av)
int anope_event_tmode(char *source, int ac, char **av)
{
if (*av[1] == '#' || *av[1] == '&') {
if (ac > 2 && (*av[1] == '#' || *av[1] == '&')) {
do_cmode(source, ac, av);
}
return MOD_CONT;
@@ -1574,19 +1617,29 @@ int anope_event_capab(char *source, int ac, char **av)
/* SVSHOLD - set */
void charybdis_cmd_svshold(char *nick)
{
/* Not supported by this IRCD */
send_cmd(NULL, "ENCAP * NICKDELAY 300 %s", nick);
}
/* SVSHOLD - release */
void charybdis_cmd_release_svshold(char *nick)
{
/* Not Supported by this IRCD */
send_cmd(NULL, "ENCAP * NICKDELAY 0 %s", nick);
}
/* SVSNICK */
void charybdis_cmd_svsnick(char *nick, char *newnick, time_t when)
{
/* RSFNC blah */
User *u;
if (!nick || !newnick) {
return;
}
u = finduser(nick);
if (!u)
return;
send_cmd(NULL, "ENCAP %s RSFNC %s %s %ld %ld", u->server->name,
u->nick, newnick, (long int)when, (long int)u->timestamp);
}
void charybdis_cmd_guest_nick(char *nick, char *user, char *host, char *real,
@@ -1928,7 +1981,7 @@ int AnopeInit(int argc, char **argv)
pmodule_ircd_cbmodes(myCbmodes);
pmodule_ircd_cmmodes(myCmmodes);
pmodule_ircd_csmodes(myCsmodes);
pmodule_ircd_useTSMode(1);
pmodule_ircd_useTSMode(0);
/** Deal with modes anope _needs_ to know **/
pmodule_invis_umode(UMODE_i);
+5 -1
View File
@@ -9,10 +9,14 @@ VERSION_MAJOR="1"
VERSION_MINOR="7"
VERSION_PATCH="18"
VERSION_EXTRA="-svn"
VERSION_BUILD="1240"
VERSION_BUILD="1241"
# $Log$
#
# BUILD : 1.7.18 (1241)
# BUGS : 707
# NOTES : Applied a patch by jilles to fix various charybdis and ts6 related issues
#
# BUILD : 1.7.18 (1240)
# BUGS : 706
# NOTES : Fixed EVENT_ACCESS_DEL nog being sent on each delete when mass-deleting in cs_xop