mirror of
https://github.com/Ylianst/MeshCentral.git
synced 2025-04-07 21:25:31 -04:00
MPS server crash fix, #3027
This commit is contained in:
parent
38be20b912
commit
b07a682044
24
mpsserver.js
24
mpsserver.js
@ -356,7 +356,7 @@ module.exports.CreateMpsServer = function (parent, db, args, certificates) {
|
|||||||
|
|
||||||
// Setup the CIRA keep alive timer
|
// Setup the CIRA keep alive timer
|
||||||
socket.setTimeout(MAX_IDLE);
|
socket.setTimeout(MAX_IDLE);
|
||||||
socket.on('timeout', () => { ciraTimeoutCount++; parent.debug('mps', "CIRA timeout, disconnecting."); try { socket.end(); } catch (e) { } });
|
socket.on('timeout', () => { ciraTimeoutCount++; parent.debug('mps', "CIRA timeout, disconnecting."); obj.close(socket); });
|
||||||
|
|
||||||
socket.addListener('close', function () {
|
socket.addListener('close', function () {
|
||||||
// Traffic accounting
|
// Traffic accounting
|
||||||
@ -390,7 +390,7 @@ module.exports.CreateMpsServer = function (parent, db, args, certificates) {
|
|||||||
// Detect if this is an HTTPS request, if it is, return a simple answer and disconnect. This is useful for debugging access to the MPS port.
|
// Detect if this is an HTTPS request, if it is, return a simple answer and disconnect. This is useful for debugging access to the MPS port.
|
||||||
if (socket.tag.first == true) {
|
if (socket.tag.first == true) {
|
||||||
if (socket.tag.accumulator.length < 5) return;
|
if (socket.tag.accumulator.length < 5) return;
|
||||||
//if (!socket.tag.clientCert.subject) { console.log("MPS Connection, no client cert: " + socket.remoteAddress); socket.write('HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\nConnection: close\r\n\r\nMeshCentral2 MPS server.\r\nNo client certificate given.'); socket.end(); return; }
|
//if (!socket.tag.clientCert.subject) { console.log("MPS Connection, no client cert: " + socket.remoteAddress); socket.write('HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\nConnection: close\r\n\r\nMeshCentral2 MPS server.\r\nNo client certificate given.'); obj.close(socket); return; }
|
||||||
if ((socket.tag.accumulator.substring(0, 4) == 'GET ') || (socket.tag.accumulator.substring(0, 5) == 'HEAD ')) {
|
if ((socket.tag.accumulator.substring(0, 4) == 'GET ') || (socket.tag.accumulator.substring(0, 5) == 'HEAD ')) {
|
||||||
if (args.mpsdebug) { console.log("MPS Connection, HTTP request detected: " + socket.remoteAddress); }
|
if (args.mpsdebug) { console.log("MPS Connection, HTTP request detected: " + socket.remoteAddress); }
|
||||||
socket.removeAllListeners('data');
|
socket.removeAllListeners('data');
|
||||||
@ -441,7 +441,7 @@ module.exports.CreateMpsServer = function (parent, db, args, certificates) {
|
|||||||
|
|
||||||
// Check the incoming domain
|
// Check the incoming domain
|
||||||
var domain = obj.parent.config.domains[domainid];
|
var domain = obj.parent.config.domains[domainid];
|
||||||
if (domain == null) { console.log('CIRA connection for invalid domain. meshid: ' + meshid); socket.end(); return; }
|
if (domain == null) { console.log('CIRA connection for invalid domain. meshid: ' + meshid); obj.close(socket); return; }
|
||||||
|
|
||||||
socket.tag.domain = domain;
|
socket.tag.domain = domain;
|
||||||
socket.tag.domainid = domainid;
|
socket.tag.domainid = domainid;
|
||||||
@ -458,7 +458,7 @@ module.exports.CreateMpsServer = function (parent, db, args, certificates) {
|
|||||||
if (mesh == null) {
|
if (mesh == null) {
|
||||||
unknownTlsMeshIdCount++;
|
unknownTlsMeshIdCount++;
|
||||||
console.log('ERROR: Intel AMT CIRA connected with unknown groupid: ' + socket.tag.meshid);
|
console.log('ERROR: Intel AMT CIRA connected with unknown groupid: ' + socket.tag.meshid);
|
||||||
socket.end();
|
obj.close(socket);
|
||||||
return;
|
return;
|
||||||
} else if (mesh.mtype == 1) {
|
} else if (mesh.mtype == 1) {
|
||||||
// Check if we already have too many devices for this domain
|
// Check if we already have too many devices for this domain
|
||||||
@ -468,7 +468,7 @@ module.exports.CreateMpsServer = function (parent, db, args, certificates) {
|
|||||||
// Too many devices in this domain.
|
// Too many devices in this domain.
|
||||||
maxDomainDevicesReached++;
|
maxDomainDevicesReached++;
|
||||||
console.log('Too many devices on this domain to accept the CIRA connection. meshid: ' + socket.tag.meshid);
|
console.log('Too many devices on this domain to accept the CIRA connection. meshid: ' + socket.tag.meshid);
|
||||||
socket.end();
|
obj.close(socket);
|
||||||
} else {
|
} else {
|
||||||
// Attempts reverse DNS loopup on the device IP address
|
// Attempts reverse DNS loopup on the device IP address
|
||||||
require('dns').reverse(socket.remoteAddr, function (err, hostnames) {
|
require('dns').reverse(socket.remoteAddr, function (err, hostnames) {
|
||||||
@ -513,7 +513,7 @@ module.exports.CreateMpsServer = function (parent, db, args, certificates) {
|
|||||||
// New CIRA connection for unknown node, disconnect.
|
// New CIRA connection for unknown node, disconnect.
|
||||||
unknownTlsNodeCount++;
|
unknownTlsNodeCount++;
|
||||||
console.log('CIRA connection for unknown node with incorrect group type. meshid: ' + socket.tag.meshid);
|
console.log('CIRA connection for unknown node with incorrect group type. meshid: ' + socket.tag.meshid);
|
||||||
socket.end();
|
obj.close(socket);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -536,7 +536,7 @@ module.exports.CreateMpsServer = function (parent, db, args, certificates) {
|
|||||||
// Parse all of the APF data we can
|
// Parse all of the APF data we can
|
||||||
var l = 0;
|
var l = 0;
|
||||||
do { l = ProcessCommand(socket); if (l > 0) { socket.tag.accumulator = socket.tag.accumulator.substring(l); } } while (l > 0);
|
do { l = ProcessCommand(socket); if (l > 0) { socket.tag.accumulator = socket.tag.accumulator.substring(l); } } while (l > 0);
|
||||||
if (l < 0) { socket.end(); }
|
if (l < 0) { obj.close(socket); }
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.log(e);
|
console.log(e);
|
||||||
}
|
}
|
||||||
@ -675,7 +675,7 @@ module.exports.CreateMpsServer = function (parent, db, args, certificates) {
|
|||||||
// Too many devices in this domain.
|
// Too many devices in this domain.
|
||||||
maxDomainDevicesReached++;
|
maxDomainDevicesReached++;
|
||||||
console.log('Too many devices on this domain to accept the CIRA connection. meshid: ' + socket.tag.meshid);
|
console.log('Too many devices on this domain to accept the CIRA connection. meshid: ' + socket.tag.meshid);
|
||||||
socket.end();
|
obj.close(socket);
|
||||||
} else {
|
} else {
|
||||||
// Attempts reverse DNS loopup on the device IP address
|
// Attempts reverse DNS loopup on the device IP address
|
||||||
require('dns').reverse(socket.remoteAddr, function (err, hostnames) {
|
require('dns').reverse(socket.remoteAddr, function (err, hostnames) {
|
||||||
@ -741,7 +741,7 @@ module.exports.CreateMpsServer = function (parent, db, args, certificates) {
|
|||||||
// New CIRA connection for unknown node, disconnect.
|
// New CIRA connection for unknown node, disconnect.
|
||||||
unknownNodeCount++;
|
unknownNodeCount++;
|
||||||
console.log('CIRA connection for unknown node. groupid: ' + initialMesh._id + ', uuid: ' + socket.tag.SystemId);
|
console.log('CIRA connection for unknown node. groupid: ' + initialMesh._id + ', uuid: ' + socket.tag.SystemId);
|
||||||
socket.end();
|
obj.close(socket);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -758,7 +758,7 @@ module.exports.CreateMpsServer = function (parent, db, args, certificates) {
|
|||||||
// New CIRA connection for unknown node, disconnect.
|
// New CIRA connection for unknown node, disconnect.
|
||||||
unknownNodeCount++;
|
unknownNodeCount++;
|
||||||
console.log('CIRA connection for unknown node. candidate(s): ' + nodes.length + ', groupid: ' + initialMesh._id + ', uuid: ' + socket.tag.SystemId);
|
console.log('CIRA connection for unknown node. candidate(s): ' + nodes.length + ', groupid: ' + initialMesh._id + ', uuid: ' + socket.tag.SystemId);
|
||||||
socket.end();
|
obj.close(socket);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -776,7 +776,7 @@ module.exports.CreateMpsServer = function (parent, db, args, certificates) {
|
|||||||
// New CIRA connection for unknown node, disconnect.
|
// New CIRA connection for unknown node, disconnect.
|
||||||
unknownMeshIdCount++;
|
unknownMeshIdCount++;
|
||||||
console.log('CIRA connection to a unknown group type. groupid: ' + socket.tag.meshid);
|
console.log('CIRA connection to a unknown group type. groupid: ' + socket.tag.meshid);
|
||||||
socket.end();
|
obj.close(socket);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
return 18 + usernameLen + serviceNameLen + methodNameLen + passwordLen;
|
return 18 + usernameLen + serviceNameLen + methodNameLen + passwordLen;
|
||||||
@ -1047,7 +1047,7 @@ module.exports.CreateMpsServer = function (parent, db, args, certificates) {
|
|||||||
|
|
||||||
// Disconnect CIRA tunnel
|
// Disconnect CIRA tunnel
|
||||||
obj.close = function (socket) {
|
obj.close = function (socket) {
|
||||||
try { socket.end(); } catch (e) { }
|
try { socket.end(); } catch (e) { try { socket.close(); } catch (e) { } }
|
||||||
removeCiraConnection(socket);
|
removeCiraConnection(socket);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user