diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/channels.c | 20 | ||||
-rw-r--r-- | src/users.c | 3 |
2 files changed, 18 insertions, 5 deletions
diff --git a/src/channels.c b/src/channels.c index 8f77d8fdd..f2614b799 100644 --- a/src/channels.c +++ b/src/channels.c @@ -1104,11 +1104,21 @@ void do_cmode(const char *source, int ac, char **av) /* :42XAAAAAO TMODE 1106409026 #ircops +b *!*@*.aol.com */ if (UseTS6 && ircd->ts6) { - alog("chan %s : mode %s : extra %s", av[1], av[2], av[3]); - av[0] = sstrdup(av[1]); - av[1] = sstrdup(av[2]); - av[2] = sstrdup(av[3]); - alog("chan %s : mode %s : extra %s", av[0], av[1], av[2]); + 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]); + } + av[0] = (ac >= 2 ? sstrdup(av[1]) : NULL); + av[1] = (ac >= 3 ? sstrdup(av[2]) : NULL); + av[2] = (ac >= 4 ? sstrdup(av[3]) : 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) { + alog("debug: TS swap not needed: do_cmode() chan %s : mode %s : extra %s", av[0], av[1], av[2]); + } + } } chan = findchan(av[0]); diff --git a/src/users.c b/src/users.c index c8abab7c3..5d1583b25 100644 --- a/src/users.c +++ b/src/users.c @@ -656,6 +656,9 @@ User *do_nick(const char *source, char *nick, char *username, char *host, /* An old user changing nicks. */ if (UseTS6) user = find_byuid(source); + if (!user) { + user = finduser(source); + } else user = finduser(source); |