diff --git a/exec/ircd.js b/exec/ircd.js index ec841e238b7834e6186c4760a738c36ac2a7ae56..7eecc3e887ba4f4a9f23d05fb90eaf6a3b85ea3f 100644 --- a/exec/ircd.js +++ b/exec/ircd.js @@ -18,6 +18,8 @@ // Copyright 2003-2009 Randolph Erwin Sommerfeld <sysop@rrx.ca> // +load("synchronet-json.js"); + load("sbbsdefs.js"); load("sockdefs.js"); load("nodedefs.js"); @@ -157,6 +159,8 @@ for (cmdarg=0;cmdarg<argc;cmdarg++) { read_config_file(); +log("---got past read_config---"); + if(this.server==undefined) { // Running from JSexec? if (!jsexec_revision_detail) jsexec_revision_detail = "JSexec"; @@ -379,7 +383,7 @@ function searchbyserver(servnick) { // 9 characters for 'anonymous' users (i.e. not using PASS to authenticate.) // hostile characters like !,@,: etc would be bad here :) function parse_username(str) { - str.replace(/[^\w]/g,""); + str = str.replace(/[^\w]/g,"").toLowerCase(); if (!str) str = "user"; // nothing? we'll give you something boring. return str.slice(0,9); diff --git a/exec/load/ircd_unreg.js b/exec/load/ircd_unreg.js index 335bf1d32e5f673ae8c7ae8d5be7b3d8f14ab4e4..f6620c31e3b4089d5ea2a10a7d792f064f42315d 100644 --- a/exec/load/ircd_unreg.js +++ b/exec/load/ircd_unreg.js @@ -15,7 +15,7 @@ // // Synchronet IRC Daemon as per RFC 1459, link compatible with Bahamut 1.4 // -// Copyright 2003-2009 Randolph Erwin Sommerfeld <sysop@rrx.ca> +// Copyright 2003-2010 Randolph Erwin Sommerfeld <sysop@rrx.ca> // // ** Handle unregistered clients. // @@ -48,6 +48,8 @@ function Unregistered_Client(id,socket) { ////////// FUNCTIONS // Functions we use to control clients (specific) this.work = Unregistered_Commands; + this.JSON_Unregistered_Commands = JSON_Unregistered_Commands; + this.IRC_Unregistered_Commands = IRC_Unregistered_Commands; this.quit = Unregistered_Quit; this.check_timeout = IRCClient_check_timeout; this.check_queues = IRCClient_check_queues; @@ -83,23 +85,50 @@ function Unregistered_Client(id,socket) { } else { this.pending_resolve = load(true,"dnshelper.js",this.ip); } - this.server_notice("*** " + VERSION + " (" + serverdesc + ") Ready."); + this.server_notice("*** " + VERSION + " (" + serverdesc + ") Ready. " + id); } ////////// Command Parsers ////////// function Unregistered_Commands(cmdline) { - var clockticks = system.timer; - var cmd; - var command; - // Only accept up to 512 bytes from unregistered clients. cmdline = cmdline.slice(0,512); + // Kludge for broken clients. if ((cmdline[0] == "\r") || (cmdline[0] == "\n")) cmdline = cmdline.slice(1); + if (debug) log(LOG_DEBUG,"[UNREG]: " + cmdline); + + // Detect JSON message + if (cmdline[0] == "{") + this.JSON_Unregistered_Commands(cmdline); + else + this.IRC_Unregistered_Commands(cmdline); +} + +function JSON_Unregistered_Commands(cmdline) { + var msg = JSON.parse(cmdline); + if (msg.realname) + this.realname = msg.realname.slice(0,50); + if (msg.nick) { + msg.nick = msg.nick.slice(0,max_nicklen); + if (this.check_nickname(msg.nick)) + this.nick = msg.nick; + } + if (msg.uprefix) + this.uprefix = parse_username(msg.uprefix); + if (msg.password) + this.password = msg.password; + this.rawout(JSON.stringify(this)); +} + +function IRC_Unregistered_Commands(cmdline) { + var clockticks = system.timer; + var cmd; + var command; + cmd = cmdline.split(" "); if (cmdline[0] == ":") { // Silently ignore NULL originator commands. @@ -266,7 +295,7 @@ function Unregistered_Commands(cmdline) { if (usernum) { var bbsuser = new User(usernum); if (this.password.toUpperCase() == bbsuser.security.password) { - this.uprefix = parse_username(bbsuser.handle).toLowerCase().slice(0,10); + this.uprefix = parse_username(bbsuser.handle); bbsuser.connection = "IRC"; bbsuser.logontime = time(); } @@ -301,6 +330,11 @@ function Unregistered_Quit(msg) { delete Unregistered[this.id]; delete this; rebuild_socksel_array = true; + /* debug */ + log("end of Unregistered_Quit()"); + for (x in Unregistered) { + log("Unreg member: " + x); + } } function Unregistered_Resolve_Check() {