summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/channels.c20
-rw-r--r--src/users.c3
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);