Windows hashing fix for MeshAssistant.
Ylian Saint-Hilaire committed
May 18, 2021 at 15:44 UTC
db03a0959e9fa427a1863452dd9db6bea867f108
2 files changed
+42
-24
agents/MeshCentralAssistant.exe
Binary files a/agents/MeshCentralAssistant.exe and b/agents/MeshCentralAssistant.exe differ
meshcentral.js
+42
-24
@@ -2401,40 +2401,58 @@ function CreateMeshCentralServer(config, args) {
2401
// List of possible mesh agent install scripts
2402
var meshToolsList = {
2403
'MeshCentralRouter': { localname: 'MeshCentralRouter.exe', dlname: 'winrouter' },
2404
- 'MeshCentralAssistant': { localname: 'MeshCentralAssistant.exe', dlname: 'winassistant' }
2404
+ 'MeshCentralAssistant': { localname: 'MeshCentralAssistant.exe', dlname: 'winassistant', winhash: true }
2405
//'MeshCentralRouterMacOS': { localname: 'MeshCentralRouter.dmg', dlname: 'MeshCentralRouter.dmg' }
2406
};
2407
2408
// Update the list of available mesh agents
2409
obj.updateMeshTools = function () {
2410
for (var toolname in meshToolsList) {
2411
- var toolpath = obj.path.join(__dirname, 'agents', meshToolsList[toolname].localname);
2412
- var stream = null;
2413
- try {
2414
- stream = obj.fs.createReadStream(toolpath);
2415
- stream.on('data', function (data) { this.hash.update(data, 'binary'); this.hashx += data.length; });
2416
- stream.on('error', function (data) {
2417
- // If there is an error reading this file, make sure this agent is not in the agent table
2418
- if (obj.meshToolsBinaries[this.toolname] != null) { delete obj.meshToolsBinaries[this.toolname]; }
2419
- });
2420
- stream.on('end', function () {
2421
- // Add the agent to the agent table with all information and the hash
2422
- obj.meshToolsBinaries[this.toolname] = {};
2423
- obj.meshToolsBinaries[this.toolname].hash = this.hash.digest('hex');
2424
- obj.meshToolsBinaries[this.toolname].hashx = this.hashx;
2425
- obj.meshToolsBinaries[this.toolname].path = this.agentpath;
2426
- obj.meshToolsBinaries[this.toolname].dlname = this.dlname;
2411
+ if (meshToolsList[toolname].winhash === true) {
2412
+ var toolpath = obj.path.join(__dirname, 'agents', meshToolsList[toolname].localname);
2413
+ var hashStream = obj.crypto.createHash('sha384');
2414
+ hashStream.toolname = toolname;
2415
+ hashStream.toolpath = toolpath;
2416
+ hashStream.dlname = meshToolsList[toolname].dlname;
2417
+ hashStream.hashx = 0;
2418
+ hashStream.on('data', function (data) {
2419
+ obj.meshToolsBinaries[this.toolname] = { hash: data.toString('hex'), hashx: this.hashx, path: this.toolpath, dlname: this.dlname, url: this.url };
2420
obj.meshToolsBinaries[this.toolname].url = 'https://' + obj.certificates.CommonName + ':' + ((typeof obj.args.aliasport == 'number') ? obj.args.aliasport : obj.args.port) + '/meshagents?meshaction=' + this.dlname;
2421
var stats = null;
2429
- try { stats = obj.fs.statSync(this.agentpath); } catch (e) { }
2422
+ try { stats = obj.fs.statSync(this.toolpath); } catch (e) { }
2423
if (stats != null) { obj.meshToolsBinaries[this.toolname].size = stats.size; }
2424
});
2432
- stream.toolname = toolname;
2433
- stream.agentpath = toolpath;
2434
- stream.dlname = meshToolsList[toolname].dlname;
2435
- stream.hash = obj.crypto.createHash('sha384', stream);
2436
- stream.hashx = 0;
2437
- } catch (e) { }
2425
+ var options = { sourcePath: toolpath, targetStream: hashStream };
2426
+ obj.exeHandler.hashExecutableFile(options);
2427
+ } else {
2428
+ var toolpath = obj.path.join(__dirname, 'agents', meshToolsList[toolname].localname);
2429
+ var stream = null;
2430
+ try {
2431
+ stream = obj.fs.createReadStream(toolpath);
2432
+ stream.on('data', function (data) { this.hash.update(data, 'binary'); this.hashx += data.length; });
2433
+ stream.on('error', function (data) {
2434
+ // If there is an error reading this file, make sure this agent is not in the agent table
2435
+ if (obj.meshToolsBinaries[this.toolname] != null) { delete obj.meshToolsBinaries[this.toolname]; }
2436
+ });
2437
+ stream.on('end', function () {
2438
+ // Add the agent to the agent table with all information and the hash
2439
+ obj.meshToolsBinaries[this.toolname] = {};
2440
+ obj.meshToolsBinaries[this.toolname].hash = this.hash.digest('hex');
2441
+ obj.meshToolsBinaries[this.toolname].hashx = this.hashx;
2442
+ obj.meshToolsBinaries[this.toolname].path = this.agentpath;
2443
+ obj.meshToolsBinaries[this.toolname].dlname = this.dlname;
2444
+ obj.meshToolsBinaries[this.toolname].url = 'https://' + obj.certificates.CommonName + ':' + ((typeof obj.args.aliasport == 'number') ? obj.args.aliasport : obj.args.port) + '/meshagents?meshaction=' + this.dlname;
2445
+ var stats = null;
2446
+ try { stats = obj.fs.statSync(this.agentpath); } catch (e) { }
2447
+ if (stats != null) { obj.meshToolsBinaries[this.toolname].size = stats.size; }
2448
+ });
2449
+ stream.toolname = toolname;
2450
+ stream.agentpath = toolpath;
2451
+ stream.dlname = meshToolsList[toolname].dlname;
2452
+ stream.hash = obj.crypto.createHash('sha384', stream);
2453
+ stream.hashx = 0;
2454
+ } catch (e) { }
2455
+ }
2456
}
2457
};
2458