From 5b62f9e21d4c76c0d47b4be89dd443bbd1eb0348 Mon Sep 17 00:00:00 2001 From: Randy Sommerfeld <cyan@synchro.net> Date: Mon, 30 Oct 2023 08:19:59 +0700 Subject: [PATCH] Shore up mode synchronization a bit --- exec/load/ircd/server.js | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/exec/load/ircd/server.js b/exec/load/ircd/server.js index 55a9082df0..f0807ee7cc 100644 --- a/exec/load/ircd/server.js +++ b/exec/load/ircd/server.js @@ -426,7 +426,7 @@ function Server_Work(cmdline) { )); break; } - if (parseInt(p[0]) == j) + if (parseInt(p[0]) == p[0]) p.shift(); if (p[0][0] == "#") { /* Setting a channel mode */ @@ -439,13 +439,18 @@ function Server_Work(cmdline) { )); break; } - if (!j) - j = tmp.created; p.shift(); origin.set_chanmode(tmp,p); break; } /* Setting a user mode */ + if (typeof origin.setusermode !== 'function') { + umode_notice(USERMODE_OPER,"Notice",format( + "Server %s sent non-channel MODE from invalid origin.", + this.nick + )); + break; + } tmp = origin.setusermode(p[1]); if (tmp) { this.bcast_to_servers_raw(format( @@ -1475,6 +1480,17 @@ function IRCClient_server_chan_info(sni_chan) { var modecounter=0; var modestr="+"; var modeargs=""; + for (i in MODE) { + if (MODE[i].state && (sni_chan.mode & i)) + modestr += MODE[i].modechar; + } + if (modestr != "+") { + this.ircout(format("MODE %s %s", + sni_chan.nam, + modestr + )); + } + modestr = "+"; for (i in sni_chan.modelist[CHANMODE_BAN]) { modecounter++; modestr += "b"; -- GitLab