From 1f5daa31a1bdf32731febf902c469be4cb1c8b32 Mon Sep 17 00:00:00 2001
From: Randy Sommerfeld <cyan@synchro.net>
Date: Tue, 14 Nov 2023 07:39:15 +0700
Subject: [PATCH] Check direct match in server names first before wildcards

---
 exec/load/ircd/core.js         | 23 ++++++++++++++++++++---
 exec/load/ircd/unregistered.js |  3 +++
 2 files changed, 23 insertions(+), 3 deletions(-)

diff --git a/exec/load/ircd/core.js b/exec/load/ircd/core.js
index 1824106be0..ba8ebce957 100644
--- a/exec/load/ircd/core.js
+++ b/exec/load/ircd/core.js
@@ -2754,26 +2754,43 @@ function IRCClient_check_timeout() {
 
 function IRCClient_finalize_server_connect(states) {
 	var i;
+	var pass_sent = false;
 
 	HCC_Counter++;
-	gnotice(format("Link with %s (%s) established, states: %s",
+	gnotice(format("Link established with %s (%s:%u), Sock (%s:%u), Class %u.",
 		this.nick,
 		this.hostname,
-		states
+		this.socket.remote_ip_address,
+		this.socket.remote_port,
+		this.ircclass
 	));
 	if (server.client_update !== undefined)
 		server.client_update(this.socket, this.nick, this.hostname);
 	if (!this.socket.outbound) {
 		for (i in CLines) {
-			if(wildmatch(this.nick,CLines[i].servername)) {
+			if (this.nick == CLines[i].servername) {
 				this.rawout(format(
 					"PASS %s :%s",
 					CLines[i].password,
 					states
 				));
+				pass_sent = true;
 				break;
 			}
 		}
+		/* FIXME: Might want to have this behaviour able to be toggled on/off globally */
+		if (!pass_sent) {
+			for (i in CLines) {
+				if(wildmatch(this.nick,CLines[i].servername)) {
+					this.rawout(format(
+						"PASS %s :%s",
+						CLines[i].password,
+						states
+					));
+					break;
+				}
+			}
+		}
 		this.rawout("CAPAB " + SERVER_CAPAB);
 		this.rawout("SERVER " + ServerName + " 1 :" + ServerDesc);
 	}
diff --git a/exec/load/ircd/unregistered.js b/exec/load/ircd/unregistered.js
index f8f750e54e..14e5e09860 100644
--- a/exec/load/ircd/unregistered.js
+++ b/exec/load/ircd/unregistered.js
@@ -473,6 +473,9 @@ function Register_Unregistered_Local_Server(unreg, p, nline) {
 	if (typeof Servers[p[0].toLowerCase()] !== 'undefined')
 		throw "Trying to overwrite existing server in Register_Unregistered_Local_Server()";
 
+	if (typeof Local_Servers[p[0].toLowerCase()] !== 'undefined')
+		throw "Trying to overwrite existing LOCAL server in Register_Unregistered_Local_Server()";
+
 	Servers[p[0].toLowerCase()] = new IRC_Server();
 	s = Servers[p[0].toLowerCase()];
 	Local_Servers[p[0].toLowerCase()] = s;
-- 
GitLab