diff --git a/agents/MeshService.exe b/agents/MeshService.exe index a1f6a2ac..858c1178 100644 Binary files a/agents/MeshService.exe and b/agents/MeshService.exe differ diff --git a/agents/MeshService64.exe b/agents/MeshService64.exe index bb5586d2..ee294d26 100644 Binary files a/agents/MeshService64.exe and b/agents/MeshService64.exe differ diff --git a/agents/meshagent_arm b/agents/meshagent_arm index 38ac7c8b..e2f70063 100644 Binary files a/agents/meshagent_arm and b/agents/meshagent_arm differ diff --git a/agents/meshagent_mips b/agents/meshagent_mips index a00626bd..3124806e 100644 Binary files a/agents/meshagent_mips and b/agents/meshagent_mips differ diff --git a/agents/meshagent_pogo b/agents/meshagent_pogo index 7a4f6526..bb3388ef 100644 Binary files a/agents/meshagent_pogo and b/agents/meshagent_pogo differ diff --git a/agents/meshagent_poky b/agents/meshagent_poky index b1e6759e..79050678 100644 Binary files a/agents/meshagent_poky and b/agents/meshagent_poky differ diff --git a/agents/meshagent_poky64 b/agents/meshagent_poky64 index 630ad419..19367b20 100644 Binary files a/agents/meshagent_poky64 and b/agents/meshagent_poky64 differ diff --git a/agents/meshagent_x86 b/agents/meshagent_x86 index d5222f01..10012864 100644 Binary files a/agents/meshagent_x86 and b/agents/meshagent_x86 differ diff --git a/agents/meshagent_x86-64 b/agents/meshagent_x86-64 index 958ac12c..187a8cce 100644 Binary files a/agents/meshagent_x86-64 and b/agents/meshagent_x86-64 differ diff --git a/agents/meshagent_x86-64_nokvm b/agents/meshagent_x86-64_nokvm index b4765b95..6226a92d 100644 Binary files a/agents/meshagent_x86-64_nokvm and b/agents/meshagent_x86-64_nokvm differ diff --git a/agents/meshagent_x86_nokvm b/agents/meshagent_x86_nokvm index babfb0c6..69924ba5 100644 Binary files a/agents/meshagent_x86_nokvm and b/agents/meshagent_x86_nokvm differ diff --git a/agents/MeshCmd-signed.exe b/agents/oldagents/MeshCmd-signed.exe similarity index 100% rename from agents/MeshCmd-signed.exe rename to agents/oldagents/MeshCmd-signed.exe diff --git a/agents/MeshCmd64-signed.exe b/agents/oldagents/MeshCmd64-signed.exe similarity index 100% rename from agents/MeshCmd64-signed.exe rename to agents/oldagents/MeshCmd64-signed.exe diff --git a/agents/MeshService-signed.exe b/agents/oldagents/MeshService-signed.exe similarity index 100% rename from agents/MeshService-signed.exe rename to agents/oldagents/MeshService-signed.exe diff --git a/agents/oldagents/MeshService.exe b/agents/oldagents/MeshService.exe new file mode 100644 index 00000000..a1f6a2ac Binary files /dev/null and b/agents/oldagents/MeshService.exe differ diff --git a/agents/MeshService64-signed.exe b/agents/oldagents/MeshService64-signed.exe similarity index 100% rename from agents/MeshService64-signed.exe rename to agents/oldagents/MeshService64-signed.exe diff --git a/agents/oldagents/MeshService64.exe b/agents/oldagents/MeshService64.exe new file mode 100644 index 00000000..bb5586d2 Binary files /dev/null and b/agents/oldagents/MeshService64.exe differ diff --git a/agents/oldagents/meshagent_arm b/agents/oldagents/meshagent_arm new file mode 100644 index 00000000..38ac7c8b Binary files /dev/null and b/agents/oldagents/meshagent_arm differ diff --git a/agents/meshagent_arm64 b/agents/oldagents/meshagent_arm64 similarity index 100% rename from agents/meshagent_arm64 rename to agents/oldagents/meshagent_arm64 diff --git a/agents/meshagent_armhf b/agents/oldagents/meshagent_armhf similarity index 100% rename from agents/meshagent_armhf rename to agents/oldagents/meshagent_armhf diff --git a/agents/meshagent_freebsd_x86-64 b/agents/oldagents/meshagent_freebsd_x86-64 similarity index 100% rename from agents/meshagent_freebsd_x86-64 rename to agents/oldagents/meshagent_freebsd_x86-64 diff --git a/agents/oldagents/meshagent_mips b/agents/oldagents/meshagent_mips new file mode 100644 index 00000000..a00626bd Binary files /dev/null and b/agents/oldagents/meshagent_mips differ diff --git a/agents/meshagent_osx-x86-64 b/agents/oldagents/meshagent_osx-x86-64 similarity index 100% rename from agents/meshagent_osx-x86-64 rename to agents/oldagents/meshagent_osx-x86-64 diff --git a/agents/oldagents/meshagent_pogo b/agents/oldagents/meshagent_pogo new file mode 100644 index 00000000..7a4f6526 Binary files /dev/null and b/agents/oldagents/meshagent_pogo differ diff --git a/agents/oldagents/meshagent_poky b/agents/oldagents/meshagent_poky new file mode 100644 index 00000000..b1e6759e Binary files /dev/null and b/agents/oldagents/meshagent_poky differ diff --git a/agents/oldagents/meshagent_poky64 b/agents/oldagents/meshagent_poky64 new file mode 100644 index 00000000..630ad419 Binary files /dev/null and b/agents/oldagents/meshagent_poky64 differ diff --git a/agents/oldagents/meshagent_x86 b/agents/oldagents/meshagent_x86 new file mode 100644 index 00000000..d5222f01 Binary files /dev/null and b/agents/oldagents/meshagent_x86 differ diff --git a/agents/oldagents/meshagent_x86-64 b/agents/oldagents/meshagent_x86-64 new file mode 100644 index 00000000..958ac12c Binary files /dev/null and b/agents/oldagents/meshagent_x86-64 differ diff --git a/agents/oldagents/meshagent_x86-64_nokvm b/agents/oldagents/meshagent_x86-64_nokvm new file mode 100644 index 00000000..b4765b95 Binary files /dev/null and b/agents/oldagents/meshagent_x86-64_nokvm differ diff --git a/agents/oldagents/meshagent_x86_nokvm b/agents/oldagents/meshagent_x86_nokvm new file mode 100644 index 00000000..babfb0c6 Binary files /dev/null and b/agents/oldagents/meshagent_x86_nokvm differ diff --git a/meshagent.js b/meshagent.js index 5f9d5626..49f85aa9 100644 --- a/meshagent.js +++ b/meshagent.js @@ -119,7 +119,6 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) { ws.on('message', function (msg) { if (msg.length < 2) return; if (typeof msg == 'object') { msg = msg.toString('binary'); } // TODO: Could change this entire method to use Buffer instead of binary string - if (obj.authenticated == 2) { // We are authenticated if ((obj.agentUpdate == null) && (msg.charCodeAt(0) == 123)) { processAgentData(msg); } // Only process JSON messages if meshagent update is not in progress if (msg.length < 2) return; @@ -372,6 +371,15 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) { ChangeAgentTag(tag); } } else if (obj.authenticated < 2) { // We are not authenticated + // Check if this is a un-authenticated JSON + if (msg.charCodeAt(0) == 123) { + var str = msg.toString('utf8'), command = null; + if (str[0] == '{') { + try { command = JSON.parse(str); } catch (ex) { } // If the command can't be parsed, ignore it. + if ((command != null) && (command.action === 'agentName') && (typeof command.value == 'string') && (command.value.length > 0) && (command.value.length < 256)) { obj.agentName = command.value; } + } + return; + } const cmd = common.ReadShort(msg, 0); if (cmd == 1) { // Agent authentication request @@ -447,7 +455,7 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) { } else if (cmd == 3) { // Agent meshid - if ((msg.length < 72) || ((obj.receivedCommands & 4) != 0)) return; + if ((msg.length < 70) || ((obj.receivedCommands & 4) != 0)) return; obj.receivedCommands += 4; // Agent can't send the same command twice on the same connection ever. Block DOS attack path. // Set the meshid @@ -464,8 +472,14 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) { } //console.log('MeshID', obj.meshid); obj.agentInfo.capabilities = common.ReadInt(msg, 66); - const computerNameLen = common.ReadShort(msg, 70); - obj.agentInfo.computerName = Buffer.from(msg.substring(72, 72 + computerNameLen), 'binary').toString('utf8'); + if (msg.length > 70) { + const computerNameLen = common.ReadShort(msg, 70); + obj.agentInfo.computerName = Buffer.from(msg.substring(72, 72 + computerNameLen), 'binary').toString('utf8'); + //console.log('computerName', msg.length, computerNameLen, obj.agentInfo.computerName); + } else { + obj.agentInfo.computerName = ''; + //console.log('computerName-none'); + } obj.dbMeshKey = 'mesh/' + domain.id + '/' + obj.meshid; completeAgentConnection(); } else if (cmd == 4) { @@ -760,7 +774,8 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) { db.Set({ _id: 'lc' + obj.dbNodeKey, type: 'lastconnect', domain: domain.id, time: obj.connectTime, addr: obj.remoteaddrport, cause: 1 }); // This node does not exist, create it. - var device = { type: 'node', mtype: mesh.mtype, _id: obj.dbNodeKey, icon: obj.agentInfo.platformType, meshid: obj.dbMeshKey, name: obj.agentInfo.computerName, rname: obj.agentInfo.computerName, domain: domain.id, agent: { ver: obj.agentInfo.agentVersion, id: obj.agentInfo.agentId, caps: obj.agentInfo.capabilities }, host: null }; + var agentName = obj.agentName ? obj.agentName : obj.agentInfo.computerName; + var device = { type: 'node', mtype: mesh.mtype, _id: obj.dbNodeKey, icon: obj.agentInfo.platformType, meshid: obj.dbMeshKey, name: agentName, rname: obj.agentInfo.computerName, domain: domain.id, agent: { ver: obj.agentInfo.agentVersion, id: obj.agentInfo.agentId, caps: obj.agentInfo.capabilities }, host: null }; db.Set(device); // Event the new node diff --git a/views/login-mobile.handlebars b/views/login-mobile.handlebars index eee2bcf8..3ae96860 100644 --- a/views/login-mobile.handlebars +++ b/views/login-mobile.handlebars @@ -263,7 +263,7 @@ var newAccount = '{{{newAccount}}}'; var passhint = '{{{passhint}}}'; var newAccountPass = parseInt('{{{newAccountPass}}}'); - var emailCheck = ('{{{emailcheck}}}' == 'true'); + var emailCheck = '{{{emailcheck}}}'; var features = parseInt('{{{features}}}'); var passRequirements = '{{{passRequirements}}}'; if (passRequirements != '') { passRequirements = JSON.parse(decodeURIComponent(passRequirements)); } else { passRequirements = {}; } @@ -322,8 +322,8 @@ QV('newAccountDiv', (newAccount === '1') || (newAccount === 'true')); // If new accounts are not allowed, don't display the new account link. if ((passRequirements.hint === true) && (passhint != null) && (passhint.length > 0)) { QV('showPassHintLink', true); } QV('newAccountPass', (newAccountPass == 1)); - QV('resetAccountDiv', (emailCheck == true)); - QV('hrAccountDiv', (emailCheck == true) || (newAccountPass == 1)); + QV('resetAccountDiv', (emailCheck == 'true')); + QV('hrAccountDiv', (emailCheck == 'true') || (newAccountPass == 1)); if (loginMode == '4') { try { if (hardwareKeyChallenge.length > 0) { hardwareKeyChallenge = JSON.parse(hardwareKeyChallenge); } else { hardwareKeyChallenge = null; } } catch (ex) { hardwareKeyChallenge = null } diff --git a/views/login.handlebars b/views/login.handlebars index 1a5d13cf..a360ec47 100644 --- a/views/login.handlebars +++ b/views/login.handlebars @@ -258,7 +258,7 @@ var loginMode = '{{{loginmode}}}'; var newAccount = '{{{newAccount}}}'; var newAccountPass = parseInt('{{{newAccountPass}}}'); - var emailCheck = ('{{{emailcheck}}}' == 'true'); + var emailCheck = '{{{emailcheck}}}'; var passRequirements = '{{{passRequirements}}}'; var hardwareKeyChallenge = decodeURIComponent('{{{hkey}}}'); if (passRequirements != '') { passRequirements = JSON.parse(decodeURIComponent(passRequirements)); } else { passRequirements = {}; } @@ -337,8 +337,8 @@ QV('newAccountDiv', (newAccount === '1') || (newAccount === 'true')); // If new accounts are not allowed, don't display the new account link. if ((passhint != null) && (passhint.length > 0)) { QV('showPassHintLink', true); } QV('newAccountPass', (newAccountPass == 1)); - QV('resetAccountDiv', (emailCheck == true)); - QV('hrAccountDiv', (emailCheck == true) || (newAccountPass == 1)); + QV('resetAccountDiv', (emailCheck == 'true')); + QV('hrAccountDiv', (emailCheck == 'true') || (newAccountPass == 1)); if (loginMode == '4') { try { if (hardwareKeyChallenge.length > 0) { hardwareKeyChallenge = JSON.parse(hardwareKeyChallenge); } else { hardwareKeyChallenge = null; } } catch (ex) { hardwareKeyChallenge = null } diff --git a/webserver.js b/webserver.js index 02682c2b..8b3fb004 100644 --- a/webserver.js +++ b/webserver.js @@ -4250,7 +4250,7 @@ module.exports.CreateWebServer = function (parent, db, args, certificates) { } } else { xargs.title1 = domain.title1 ? domain.title1 : ''; - xargs.title2 = (args.title1 && domain.title2) ? domain.title2 : ''; + xargs.title2 = (domain.title1 && domain.title2) ? domain.title2 : ''; } xargs.extitle = encodeURIComponent(xargs.title); xargs.domainurl = domain.url;