More work on ACM activation, MiniRouter self-signed.
This commit is contained in:
parent
ae83965976
commit
a4a3a5a5cd
|
@ -63,7 +63,6 @@
|
||||||
<Compile Include="agents\modules_meshcore\monitor-border.js" />
|
<Compile Include="agents\modules_meshcore\monitor-border.js" />
|
||||||
<Compile Include="agents\modules_meshcore\power-monitor.js" />
|
<Compile Include="agents\modules_meshcore\power-monitor.js" />
|
||||||
<Compile Include="agents\modules_meshcore\smbios.js" />
|
<Compile Include="agents\modules_meshcore\smbios.js" />
|
||||||
<Compile Include="agents\modules_meshcore\toaster.js" />
|
|
||||||
<Compile Include="agents\modules_meshcore\wifi-scanner-windows.js" />
|
<Compile Include="agents\modules_meshcore\wifi-scanner-windows.js" />
|
||||||
<Compile Include="agents\modules_meshcore\wifi-scanner.js" />
|
<Compile Include="agents\modules_meshcore\wifi-scanner.js" />
|
||||||
<Compile Include="agents\modules_meshcore\win-console.js" />
|
<Compile Include="agents\modules_meshcore\win-console.js" />
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -710,6 +710,10 @@ function createMeshCore(agent)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case 'acmactivate': {
|
||||||
|
if (amt != null) { amt.setAcmResponse(data); }
|
||||||
|
break;
|
||||||
|
}
|
||||||
case 'wakeonlan': {
|
case 'wakeonlan': {
|
||||||
// Send wake-on-lan on all interfaces for all MAC addresses in data.macs array. The array is a list of HEX MAC addresses.
|
// Send wake-on-lan on all interfaces for all MAC addresses in data.macs array. The array is a list of HEX MAC addresses.
|
||||||
sendConsoleText('Server requesting wake-on-lan for: ' + data.macs.join(', '));
|
sendConsoleText('Server requesting wake-on-lan for: ' + data.macs.join(', '));
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -169,20 +169,23 @@ function lme_heci(options) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (this[name][port] == null)
|
if (this[name][port] == null)
|
||||||
{ // Bind a new server socket if not already present
|
{
|
||||||
this[name][port] = require('net').createServer();
|
try {
|
||||||
this[name][port].HECI = this;
|
// Bind a new server socket if not already present
|
||||||
if (lme_port_offset == 0) {
|
this[name][port] = require('net').createServer();
|
||||||
this[name][port].listen({ port: port, host: '127.0.0.1' }); // Normal mode
|
this[name][port].HECI = this;
|
||||||
} else {
|
if (lme_port_offset == 0) {
|
||||||
this[name][port].listen({ port: (port + lme_port_offset) }); // Debug mode
|
this[name][port].listen({ port: port, host: '127.0.0.1' }); // Normal mode
|
||||||
}
|
} else {
|
||||||
this[name][port].on('connection', function (socket) {
|
this[name][port].listen({ port: (port + lme_port_offset) }); // Debug mode
|
||||||
//console.log('New [' + socket.remoteFamily + '] TCP Connection on: ' + socket.remoteAddress + ' :' + socket.localPort);
|
}
|
||||||
this.HECI.LMS.bindDuplexStream(socket, socket.remoteFamily, socket.localPort - lme_port_offset);
|
this[name][port].on('connection', function (socket) {
|
||||||
});
|
//console.log('New [' + socket.remoteFamily + '] TCP Connection on: ' + socket.remoteAddress + ' :' + socket.localPort);
|
||||||
this._binded[port] = true;
|
this.HECI.LMS.bindDuplexStream(socket, socket.remoteFamily, socket.localPort - lme_port_offset);
|
||||||
this.LMS.emit('bind', this._binded);
|
});
|
||||||
|
this._binded[port] = true;
|
||||||
|
this.LMS.emit('bind', this._binded);
|
||||||
|
} catch (ex) { console.log(ex, 'Port ' + port); }
|
||||||
}
|
}
|
||||||
var outBuffer = Buffer.alloc(5);
|
var outBuffer = Buffer.alloc(5);
|
||||||
outBuffer.writeUInt8(81, 0);
|
outBuffer.writeUInt8(81, 0);
|
||||||
|
|
|
@ -20,6 +20,7 @@ function amt_heci() {
|
||||||
emitterUtils.createEvent('error');
|
emitterUtils.createEvent('error');
|
||||||
|
|
||||||
var heci = require('heci');
|
var heci = require('heci');
|
||||||
|
var sendConsole = function (msg) { try { require('MeshAgent').SendCommand({ "action": "msg", "type": "console", "value": msg }); } catch (ex) { } }
|
||||||
|
|
||||||
this._ObjectID = "pthi";
|
this._ObjectID = "pthi";
|
||||||
this._rq = new Q();
|
this._rq = new Q();
|
||||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -1 +0,0 @@
|
||||||
function AMTScanner(){var a=require("events").inherits(this);a.createEvent("found");this.dgram=require("dgram");this.buildRmcpPing=function(c){var b=Buffer.from("06000006000011BE80000000","hex");b[9]=c;return b};this.parseRmcpPacket=function(h,b,g,d){if(b==null||b.length<20){return}var f={};if(((b[12]==0)||(b[13]!=0)||(b[14]!=1)||(b[15]!=87))&&(b[21]&32)){f.servertag=b[9];f.minorVersion=b[18]&15;f.majorVersion=(b[18]>>4)&15;f.provisioningState=b[19]&3;var e=(b[16]*256)+b[17];var c=((b[19]&4)!=0)?true:false;f.openPorts=[e];f.address=g.address;if(c==true){f.openPorts=[16992,16993]}if(d!==undefined){d(h,f)}}};this.parseIPv4Range=function(f){if(f==undefined||f==null){return null}var g=f.split("-");if(g.length==2){return{min:this.parseIpv4Addr(g[0]),max:this.parseIpv4Addr(g[1])}}g=f.split("/");if(g.length==2){var c=this.parseIpv4Addr(g[0]),e=parseInt(g[1]),d=0;if(e<=16||e>32){return null}e=32-e;for(var b=0;b<e;b++){d=(d<<1);d++}return{min:c&(4294967295-d),max:(c&(4294967295-d))+d}}g=this.parseIpv4Addr(f);if(g==null){return null}return{min:g,max:g}};this.parseIpv4Addr=function(b){var c=b.split(".");if(c.length==4){return(parseInt(c[0])<<24)+(parseInt(c[1])<<16)+(parseInt(c[2])<<8)+(parseInt(c[3])<<0)}return null};this.IPv4NumToStr=function(b){return((b>>24)&255)+"."+((b>>16)&255)+"."+((b>>8)&255)+"."+(b&255)};this.scan=function(d,g){var c=this.parseIPv4Range(d);var e=this.buildRmcpPing(0);var f=this.dgram.createSocket({type:"udp4"});f.parent=this;f.scanResults=[];f.on("error",function(i){console.log("Error:"+i)});f.on("message",function(i,j){if(j.size>4){this.parent.parseRmcpPacket(this,i,j,function(l,k){l.scanResults.push(k)})}});f.on("listening",function(){for(var j=c.min;j<=c.max;j++){f.send(e,623,f.parent.IPv4NumToStr(j))}});f.bind({address:"0.0.0.0",port:0,exclusive:true});var h=setTimeout(function b(){f.close();f.parent.emit("found",f.scanResults);delete f},g)}}module.exports=AMTScanner;
|
|
File diff suppressed because one or more lines are too long
|
@ -1 +0,0 @@
|
||||||
function CreateWsmanComm(){var a={};a.PendingAjax=[];a.ActiveAjaxCount=0;a.MaxActiveAjaxCount=1;a.FailAllError=0;a.digest=null;a.RequestCount=0;if(arguments.length==1&&typeof(arguments[0]=="object")){a.host=arguments[0].host;a.port=arguments[0].port;a.authToken=arguments[0].authToken;a.tls=arguments[0].tls}else{a.host=arguments[0];a.port=arguments[1];a.user=arguments[2];a.pass=arguments[3];a.tls=arguments[4]}a.PerformAjax=function(d,c,f,e,g,b){if((a.ActiveAjaxCount==0||((a.ActiveAjaxCount<a.MaxActiveAjaxCount)&&(a.challengeParams!=null)))&&a.PendingAjax.length==0){a.PerformAjaxEx(d,c,f,g,b)}else{if(e==1){a.PendingAjax.unshift([d,c,f,g,b])}else{a.PendingAjax.push([d,c,f,g,b])}}};a.PerformNextAjax=function(){if(a.ActiveAjaxCount>=a.MaxActiveAjaxCount||a.PendingAjax.length==0){return}var b=a.PendingAjax.shift();a.PerformAjaxEx(b[0],b[1],b[2],b[3],b[4]);a.PerformNextAjax()};a.PerformAjaxEx=function(d,c,g,h,b){if(a.FailAllError!=0){if(a.FailAllError!=999){a.gotNextMessagesError({status:a.FailAllError},"error",null,[d,c,g])}return}if(!d){d=""}if(globalDebugFlags&1){console.log("SEND: "+d+"\r\n\r\n")}if(a.digest==null){if(a.authToken){a.digest=require("http-digest").create({authToken:a.authToken})}else{a.digest=require("http-digest").create(a.user,a.pass)}a.digest.http=require("http")}var f={protocol:(a.tls==1?"https:":"http:"),method:"POST",host:a.host,path:"/wsman",port:a.port,rejectUnauthorized:false,checkServerIdentity:function(i){console.log("checkServerIdentity",JSON.stringify(i))}};var e=a.digest.request(f);e.on("error",function(i){a.gotNextMessagesError({status:600},"error",null,[d,c,g])});e.on("response",function(i){if(globalDebugFlags&1){console.log("Response: "+i.statusCode)}if(i.statusCode!=200){if(globalDebugFlags&1){console.log("ERR:"+JSON.stringify(i))}a.gotNextMessagesError({status:i.statusCode},"error",null,[d,c,g])}else{i.acc="";i.on("data",function(j){this.acc+=j});i.on("end",function(){a.gotNextMessages(i.acc,"success",{status:i.statusCode},[d,c,g])})}});e.end(d);a.ActiveAjaxCount++;return e};a.pendingAjaxCall=[];a.gotNextMessages=function(c,e,d,b){a.ActiveAjaxCount--;if(a.FailAllError==999){return}if(globalDebugFlags&1){console.log("RECV: "+c+"\r\n\r\n")}if(a.FailAllError!=0){b[1](null,a.FailAllError,b[2]);return}if(d.status!=200){b[1](null,d.status,b[2]);return}b[1](c,200,b[2]);a.PerformNextAjax()};a.gotNextMessagesError=function(d,e,c,b){a.ActiveAjaxCount--;if(a.FailAllError==999){return}if(a.FailAllError!=0){b[1](null,a.FailAllError,b[2]);return}if(a.FailAllError!=999){b[1]({Header:{HttpError:d.status}},d.status,b[2])}a.PerformNextAjax()};a.CancelAllQueries=function(b){while(a.PendingAjax.length>0){var c=a.PendingAjax.shift();c[1](null,b,c[2])}};return a}module.exports=CreateWsmanComm;
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -169,23 +169,23 @@ function lme_heci(options) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (this[name][port] == null)
|
if (this[name][port] == null)
|
||||||
{ // Bind a new server socket if not already present
|
{
|
||||||
this[name][port] = require('net').createServer();
|
|
||||||
this[name][port].HECI = this;
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
// Bind a new server socket if not already present
|
||||||
|
this[name][port] = require('net').createServer();
|
||||||
|
this[name][port].HECI = this;
|
||||||
if (lme_port_offset == 0) {
|
if (lme_port_offset == 0) {
|
||||||
this[name][port].listen({ port: port, host: '127.0.0.1' }); // Normal mode
|
this[name][port].listen({ port: port, host: '127.0.0.1' }); // Normal mode
|
||||||
} else {
|
} else {
|
||||||
this[name][port].listen({ port: (port + lme_port_offset) }); // Debug mode
|
this[name][port].listen({ port: (port + lme_port_offset) }); // Debug mode
|
||||||
}
|
}
|
||||||
} catch (ex) { console.log('Binding error, LMS port ' + (port + lme_port_offset) + ': ' + ex) } // TODO: We can't bind
|
this[name][port].on('connection', function (socket) {
|
||||||
this[name][port].on('connection', function (socket) {
|
//console.log('New [' + socket.remoteFamily + '] TCP Connection on: ' + socket.remoteAddress + ' :' + socket.localPort);
|
||||||
//console.log('New [' + socket.remoteFamily + '] TCP Connection on: ' + socket.remoteAddress + ' :' + socket.localPort);
|
this.HECI.LMS.bindDuplexStream(socket, socket.remoteFamily, socket.localPort - lme_port_offset);
|
||||||
this.HECI.LMS.bindDuplexStream(socket, socket.remoteFamily, socket.localPort - lme_port_offset);
|
});
|
||||||
});
|
this._binded[port] = true;
|
||||||
this._binded[port] = true;
|
this.LMS.emit('bind', this._binded);
|
||||||
this.LMS.emit('bind', this._binded);
|
} catch (ex) { console.log(ex, 'Port ' + port); }
|
||||||
}
|
}
|
||||||
var outBuffer = Buffer.alloc(5);
|
var outBuffer = Buffer.alloc(5);
|
||||||
outBuffer.writeUInt8(81, 0);
|
outBuffer.writeUInt8(81, 0);
|
||||||
|
|
|
@ -35,6 +35,7 @@ function AmtManager(agent, db, isdebug) {
|
||||||
var amtpolicy = null;
|
var amtpolicy = null;
|
||||||
var obj = this;
|
var obj = this;
|
||||||
var mestate;
|
var mestate;
|
||||||
|
var trustedHashes = null;;
|
||||||
obj.state = 0;
|
obj.state = 0;
|
||||||
obj.lmsstate = 0;
|
obj.lmsstate = 0;
|
||||||
obj.onStateChange = null;
|
obj.onStateChange = null;
|
||||||
|
@ -432,13 +433,31 @@ function AmtManager(agent, db, isdebug) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Get Intel AMT activation hashes
|
||||||
|
//
|
||||||
|
obj.getTrustedHashes = function (func, tag) {
|
||||||
|
if (trustedHashes != null) { func(tag); }
|
||||||
|
trustedHashes = [];
|
||||||
|
amtMei.getHashHandles(function (handles) {
|
||||||
|
var exitOnCount = handles.length;
|
||||||
|
for (var i = 0; i < handles.length; ++i) {
|
||||||
|
this.getCertHashEntry(handles[i], function (result) {
|
||||||
|
if (result.isActive == 1) { trustedHashes.push(result.certificateHash.toLowerCase()); }
|
||||||
|
if (--exitOnCount == 0) { func(tag); }
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Activate Intel AMT to ACM
|
// Activate Intel AMT to ACM
|
||||||
//
|
//
|
||||||
|
|
||||||
obj.activeToACM = function (mestate) {
|
obj.activeToACM = function (mestate) {
|
||||||
|
//debug('TrustedHashes: ' + JSON.stringify(trustedHashes));
|
||||||
//debug('ProvisioningState: ' + JSON.stringify(mestate.ProvisioningState));
|
//debug('ProvisioningState: ' + JSON.stringify(mestate.ProvisioningState));
|
||||||
if (mestate.ProvisioningState != 0) return; // Can't activate unless in "PRE" activation mode.
|
if ((mestate.ProvisioningState != 0) || (amtpolicy == null) || (amtpolicy.match == null)) return; // Can't activate unless in "PRE" activation mode & policy is present.
|
||||||
var trustedFqdn = null;
|
var trustedFqdn = null;
|
||||||
//debug('Wired Interface: ' + JSON.stringify(mestate.net0));
|
//debug('Wired Interface: ' + JSON.stringify(mestate.net0));
|
||||||
if ((mestate.net0 == null) && (mestate.net0.enabled != 0)) return; // Can't activate unless wired interface is active
|
if ((mestate.net0 == null) && (mestate.net0.enabled != 0)) return; // Can't activate unless wired interface is active
|
||||||
|
@ -448,19 +467,26 @@ function AmtManager(agent, db, isdebug) {
|
||||||
var interfaces = require('os').networkInterfaces();
|
var interfaces = require('os').networkInterfaces();
|
||||||
for (var i in interfaces) {
|
for (var i in interfaces) {
|
||||||
for (var j in interfaces[i]) {
|
for (var j in interfaces[i]) {
|
||||||
if ((interfaces[i][j].mac == mestate.net0.mac) && (interfaces[i][j].fqdn != null) && (interfaces[i][j].fqdn != '')) { trustedFqdn = interfaces[i][j].fqdn; }
|
if ((interfaces[i][j].mac == mestate.net0.mac) && (interfaces[i][j].fqdn != null) && (interfaces[i][j].fqdn != '')) { trustedFqdn = interfaces[i][j].fqdn.toLowerCase(); }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (trustedFqdn == null) return; // No trusted DNS suffix.
|
if (trustedFqdn == null) return; // No trusted DNS suffix.
|
||||||
//debug('TrustedFqdn: ' + trustedFqdn);
|
//debug('TrustedFqdn: ' + trustedFqdn);
|
||||||
|
|
||||||
|
// Check if we have a ACM policy match
|
||||||
|
var hashMatch = false;
|
||||||
|
for (var i in amtpolicy.match) { var m = amtpolicy.match[i]; if (m.cn == trustedFqdn) { for (var j in trustedHashes) { if ((trustedHashes[j] == m.sha256) || (trustedHashes[j] == m.sha1)) { hashMatch = trustedHashes[j]; } } } }
|
||||||
|
if (hashMatch == null) return; // No certificate / FQDN match
|
||||||
|
debug('Policy: ' + JSON.stringify(amtpolicy));
|
||||||
|
debug('HashMatch: ' + hashMatch);
|
||||||
|
|
||||||
// Fetch Intel AMT realm and activation nonce and get ready to ACM activation...
|
// Fetch Intel AMT realm and activation nonce and get ready to ACM activation...
|
||||||
if (osamtstack != null) {
|
if (osamtstack != null) {
|
||||||
//debug('Trying to get Intel AMT activation information...');
|
debug('Trying to get Intel AMT activation information (1)...');
|
||||||
osamtstack.BatchEnum(null, ['*AMT_GeneralSettings', '*IPS_HostBasedSetupService'], activeToACM2, trustedFqdn);
|
osamtstack.BatchEnum(null, ['*AMT_GeneralSettings', '*IPS_HostBasedSetupService'], activeToACM2, { fqdn: trustedFqdn, hash: hashMatch });
|
||||||
} else {
|
} else {
|
||||||
//debug('ACM Activation: Trying to get local account info...');
|
debug('ACM Activation: Trying to get local account info...');
|
||||||
amtMei.getLocalSystemAccount(function (x) {
|
amtMei.getLocalSystemAccount(function (x) {
|
||||||
if ((x != null) && x.user && x.pass) {
|
if ((x != null) && x.user && x.pass) {
|
||||||
//debug('Intel AMT local account info: User=' + x.user + ', Pass=' + x.pass + '.');
|
//debug('Intel AMT local account info: User=' + x.user + ', Pass=' + x.pass + '.');
|
||||||
|
@ -469,21 +495,48 @@ function AmtManager(agent, db, isdebug) {
|
||||||
var amt = require('amt');
|
var amt = require('amt');
|
||||||
oswsstack = new wsman(transport, '127.0.0.1', 16992, x.user, x.pass, false);
|
oswsstack = new wsman(transport, '127.0.0.1', 16992, x.user, x.pass, false);
|
||||||
osamtstack = new amt(oswsstack);
|
osamtstack = new amt(oswsstack);
|
||||||
//debug('Trying to get Intel AMT activation information...');
|
debug('Trying to get Intel AMT activation information (2)...');
|
||||||
osamtstack.BatchEnum(null, ['*AMT_GeneralSettings', '*IPS_HostBasedSetupService'], activeToACM2, trustedFqdn);
|
osamtstack.BatchEnum(null, ['*AMT_GeneralSettings', '*IPS_HostBasedSetupService'], activeToACM2, { fqdn: trustedFqdn, hash: hashMatch });
|
||||||
} else {
|
} else {
|
||||||
//debug('Unable to get $$OsAdmin password.');
|
debug('Unable to get $$OsAdmin password.');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function activeToACM2(stack, name, responses, status, trustedFqdn) {
|
function activeToACM2(stack, name, responses, status, tag) {
|
||||||
debug('activeToACM2: ' + trustedFqdn);
|
debug('activeToACM2 status=' + status);
|
||||||
if (status != 200) return;
|
if (status != 200) return;
|
||||||
var fwNonce = responses['IPS_HostBasedSetupService'].response['ConfigurationNonce'];
|
var fwNonce = responses['IPS_HostBasedSetupService'].response['ConfigurationNonce'];
|
||||||
var digestRealm = responses['AMT_GeneralSettings'].response['DigestRealm'];
|
var digestRealm = responses['AMT_GeneralSettings'].response['DigestRealm'];
|
||||||
agent.SendCommand({ "action": "acmactivate", "nonce": fwNonce, "realm": digestRealm, "fqdn": trustedFqdn });
|
agent.SendCommand({ "action": "acmactivate", "nonce": fwNonce, "realm": digestRealm, "fqdn": tag.fqdn, "hash": tag.hash });
|
||||||
|
}
|
||||||
|
|
||||||
|
// Called when the server responds with a ACM activation signature.
|
||||||
|
obj.setAcmResponse = function (acmdata) {
|
||||||
|
debug('setAcmResponse=' + JSON.stringify(acmdata));
|
||||||
|
acmdata.index = 0;
|
||||||
|
//performAcmActivation(acmdata);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Recursive function to inject the provisioning certificates into AMT in the proper order and completes ACM activation
|
||||||
|
function performAcmActivation(acmdata) {
|
||||||
|
var leaf = (acmdata.index == 0), root = (acmdata.index == (acmdata.certChain.length - 1));
|
||||||
|
if (acmdata.index < acmdata.certChain.length) {
|
||||||
|
if (acmdata.certChain[acmdata.index] != null) {
|
||||||
|
debug('Calling AddNextCertInChain(' + acmdata.index + ')');
|
||||||
|
osamtstack.IPS_HostBasedSetupService_AddNextCertInChain(acmdata.certChain[acmdata.index], leaf, root, function (stack, name, responses, status) {
|
||||||
|
if (status !== 200) { debug('AddNextCertInChain status=' + status); return; }
|
||||||
|
else if (responses['Body']['ReturnValue'] !== 0) { debug('AddNextCertInChain error=' + responses['Body']['ReturnValue']); return; }
|
||||||
|
else { acmdata.index++; performAcmActivation(acmdata); }
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
debug('Calling AdminSetup()');
|
||||||
|
osamtstack.IPS_HostBasedSetupService_AdminSetup(2, acmdata.password, acmdata.nonce, 2, acmdata.signature,
|
||||||
|
function (stack, name, responses, status) { debug('DONE: ' + status); }
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -556,13 +609,11 @@ function AmtManager(agent, db, isdebug) {
|
||||||
obj.getAmtInfo(function (meinfo) {
|
obj.getAmtInfo(function (meinfo) {
|
||||||
if ((amtpolicy.type == 1) && (meinfo.ProvisioningState == 2) && ((meinfo.Flags & 2) != 0)) {
|
if ((amtpolicy.type == 1) && (meinfo.ProvisioningState == 2) && ((meinfo.Flags & 2) != 0)) {
|
||||||
// CCM Deactivation Policy.
|
// CCM Deactivation Policy.
|
||||||
wsstack = null;
|
wsstack = amtstack = null;
|
||||||
amtstack = null;
|
|
||||||
obj.deactivateCCM();
|
obj.deactivateCCM();
|
||||||
} else if ((amtpolicy.type == 2) && (meinfo.ProvisioningState == 0)) {
|
} else if ((amtpolicy.type == 2) && (meinfo.ProvisioningState == 0)) {
|
||||||
// CCM Activation Policy
|
// CCM Activation Policy
|
||||||
wsstack = null;
|
wsstack = amtstack = null;
|
||||||
amtstack = null;
|
|
||||||
if ((amtpolicy.password == null) || (amtpolicy.password == '')) { intelAmtAdminPass = null; }
|
if ((amtpolicy.password == null) || (amtpolicy.password == '')) { intelAmtAdminPass = null; }
|
||||||
obj.activeToCCM(intelAmtAdminPass);
|
obj.activeToCCM(intelAmtAdminPass);
|
||||||
} else if ((amtpolicy.type == 2) && (meinfo.ProvisioningState == 2) && (intelAmtAdminPass != null) && ((meinfo.Flags & 2) != 0)) {
|
} else if ((amtpolicy.type == 2) && (meinfo.ProvisioningState == 2) && (intelAmtAdminPass != null) && ((meinfo.Flags & 2) != 0)) {
|
||||||
|
@ -577,7 +628,7 @@ function AmtManager(agent, db, isdebug) {
|
||||||
try { amtstack.BatchEnum(null, wsmanQuery, wsmanPassTestResponse); } catch (ex) { debug(ex); }
|
try { amtstack.BatchEnum(null, wsmanQuery, wsmanPassTestResponse); } catch (ex) { debug(ex); }
|
||||||
} else if ((amtpolicy.type == 3) && (meinfo.ProvisioningState == 0)) {
|
} else if ((amtpolicy.type == 3) && (meinfo.ProvisioningState == 0)) {
|
||||||
// ACM Activation Policy
|
// ACM Activation Policy
|
||||||
obj.activeToACM(meinfo);
|
obj.getTrustedHashes(obj.activeToACM, meinfo);
|
||||||
} else {
|
} else {
|
||||||
// Other possible cases...
|
// Other possible cases...
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,7 +20,7 @@ function amt_heci() {
|
||||||
emitterUtils.createEvent('error');
|
emitterUtils.createEvent('error');
|
||||||
|
|
||||||
var heci = require('heci');
|
var heci = require('heci');
|
||||||
var sendConsole = function (msg) { require('MeshAgent').SendCommand({ "action": "msg", "type": "console", "value": msg }); }
|
var sendConsole = function (msg) { try { require('MeshAgent').SendCommand({ "action": "msg", "type": "console", "value": msg }); } catch (ex) { } }
|
||||||
|
|
||||||
this._ObjectID = "pthi";
|
this._ObjectID = "pthi";
|
||||||
this._rq = new Q();
|
this._rq = new Q();
|
||||||
|
|
|
@ -121,66 +121,68 @@ function _getChildElementsByTagName(name) { var ret = []; if (this.childNodes !=
|
||||||
function _getChildElementsByTagNameNS(ns, name) { var ret = []; if (this.childNodes != null) { for (var node in this.childNodes) { if (this.childNodes[node].localName == name && (ns == '*' || this.childNodes[node].namespace == ns)) { ret.push(this.childNodes[node]); } } } return (ret); }
|
function _getChildElementsByTagNameNS(ns, name) { var ret = []; if (this.childNodes != null) { for (var node in this.childNodes) { if (this.childNodes[node].localName == name && (ns == '*' || this.childNodes[node].namespace == ns)) { ret.push(this.childNodes[node]); } } } return (ret); }
|
||||||
function _xmlTraverseAllRec(nodes, func) { for (var i in nodes) { func(nodes[i]); if (nodes[i].childNodes) { _xmlTraverseAllRec(nodes[i].childNodes, func); } } }
|
function _xmlTraverseAllRec(nodes, func) { for (var i in nodes) { func(nodes[i]); if (nodes[i].childNodes) { _xmlTraverseAllRec(nodes[i].childNodes, func); } } }
|
||||||
function _turnToXmlRec(text) {
|
function _turnToXmlRec(text) {
|
||||||
if (text == null) return null;
|
try {
|
||||||
var elementStack = new _treeBuilder(), lastElement = null, x1 = text.split('<'), ret = [], element = null, currentElementName = null;
|
if (text == null) return null;
|
||||||
for (var i in x1) {
|
var elementStack = new _treeBuilder(), lastElement = null, x1 = text.split('<'), ret = [], element = null, currentElementName = null;
|
||||||
var x2 = x1[i].split('>'), x3 = x2[0].split(' '), elementName = x3[0];
|
for (var i in x1) {
|
||||||
if ((elementName.length > 0) && (elementName[0] != '?')) {
|
var x2 = x1[i].split('>'), x3 = x2[0].split(' '), elementName = x3[0];
|
||||||
if (elementName[0] != '/') {
|
if ((elementName.length > 0) && (elementName[0] != '?')) {
|
||||||
var attributes = [], localName, localname2 = elementName.split(' ')[0].split(':'), localName = (localname2.length > 1) ? localname2[1] : localname2[0];
|
if (elementName[0] != '/') {
|
||||||
Object.defineProperty(attributes, "get",
|
var attributes = [], localName, localname2 = elementName.split(' ')[0].split(':'), localName = (localname2.length > 1) ? localname2[1] : localname2[0];
|
||||||
{
|
Object.defineProperty(attributes, "get",
|
||||||
value: function () {
|
{
|
||||||
if (arguments.length == 1) {
|
value: function () {
|
||||||
for (var a in this) { if (this[a].name == arguments[0]) { return (this[a]); } }
|
if (arguments.length == 1) {
|
||||||
}
|
for (var a in this) { if (this[a].name == arguments[0]) { return (this[a]); } }
|
||||||
else if (arguments.length == 2) {
|
}
|
||||||
for (var a in this) { if (this[a].name == arguments[1] && (arguments[0] == '*' || this[a].namespace == arguments[0])) { return (this[a]); } }
|
else if (arguments.length == 2) {
|
||||||
}
|
for (var a in this) { if (this[a].name == arguments[1] && (arguments[0] == '*' || this[a].namespace == arguments[0])) { return (this[a]); } }
|
||||||
else {
|
}
|
||||||
throw ('attributes.get(): Invalid number of parameters');
|
else {
|
||||||
}
|
throw ('attributes.get(): Invalid number of parameters');
|
||||||
}
|
|
||||||
});
|
|
||||||
elementStack.push({ name: elementName, localName: localName, getChildElementsByTagName: _getChildElementsByTagName, getElementsByTagNameNS: _getElementsByTagNameNS, getChildElementsByTagNameNS: _getChildElementsByTagNameNS, attributes: attributes, childNodes: [], nsTable: {} });
|
|
||||||
// Parse Attributes
|
|
||||||
if (x3.length > 0) {
|
|
||||||
var skip = false;
|
|
||||||
for (var j in x3) {
|
|
||||||
if (x3[j] == '/') {
|
|
||||||
// This is an empty Element
|
|
||||||
elementStack.peek().namespace = elementStack.peek().name == elementStack.peek().localName ? elementStack.getNamespace('*') : elementStack.getNamespace(elementStack.peek().name.substring(0, elementStack.peek().name.indexOf(':')));
|
|
||||||
elementStack.peek().textContent = '';
|
|
||||||
lastElement = elementStack.pop();
|
|
||||||
skip = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
var k = x3[j].indexOf('=');
|
|
||||||
if (k > 0) {
|
|
||||||
var attrName = x3[j].substring(0, k);
|
|
||||||
var attrValue = x3[j].substring(k + 2, x3[j].length - 1);
|
|
||||||
var attrNS = elementStack.getNamespace('*');
|
|
||||||
|
|
||||||
if (attrName == 'xmlns') {
|
|
||||||
elementStack.addNamespace('*', attrValue);
|
|
||||||
attrNS = attrValue;
|
|
||||||
} else if (attrName.startsWith('xmlns:')) {
|
|
||||||
elementStack.addNamespace(attrName.substring(6), attrValue);
|
|
||||||
} else {
|
|
||||||
var ax = attrName.split(':');
|
|
||||||
if (ax.length == 2) { attrName = ax[1]; attrNS = elementStack.getNamespace(ax[0]); }
|
|
||||||
}
|
}
|
||||||
var x = { name: attrName, value: attrValue }
|
|
||||||
if (attrNS != null) x.namespace = attrNS;
|
|
||||||
elementStack.peek().attributes.push(x);
|
|
||||||
}
|
}
|
||||||
|
});
|
||||||
|
elementStack.push({ name: elementName, localName: localName, getChildElementsByTagName: _getChildElementsByTagName, getElementsByTagNameNS: _getElementsByTagNameNS, getChildElementsByTagNameNS: _getChildElementsByTagNameNS, attributes: attributes, childNodes: [], nsTable: {} });
|
||||||
|
// Parse Attributes
|
||||||
|
if (x3.length > 0) {
|
||||||
|
var skip = false;
|
||||||
|
for (var j in x3) {
|
||||||
|
if (x3[j] == '/') {
|
||||||
|
// This is an empty Element
|
||||||
|
elementStack.peek().namespace = elementStack.peek().name == elementStack.peek().localName ? elementStack.getNamespace('*') : elementStack.getNamespace(elementStack.peek().name.substring(0, elementStack.peek().name.indexOf(':')));
|
||||||
|
elementStack.peek().textContent = '';
|
||||||
|
lastElement = elementStack.pop();
|
||||||
|
skip = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
var k = x3[j].indexOf('=');
|
||||||
|
if (k > 0) {
|
||||||
|
var attrName = x3[j].substring(0, k);
|
||||||
|
var attrValue = x3[j].substring(k + 2, x3[j].length - 1);
|
||||||
|
var attrNS = elementStack.getNamespace('*');
|
||||||
|
|
||||||
|
if (attrName == 'xmlns') {
|
||||||
|
elementStack.addNamespace('*', attrValue);
|
||||||
|
attrNS = attrValue;
|
||||||
|
} else if (attrName.startsWith('xmlns:')) {
|
||||||
|
elementStack.addNamespace(attrName.substring(6), attrValue);
|
||||||
|
} else {
|
||||||
|
var ax = attrName.split(':');
|
||||||
|
if (ax.length == 2) { attrName = ax[1]; attrNS = elementStack.getNamespace(ax[0]); }
|
||||||
|
}
|
||||||
|
var x = { name: attrName, value: attrValue }
|
||||||
|
if (attrNS != null) x.namespace = attrNS;
|
||||||
|
elementStack.peek().attributes.push(x);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (skip) { continue; }
|
||||||
}
|
}
|
||||||
if (skip) { continue; }
|
elementStack.peek().namespace = elementStack.peek().name == elementStack.peek().localName ? elementStack.getNamespace('*') : elementStack.getNamespace(elementStack.peek().name.substring(0, elementStack.peek().name.indexOf(':')));
|
||||||
}
|
if (x2[1]) { elementStack.peek().textContent = x2[1]; }
|
||||||
elementStack.peek().namespace = elementStack.peek().name == elementStack.peek().localName ? elementStack.getNamespace('*') : elementStack.getNamespace(elementStack.peek().name.substring(0, elementStack.peek().name.indexOf(':')));
|
} else { lastElement = elementStack.pop(); }
|
||||||
if (x2[1]) { elementStack.peek().textContent = x2[1]; }
|
}
|
||||||
} else { lastElement = elementStack.pop(); }
|
|
||||||
}
|
}
|
||||||
}
|
} catch (ex) { return null; }
|
||||||
return lastElement;
|
return lastElement;
|
||||||
}
|
}
|
||||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -1 +0,0 @@
|
||||||
function AMTScanner(){var a=require("events").inherits(this);a.createEvent("found");this.dgram=require("dgram");this.buildRmcpPing=function(c){var b=Buffer.from("06000006000011BE80000000","hex");b[9]=c;return b};this.parseRmcpPacket=function(h,b,g,d){if(b==null||b.length<20){return}var f={};if(((b[12]==0)||(b[13]!=0)||(b[14]!=1)||(b[15]!=87))&&(b[21]&32)){f.servertag=b[9];f.minorVersion=b[18]&15;f.majorVersion=(b[18]>>4)&15;f.provisioningState=b[19]&3;var e=(b[16]*256)+b[17];var c=((b[19]&4)!=0)?true:false;f.openPorts=[e];f.address=g.address;if(c==true){f.openPorts=[16992,16993]}if(d!==undefined){d(h,f)}}};this.parseIPv4Range=function(f){if(f==undefined||f==null){return null}var g=f.split("-");if(g.length==2){return{min:this.parseIpv4Addr(g[0]),max:this.parseIpv4Addr(g[1])}}g=f.split("/");if(g.length==2){var c=this.parseIpv4Addr(g[0]),e=parseInt(g[1]),d=0;if(e<=16||e>32){return null}e=32-e;for(var b=0;b<e;b++){d=(d<<1);d++}return{min:c&(4294967295-d),max:(c&(4294967295-d))+d}}g=this.parseIpv4Addr(f);if(g==null){return null}return{min:g,max:g}};this.parseIpv4Addr=function(b){var c=b.split(".");if(c.length==4){return(parseInt(c[0])<<24)+(parseInt(c[1])<<16)+(parseInt(c[2])<<8)+(parseInt(c[3])<<0)}return null};this.IPv4NumToStr=function(b){return((b>>24)&255)+"."+((b>>16)&255)+"."+((b>>8)&255)+"."+(b&255)};this.scan=function(d,g){var c=this.parseIPv4Range(d);var e=this.buildRmcpPing(0);var f=this.dgram.createSocket({type:"udp4"});f.parent=this;f.scanResults=[];f.on("error",function(i){console.log("Error:"+i)});f.on("message",function(i,j){if(j.size>4){this.parent.parseRmcpPacket(this,i,j,function(l,k){l.scanResults.push(k)})}});f.on("listening",function(){for(var j=c.min;j<=c.max;j++){f.send(e,623,f.parent.IPv4NumToStr(j))}});f.bind({address:"0.0.0.0",port:0,exclusive:true});var h=setTimeout(function b(){f.close();f.parent.emit("found",f.scanResults);delete f},g)}}module.exports=AMTScanner;
|
|
|
@ -1 +0,0 @@
|
||||||
function CreateWsmanComm(){var a={};a.PendingAjax=[];a.ActiveAjaxCount=0;a.MaxActiveAjaxCount=1;a.FailAllError=0;a.digest=null;a.RequestCount=0;if(arguments.length==1&&typeof(arguments[0]=="object")){a.host=arguments[0].host;a.port=arguments[0].port;a.authToken=arguments[0].authToken;a.tls=arguments[0].tls}else{a.host=arguments[0];a.port=arguments[1];a.user=arguments[2];a.pass=arguments[3];a.tls=arguments[4]}a.PerformAjax=function(d,c,f,e,g,b){if((a.ActiveAjaxCount==0||((a.ActiveAjaxCount<a.MaxActiveAjaxCount)&&(a.challengeParams!=null)))&&a.PendingAjax.length==0){a.PerformAjaxEx(d,c,f,g,b)}else{if(e==1){a.PendingAjax.unshift([d,c,f,g,b])}else{a.PendingAjax.push([d,c,f,g,b])}}};a.PerformNextAjax=function(){if(a.ActiveAjaxCount>=a.MaxActiveAjaxCount||a.PendingAjax.length==0){return}var b=a.PendingAjax.shift();a.PerformAjaxEx(b[0],b[1],b[2],b[3],b[4]);a.PerformNextAjax()};a.PerformAjaxEx=function(d,c,g,h,b){if(a.FailAllError!=0){if(a.FailAllError!=999){a.gotNextMessagesError({status:a.FailAllError},"error",null,[d,c,g])}return}if(!d){d=""}if(a.digest==null){if(a.authToken){a.digest=require("http-digest").create({authToken:a.authToken})}else{a.digest=require("http-digest").create(a.user,a.pass)}a.digest.http=require("http")}var f={protocol:(a.tls==1?"https:":"http:"),method:"POST",host:a.host,path:"/wsman",port:a.port,rejectUnauthorized:false,checkServerIdentity:function(i){console.log("checkServerIdentity",JSON.stringify(i))}};var e=a.digest.request(f);e.on("error",function(i){a.gotNextMessagesError({status:600},"error",null,[d,c,g])});e.on("response",function(i){if(i.statusCode!=200){a.gotNextMessagesError({status:i.statusCode},"error",null,[d,c,g])}else{i.acc="";i.on("data",function(j){this.acc+=j});i.on("end",function(){a.gotNextMessages(i.acc,"success",{status:i.statusCode},[d,c,g])})}});e.end(d);a.ActiveAjaxCount++;return e};a.pendingAjaxCall=[];a.gotNextMessages=function(c,e,d,b){a.ActiveAjaxCount--;if(a.FailAllError==999){return}if(a.FailAllError!=0){b[1](null,a.FailAllError,b[2]);return}if(d.status!=200){b[1](null,d.status,b[2]);return}b[1](c,200,b[2]);a.PerformNextAjax()};a.gotNextMessagesError=function(d,e,c,b){a.ActiveAjaxCount--;if(a.FailAllError==999){return}if(a.FailAllError!=0){b[1](null,a.FailAllError,b[2]);return}if(a.FailAllError!=999){b[1]({Header:{HttpError:d.status}},d.status,b[2])}a.PerformNextAjax()};a.CancelAllQueries=function(b){while(a.PendingAjax.length>0){var c=a.PendingAjax.shift();c[1](null,b,c[2])}};return a}module.exports=CreateWsmanComm;
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -1 +0,0 @@
|
||||||
try{Object.defineProperty(Array.prototype,"peek",{value:function(){return(this.length>0?this[this.length-1]:undefined)}})}catch(e){}function dbus(a,b){this._ObjectID="linux-dbus";require("events").EventEmitter.call(this,true).createEvent("signal");Object.defineProperty(this,"uid",{value:b});this._child=require("child_process").execFile("/bin/sh",["sh"],{type:require("child_process").SpawnTypes.TERM,uid:b==null?-1:b});this._child.stdin.write("dbus-monitor --session \"type='signal', interface='"+a+'\'" | ( while read X; do echo "$X"; done )\n');this._child.stdout.dbus=this;this._child.stdout.on("data",function(c){if(!this.ready){this.ready=true;return}var f=[];var g=c.toString().split("\r\n");for(var d in g){if(g[d]==""){this.dbus.preParseRecords(f);f=[]}else{f.push(g[d])}}});this.preParseRecords=function(d){var f=[];for(var c in d){if(d[c].startsWith("signal ")){if(f.length>0){this.parseRecords(f)}f=[]}f.push(d[c])}if(f.length>0){this.parseRecords(f)}};this.parseRecords=function(d){if(d[0].startsWith("signal ")){var g={};var h=d[0].split(" ");h.shift();for(var c in h){var f=h[c].split("=");if(f.length==2){g[f[0]]=f[1]}}d.shift();g.data=d;this.parseSignal(g)}};this.parseSignal=function(f){var c=f.data;f.data=[];for(var d=0;d<c.length;++d){if(c[d].startsWith("array ")){f.data.push([]);for(d=d+1;d<c.length;++d){this.parseSignal2(c[d],f.data.peek())}}else{this.parseSignal2(c[d],f.data)}}this.emit("signal",f)};this.parseSignal2=function(c,d){if(c.startsWith("string ")){d.push(JSON.parse(c.slice(7)))}else{if(c.startsWith("boolean ")){d.push(JSON.parse(c.slice(8)))}}}}module.exports=dbus;
|
|
File diff suppressed because one or more lines are too long
|
@ -1 +0,0 @@
|
||||||
function powerMonitor(){this._ObjectID="power-monitor";require("events").EventEmitter.call(this,true).createEvent("changed").createEvent("sx").createEvent("batteryLevel").createEvent("acdc").createEvent("display");this._i=setImmediate(function(a){require("user-sessions");delete a._i},this)}module.exports=new powerMonitor();
|
|
File diff suppressed because one or more lines are too long
|
@ -1 +0,0 @@
|
||||||
function _Scan(){var f=this.Marshal.CreatePointer();this.Native.WlanEnumInterfaces(this.Handle,0,f);var a=f.Deref().Deref(0,4).toBuffer().readUInt32LE(0);var d=f.Deref().Deref(8,532);var c=d.Deref(16,512).AnsiString;var e;switch(d.Deref(528,4).toBuffer().readUInt32LE(0)){case 0:e="NOT READY";break;case 1:e="CONNECTED";break;case 2:e="AD-HOC";break;case 3:e="DISCONNECTING";break;case 4:e="DISCONNECTED";break;case 5:e="ASSOCIATING";break;case 6:e="DISCOVERING";break;case 7:e="AUTHENTICATING";break;default:e="UNKNOWN";break}var b=d.Deref(0,16);if(this.Native.WlanScan(this.Handle,b,0,0,0).Val==0){return(true)}else{return(false)}}function AccessPoint(d,a,c,b){this.ssid=d;this.bssid=a;this.rssi=c;this.lq=b}AccessPoint.prototype.toString=function(){return(this.ssid+" ["+this.bssid+"]: "+this.lq)};function OnNotify(g){var h=g.Deref(0,4).toBuffer().readUInt32LE(0);var f=g.Deref(4,4).toBuffer().readUInt32LE(0);var c=g.Deref(8,16);if((h&8)&&(f==7)){var a=this.Parent.Marshal.CreatePointer();var k=this.Parent.Native.GetBSSList(this.Parent.Handle,c,0,3,0,0,a).Val;if(k==0){var n=a.Deref().Deref(0,4).toBuffer().readUInt32LE(0);var j=a.Deref().Deref(4,4).toBuffer().readUInt32LE(0);for(i=0;i<j;++i){var d=a.Deref().Deref(8+(360*i),360);var m=d.Deref(4,32).String.trim();var b=d.Deref(40,6).HexString2;var l=d.Deref(56,4).toBuffer().readUInt32LE(0);var e=d.Deref(60,4).toBuffer().readUInt32LE(0);this.Parent.emit("Scan",new AccessPoint(m,b,l,e))}}}}function Wireless(){var a=require("events").inherits(this);this.Marshal=require("_GenericMarshal");this.Native=this.Marshal.CreateNativeProxy("wlanapi.dll");this.Native.CreateMethod("WlanOpenHandle");this.Native.CreateMethod("WlanGetNetworkBssList","GetBSSList");this.Native.CreateMethod("WlanRegisterNotification");this.Native.CreateMethod("WlanEnumInterfaces");this.Native.CreateMethod("WlanScan");this.Native.CreateMethod("WlanQueryInterface");var c=this.Marshal.CreatePointer();var b=this.Marshal.CreatePointer();this.Native.WlanOpenHandle(2,0,c,b);this.Handle=b.Deref();this._NOTIFY_PROXY_OBJECT=this.Marshal.CreateCallbackProxy(OnNotify,2);this._NOTIFY_PROXY_OBJECT.Parent=this;var d=this.Marshal.CreatePointer();var e=this.Native.WlanRegisterNotification(this.Handle,65535,0,this._NOTIFY_PROXY_OBJECT.Callback,this._NOTIFY_PROXY_OBJECT.State,0,d);a.createEvent("Scan");a.addMethod("Scan",_Scan);this.GetConnectedNetwork=function(){var n=this.Marshal.CreatePointer();console.log("Success = "+this.Native.WlanEnumInterfaces(this.Handle,0,n).Val);var h=n.Deref().Deref(0,4).toBuffer().readUInt32LE(0);var m=n.Deref().Deref(8,532);var l=m.Deref(16,512).AnsiString;var o=m.Deref(528,4).toBuffer().readUInt32LE(0);if(m.Deref(528,4).toBuffer().readUInt32LE(0)==1){var j=this.Marshal.CreatePointer();var q=this.Marshal.CreatePointer();var s=this.Marshal.CreatePointer();var k=m.Deref(0,16);var r=this.Native.WlanQueryInterface(this.Handle,k,7,0,j,q,s).Val;if(r==0){var f=q.Deref().Deref(524,32).String;var g=q.Deref().Deref(560,6).HexString;var p=q.Deref().Deref(576,4).toBuffer().readUInt32LE(0);return(new AccessPoint(f,g,0,p))}}throw ("GetConnectedNetworks: FAILED (not associated to a network)")};return(this)}module.exports=new Wireless();
|
|
|
@ -1 +0,0 @@
|
||||||
var MemoryStream=require("MemoryStream");var WindowsChildScript='var parent = require("ScriptContainer");var Wireless = require("wifi-scanner-windows");Wireless.on("Scan", function (ap) { parent.send(ap); });Wireless.Scan();';function AccessPoint(c,a,b){this.ssid=c;this.bssid=a;this.lq=b}AccessPoint.prototype.toString=function(){return("["+this.bssid+"]: "+this.ssid+" ("+this.lq+")")};function WiFiScanner(){var a=require("events").inherits(this);a.createEvent("accessPoint");this.hasWireless=function(){var d=false;var b=require("os").networkInterfaces();for(var c in b){if(b[c][0].type=="wireless"){d=true;break}}return(d)};this.Scan=function(){if(process.platform=="win32"){this.master=require("ScriptContainer").Create(15,ContainerPermissions.DEFAULT);this.master.parent=this;this.master.on("data",function(e){this.parent.emit("accessPoint",new AccessPoint(e.ssid,e.bssid,e.lq))});this.master.addModule("wifi-scanner-windows",getJSModule("wifi-scanner-windows"));this.master.ExecuteString(WindowsChildScript)}else{if(process.platform=="linux"){var c=require("os").networkInterfaces();var d=null;for(var b in c){if(c[b][0].type=="wireless"){d=b;break}}if(d!=null){this.child=require("child_process").execFile("/sbin/iwlist",["iwlist",d,"scan"]);this.child.parent=this;this.child.ms=new MemoryStream();this.child.ms.parent=this.child;this.child.stdout.on("data",function(e){this.parent.ms.write(e)});this.child.on("exit",function(){this.ms.end()});this.child.ms.on("end",function(){var l=this.buffer.toString();tokens=l.split(" - Address: ");for(var h in tokens){if(h==0){continue}var i=tokens[h].split("\n");var e=i[0];var f;var g;for(var j in i){j=i[j].trim();j=j.trim();if(j.startsWith("ESSID:")){g=j.slice(7,j.length-1);if(g=="<hidden>"){g=""}}if(j.startsWith("Signal level=")){f=j.slice(13,j.length-4)}else{if(j.startsWith("Quality=")){f=j.slice(8,10);var k=j.slice(11,13)}}}this.parent.parent.emit("accessPoint",new AccessPoint(g,e,f))}})}}}}}module.exports=WiFiScanner;
|
|
|
@ -1 +0,0 @@
|
||||||
var TrayIconFlags={NIF_MESSAGE:1,NIF_ICON:2,NIF_TIP:4,NIF_STATE:8,NIF_INFO:16,NIF_GUID:32,NIF_REALTIME:64,NIF_SHOWTIP:128,NIM_ADD:0,NIM_MODIFY:1,NIM_DELETE:2,NIM_SETFOCUS:3,NIM_SETVERSION:4};var NOTIFYICON_VERSION_4=4;var MessageTypes={WM_APP:32768,WM_USER:1024};function WindowsConsole(){if(process.platform=="win32"){this._ObjectID="win-console";this._Marshal=require("_GenericMarshal");this._kernel32=this._Marshal.CreateNativeProxy("kernel32.dll");this._user32=this._Marshal.CreateNativeProxy("user32.dll");this._kernel32.CreateMethod("GetConsoleWindow");this._kernel32.CreateMethod("GetCurrentThread");this._user32.CreateMethod("ShowWindow");this._user32.CreateMethod("LoadImageA");this._user32.CreateMethod({method:"GetMessageA",threadDispatch:1});this._shell32=this._Marshal.CreateNativeProxy("Shell32.dll");this._shell32.CreateMethod("Shell_NotifyIconA");this._handle=this._kernel32.GetConsoleWindow();this.minimize=function(){this._user32.ShowWindow(this._handle,6)};this.restore=function(){this._user32.ShowWindow(this._handle,9)};this.hide=function(){this._user32.ShowWindow(this._handle,0)};this.show=function(){this._user32.ShowWindow(this._handle,5)};this._loadicon=function(c){var b=this._user32.LoadImageA(0,this._Marshal.CreateVariable(c),1,0,0,16|32768|64);return(b)};this.SetTrayIcon=function a(h){var b=this._Marshal.CreateVariable(this._Marshal.PointerSize==4?508:528);b.toBuffer().writeUInt32LE(b._size,0);var n=TrayIconFlags.NIF_TIP|TrayIconFlags.NIF_MESSAGE;h.filter=MessageTypes.WM_APP+1;b.Deref(this._Marshal.PointerSize==4?16:24,4).toBuffer().writeUInt32LE(h.filter);if(!h.noBalloon){n|=TrayIconFlags.NIF_INFO}if(h.icon){n|=TrayIconFlags.NIF_ICON;var c=b.Deref(this._Marshal.PointerSize==4?20:32,this._Marshal.PointerSize);h.icon.pointerBuffer().copy(c.toBuffer())}b.Deref(this._Marshal.PointerSize*2,4).toBuffer().writeUInt32LE(1);b.Deref(this._Marshal.PointerSize==4?12:20,4).toBuffer().writeUInt32LE(n);b.Deref(this._Marshal.PointerSize==4?416:432,4).toBuffer().writeUInt32LE(NOTIFYICON_VERSION_4);var m=b.Deref(this._Marshal.PointerSize==4?24:40,128);var k=b.Deref(this._Marshal.PointerSize==4?160:176,256);var l=b.Deref(this._Marshal.PointerSize==4?420:436,64);if(h.szTip){Buffer.from(h.szTip).copy(m.toBuffer())}if(h.szInfo){Buffer.from(h.szInfo).copy(k.toBuffer())}if(h.szInfoTitle){Buffer.from(h.szInfoTitle).copy(l.toBuffer())}var d=require("win-message-pump");retVal={_ObjectID:"WindowsConsole.TrayIcon",MessagePump:new d(h)};var j=require("events").inherits(retVal);j.createEvent("ToastClicked");j.createEvent("IconHover");j.createEvent("ToastDismissed");retVal.Options=h;retVal.MessagePump.TrayIcon=retVal;retVal.MessagePump.NotifyData=b;retVal.MessagePump.WindowsConsole=this;retVal.MessagePump.on("exit",function e(o){console.log("Pump Exited");if(this.TrayIcon){this.TrayIcon.remove()}});retVal.MessagePump.on("hwnd",function f(o){h.hwnd=o;o.pointerBuffer().copy(this.NotifyData.Deref(this.WindowsConsole._Marshal.PointerSize,this.WindowsConsole._Marshal.PointerSize).toBuffer());if(this.WindowsConsole._shell32.Shell_NotifyIconA(TrayIconFlags.NIM_ADD,this.NotifyData).Val==0){}});retVal.MessagePump.on("message",function g(p){if(p.message==this.TrayIcon.Options.filter){var o=false;if(p.wparam==1&&p.lparam==1029){this.TrayIcon.emit("ToastClicked");o=true}if(p.wparam==1&&p.lparam==512){this.TrayIcon.emit("IconHover");o=true}if(this.TrayIcon.Options.balloonOnly&&p.wparam==1&&(p.lparam==1028||p.lparam==1029)){this.TrayIcon.emit("ToastDismissed");this.TrayIcon.remove();o=true}}});retVal.remove=function i(){this.MessagePump.WindowsConsole._shell32.Shell_NotifyIconA(TrayIconFlags.NIM_DELETE,this.MessagePump.NotifyData);this.MessagePump.stop();delete this.MessagePump.TrayIcon;delete this.MessagePump};return(retVal)}}}module.exports=new WindowsConsole();
|
|
File diff suppressed because one or more lines are too long
|
@ -26,6 +26,124 @@ module.exports.CertificateOperations = function (parent) {
|
||||||
obj.dirExists = function (filePath) { try { return obj.fs.statSync(filePath).isDirectory(); } catch (err) { return false; } };
|
obj.dirExists = function (filePath) { try { return obj.fs.statSync(filePath).isDirectory(); } catch (err) { return false; } };
|
||||||
obj.getFilesizeInBytes = function (filename) { try { return obj.fs.statSync(filename).size; } catch (err) { return -1; } };
|
obj.getFilesizeInBytes = function (filename) { try { return obj.fs.statSync(filename).size; } catch (err) { return -1; } };
|
||||||
|
|
||||||
|
const TopLevelDomainExtendedSupport = { 'net': 2, 'com': 2, 'arpa': 3, 'org': 2, 'gov': 2, 'edu': 2, 'de': 2, 'fr': 3, 'cn': 3, 'nl': 3, 'br': 3, 'mx': 3, 'uk': 3, 'pl': 3, 'tw': 3, 'ca': 3, 'fi': 3, 'be': 3, 'ru': 3, 'se': 3, 'ch': 2, 'dk': 2, 'ar': 3, 'es': 3, 'no': 3, 'at': 3, 'in': 3, 'tr': 3, 'cz': 2, 'ro': 3, 'hu': 3, 'nz': 3, 'pt': 3, 'il': 3, 'gr': 3, 'co': 3, 'ie': 3, 'za': 3, 'th': 3, 'sg': 3, 'hk': 3, 'cl': 2, 'lt': 3, 'id': 3, 'hr': 3, 'ee': 3, 'bg': 3, 'ua': 2 };
|
||||||
|
|
||||||
|
// Sign a Intel AMT ACM activation request
|
||||||
|
obj.signAcmRequest = function (domain, request, user, pass) {
|
||||||
|
if ((domain == null) || (domain.amtacmactivation == null) || (domain.amtacmactivation.certs == null) || (request == null) || (request.nonce == null) || (request.realm == null) || (request.fqdn == null) || (request.hash == null)) return null;
|
||||||
|
if (parent.common.validateString(request.nonce, 16, 256) == false) return null;
|
||||||
|
if (parent.common.validateString(request.realm, 16, 256) == false) return null;
|
||||||
|
if (parent.common.validateString(request.fqdn, 4, 256) == false) return null;
|
||||||
|
if (parent.common.validateString(request.hash, 16, 256) == false) return null;
|
||||||
|
|
||||||
|
// Look for the signing certificate
|
||||||
|
var signkey = null, certChain = null, hashAlgo = null;
|
||||||
|
for (var i in domain.amtacmactivation.certs) {
|
||||||
|
const certEntry = domain.amtacmactivation.certs[i];
|
||||||
|
if ((certEntry.sha256 == request.hash) && ((certEntry.cn == '*') || (certEntry.cn == request.fqdn))) { hashAlgo = 'sha256'; signkey = certEntry.key; certChain = certEntry.certs; break; }
|
||||||
|
if ((certEntry.sha1 == request.hash) && ((certEntry.cn == '*') || (certEntry.cn == request.fqdn))) { hashAlgo = 'sha1'; signkey = certEntry.key; certChain = certEntry.certs; break; }
|
||||||
|
}
|
||||||
|
if (signkey == null) return null; // Did not find a match.
|
||||||
|
|
||||||
|
// Create the signature message
|
||||||
|
var mcNonce = Buffer.from(obj.crypto.randomBytes(20), 0, 20).toString('base64');
|
||||||
|
|
||||||
|
// Sign the request
|
||||||
|
var signature = null;
|
||||||
|
try {
|
||||||
|
var signer = obj.crypto.createSign(hashAlgo);
|
||||||
|
signer.update(request.nonce + mcNonce);
|
||||||
|
signature = signer.sign(signkey, 'base64');
|
||||||
|
} catch (ex) { return null; }
|
||||||
|
|
||||||
|
// Return the signature with the computed account password hash
|
||||||
|
return { 'action': 'acmactivate', 'signature': signature, 'password': obj.crypto.createHash('md5').update(user + ':' + request.realm + ':' + pass).digest('hex'), 'nonce': mcNonce, 'certs': certChain };
|
||||||
|
}
|
||||||
|
|
||||||
|
// Load Intel AMT ACM activation certificates
|
||||||
|
obj.loadIntelAmtAcmCerts = function (amtacmactivation) {
|
||||||
|
if (amtacmactivation == null) return;
|
||||||
|
var acmCerts = [], acmmatch = [];
|
||||||
|
if (amtacmactivation.certs != null) {
|
||||||
|
for (var j in amtacmactivation.certs) {
|
||||||
|
var acmconfig = amtacmactivation.certs[j];
|
||||||
|
if (typeof acmconfig.cert != 'string') continue;
|
||||||
|
var r = null;
|
||||||
|
try { r = obj.loadPfxCertificate(obj.parent.path.join(obj.parent.datapath, acmconfig.cert), acmconfig.certpass); } catch (ex) { console.log(ex); }
|
||||||
|
if ((r == null) || (r.certs == null) || (r.keys == null) || (r.certs.length < 2) || (r.keys.length != 1)) continue;
|
||||||
|
|
||||||
|
// Check if the right OU or OID is present for Intel AMT activation
|
||||||
|
var validActivationCert = false;
|
||||||
|
for (var k in r.certs[0].extensions) { if (r.certs[0].extensions[k]['2.16.840.1.113741.1.2.3'] == true) { validActivationCert = true; } }
|
||||||
|
var orgName = r.certs[0].subject.getField('OU');
|
||||||
|
if ((orgName != null) && (orgName.value == 'Intel(R) Client Setup Certificate')) { validActivationCert = true; }
|
||||||
|
if (validActivationCert == false) continue;
|
||||||
|
|
||||||
|
// Compute the SHA256 and SHA1 hashes of the root certificate
|
||||||
|
for (var k in r.certs) {
|
||||||
|
if (r.certs[k].subject.hash != r.certs[k].issuer.hash) continue;
|
||||||
|
const certdata = obj.forge.asn1.toDer(obj.pki.certificateToAsn1(r.certs[k])).data;
|
||||||
|
var md = obj.forge.md.sha256.create();
|
||||||
|
md.update(certdata);
|
||||||
|
acmconfig.sha256 = Buffer.from(md.digest().getBytes(), 'binary').toString('hex');
|
||||||
|
md = obj.forge.md.sha1.create();
|
||||||
|
md.update(certdata);
|
||||||
|
acmconfig.sha1 = Buffer.from(md.digest().getBytes(), 'binary').toString('hex');
|
||||||
|
}
|
||||||
|
if ((acmconfig.sha1 == null) || (acmconfig.sha256 == null)) continue;
|
||||||
|
|
||||||
|
// Get the certificate common name
|
||||||
|
var certCommonName = r.certs[0].subject.getField('CN');
|
||||||
|
if (certCommonName == null) continue;
|
||||||
|
var certCommonNameSplit = certCommonName.value.split('.');
|
||||||
|
var topLevel = certCommonNameSplit[certCommonNameSplit.length - 1].toLowerCase();
|
||||||
|
var topLevelNum = TopLevelDomainExtendedSupport[topLevel];
|
||||||
|
if (topLevelNum != null) {
|
||||||
|
while (certCommonNameSplit.length > topLevelNum) { certCommonNameSplit.shift(); }
|
||||||
|
acmconfig.cn = certCommonNameSplit.join('.');
|
||||||
|
} else {
|
||||||
|
acmconfig.cn = certCommonName.value;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Reorder the certificates from leaf to root.
|
||||||
|
var orderedCerts = [], currenthash = null, orderingError = false;;
|
||||||
|
while ((orderingError == false) && (orderedCerts.length < r.certs.length)) {
|
||||||
|
orderingError = true;
|
||||||
|
for (var k in r.certs) {
|
||||||
|
if (((currenthash == null) && (r.certs[k].subject.hash == r.certs[k].issuer.hash)) || ((r.certs[k].issuer.hash == currenthash) && (r.certs[k].subject.hash != r.certs[k].issuer.hash))) {
|
||||||
|
currenthash = r.certs[k].subject.hash;
|
||||||
|
orderedCerts.push(Buffer.from(obj.forge.asn1.toDer(obj.pki.certificateToAsn1(r.certs[k])).data, 'binary').toString('base64'));
|
||||||
|
orderingError = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (orderingError == true) continue;
|
||||||
|
|
||||||
|
delete acmconfig.cert;
|
||||||
|
delete acmconfig.certpass;
|
||||||
|
acmconfig.certs = orderedCerts;
|
||||||
|
acmconfig.key = obj.pki.privateKeyToPem(r.keys[0]);
|
||||||
|
acmCerts.push(acmconfig);
|
||||||
|
acmmatch.push({ 'sha256': acmconfig.sha256, 'sha1': acmconfig.sha1, 'cn': acmconfig.cn });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
amtacmactivation.acmmatch = acmmatch;
|
||||||
|
amtacmactivation.certs = acmCerts;
|
||||||
|
|
||||||
|
// Add the MeshCentral root cert as a possible activation cert
|
||||||
|
if (obj.parent.certificates.root) {
|
||||||
|
var x1 = obj.parent.certificates.root.cert.indexOf('-----BEGIN CERTIFICATE-----'), x2 = obj.parent.certificates.root.cert.indexOf('-----END CERTIFICATE-----');
|
||||||
|
if ((x1 >= 0) && (x2 > x1)) {
|
||||||
|
var sha256 = obj.crypto.createHash('sha256').update(Buffer.from(obj.parent.certificates.root.cert.substring(x1 + 27, x2), 'base64')).digest('hex');
|
||||||
|
var sha1 = obj.crypto.createHash('sha1').update(Buffer.from(obj.parent.certificates.root.cert.substring(x1 + 27, x2), 'base64')).digest('hex');
|
||||||
|
amtacmactivation.certs.push({ 'sha256': sha256, 'sha1': sha1, 'cn': '*', certs: [obj.pki.certificateFromPem(obj.parent.certificates.root.cert)], key: obj.parent.certificates.root.key });
|
||||||
|
amtacmactivation.acmmatch.push({ 'sha256': sha256, 'sha1': sha1, 'cn': '*' });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//console.log(amtacmactivation);
|
||||||
|
}
|
||||||
|
|
||||||
// Return the certificate of the remote HTTPS server
|
// Return the certificate of the remote HTTPS server
|
||||||
obj.loadPfxCertificate = function (filename, password) {
|
obj.loadPfxCertificate = function (filename, password) {
|
||||||
var r = { certs: [], keys: [] };
|
var r = { certs: [], keys: [] };
|
||||||
|
|
29
meshagent.js
29
meshagent.js
|
@ -827,20 +827,20 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) {
|
||||||
// CCM - Add server root certificate
|
// CCM - Add server root certificate
|
||||||
if (parent.parent.certificates.rootex == null) { parent.parent.certificates.rootex = parent.parent.certificates.root.cert.split('-----BEGIN CERTIFICATE-----').join('').split('-----END CERTIFICATE-----').join('').split('\r').join('').split('\n').join(''); }
|
if (parent.parent.certificates.rootex == null) { parent.parent.certificates.rootex = parent.parent.certificates.root.cert.split('-----BEGIN CERTIFICATE-----').join('').split('-----END CERTIFICATE-----').join('').split('\r').join('').split('\n').join(''); }
|
||||||
r.rootcert = parent.parent.certificates.rootex;
|
r.rootcert = parent.parent.certificates.rootex;
|
||||||
} else if ((amtPolicy.type == 3) && (domain.amtacmactivation.dnsmatch)) {
|
if ((amtPolicy.cirasetup == 2) && (parent.parent.mpsserver != null) && (parent.parent.certificates.AmtMpsName != null) && (args.lanonly != true) && (args.mpsport != 0)) {
|
||||||
|
// Add server CIRA settings
|
||||||
|
r.ciraserver = {
|
||||||
|
name: parent.parent.certificates.AmtMpsName,
|
||||||
|
port: (typeof args.mpsaliasport == 'number' ? args.mpsaliasport : args.mpsport),
|
||||||
|
user: obj.meshid.replace(/\@/g, 'X').replace(/\$/g, 'X').substring(0, 16),
|
||||||
|
pass: args.mpspass ? args.mpspass : 'A@xew9rt', // If the MPS password is not set, just use anything. TODO: Use the password as an agent identifier?
|
||||||
|
home: ['sdlwerulis3wpj95dfj'] // Use a random FQDN to not have any home network.
|
||||||
|
};
|
||||||
|
if (Array.isArray(args.ciralocalfqdn)) { r.ciraserver.home = args.ciralocalfqdn; }
|
||||||
|
}
|
||||||
|
} else if ((amtPolicy.type == 3) && (domain.amtacmactivation.acmmatch)) {
|
||||||
// ACM - In this mode, don't send much to Intel AMT. Just indicate ACM policy and let the agent try activation when possible.
|
// ACM - In this mode, don't send much to Intel AMT. Just indicate ACM policy and let the agent try activation when possible.
|
||||||
r = { type: 3, dnsmatch: domain.amtacmactivation.dnsmatch };
|
r = { type: 3, match: domain.amtacmactivation.acmmatch };
|
||||||
}
|
|
||||||
if (((amtPolicy.cirasetup == 2) || (amtPolicy.cirasetup == 3)) && (parent.parent.mpsserver != null) && (parent.parent.certificates.AmtMpsName != null) && (args.lanonly != true) && (args.mpsport != 0)) {
|
|
||||||
// Add server CIRA settings
|
|
||||||
r.ciraserver = {
|
|
||||||
name: parent.parent.certificates.AmtMpsName,
|
|
||||||
port: (typeof args.mpsaliasport == 'number' ? args.mpsaliasport : args.mpsport),
|
|
||||||
user: obj.meshid.replace(/\@/g, 'X').replace(/\$/g, 'X').substring(0, 16),
|
|
||||||
pass: args.mpspass ? args.mpspass : 'A@xew9rt', // If the MPS password is not set, just use anything. TODO: Use the password as an agent identifier?
|
|
||||||
home: ['sdlwerulis3wpj95dfj'] // Use a random FQDN to not have any home network.
|
|
||||||
};
|
|
||||||
if (Array.isArray(args.ciralocalfqdn)) { r.ciraserver.home = args.ciralocalfqdn; }
|
|
||||||
}
|
}
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
@ -1212,7 +1212,8 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) {
|
||||||
{
|
{
|
||||||
// Agent is asking the server to sign an Intel AMT ACM activation request
|
// Agent is asking the server to sign an Intel AMT ACM activation request
|
||||||
//console.log(command);
|
//console.log(command);
|
||||||
// TODO
|
var signResponse = parent.parent.certificateOperations.signAcmRequest(domain, command, 'admin', 'P@ssw0rd'); // TODO: Place account credentials!!!
|
||||||
|
if (signResponse != null) { obj.send(JSON.stringify(signResponse)); }
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 'diagnostic':
|
case 'diagnostic':
|
||||||
|
|
|
@ -716,56 +716,7 @@ function CreateMeshCentralServer(config, args) {
|
||||||
// Load any domain web certificates
|
// Load any domain web certificates
|
||||||
for (i in obj.config.domains) {
|
for (i in obj.config.domains) {
|
||||||
// Load any Intel AMT ACM activation certificates
|
// Load any Intel AMT ACM activation certificates
|
||||||
if (obj.config.domains[i].amtacmactivation && obj.config.domains[i].amtacmactivation.certs) {
|
obj.certificateOperations.loadIntelAmtAcmCerts(obj.config.domains[i].amtacmactivation);
|
||||||
var badAcmConfigs = [], dnsmatch = [], amtAcmCertCount = 0;
|
|
||||||
for (var j in obj.config.domains[i].amtacmactivation.certs) {
|
|
||||||
var acmconfig = obj.config.domains[i].amtacmactivation.certs[j];
|
|
||||||
if (acmconfig.dnsmatch == null) { acmconfig.dnsmatch = [ j ]; }
|
|
||||||
if (typeof acmconfig.dnsmatch == 'string') { acmconfig.dnsmatch = [ acmconfig.dnsmatch ]; }
|
|
||||||
if (typeof acmconfig.dnsmatch.length == 0) { badAcmConfigs.push(j); continue; }
|
|
||||||
if (typeof acmconfig.cert != 'string') { badAcmConfigs.push(j); continue; }
|
|
||||||
var r = null;
|
|
||||||
try { r = obj.certificateOperations.loadPfxCertificate(obj.path.join(obj.datapath, acmconfig.cert), acmconfig.certpass); } catch (ex) { console.log(ex); }
|
|
||||||
if ((r == null) || (r.certs == null) || (r.keys == null) || (r.certs.length < 2) || (r.keys.length == 0)) { badAcmConfigs.push(j); continue; }
|
|
||||||
|
|
||||||
// Check if the right OU or OID is present for Intel AMT activation
|
|
||||||
var validActivationCert = false;
|
|
||||||
for (var k in r.certs[0].extensions) { if (r.certs[0].extensions[k]['2.16.840.1.113741.1.2.3'] == true) { validActivationCert = true; } }
|
|
||||||
var orgName = r.certs[0].subject.getField('OU');
|
|
||||||
if ((orgName != null) && (orgName.value == 'Intel(R) Client Setup Certificate')) { validActivationCert = true; }
|
|
||||||
if (validActivationCert == false) continue;
|
|
||||||
|
|
||||||
// Compute the SHA256 and SHA1 hashes of the root certificate
|
|
||||||
for (var k in r.certs) {
|
|
||||||
if (r.certs[k].subject.hash != r.certs[k].issuer.hash) continue;
|
|
||||||
const certdata = obj.certificateOperations.forge.asn1.toDer(obj.certificateOperations.pki.certificateToAsn1(r.certs[k])).data;
|
|
||||||
var md = obj.certificateOperations.forge.md.sha256.create();
|
|
||||||
md.update(certdata);
|
|
||||||
acmconfig.sha256 = Buffer.from(md.digest().getBytes(), 'binary').toString('hex');
|
|
||||||
md = obj.certificateOperations.forge.md.sha1.create();
|
|
||||||
md.update(certdata);
|
|
||||||
acmconfig.sha1 = Buffer.from(md.digest().getBytes(), 'binary').toString('hex');
|
|
||||||
}
|
|
||||||
if ((acmconfig.sha1 == null) || (acmconfig.sha256 == null)) continue;
|
|
||||||
|
|
||||||
// Get the certificate common name
|
|
||||||
var certCommonName = r.certs[0].subject.getField('CN');
|
|
||||||
if (certCommonName != null) { acmconfig.cn = certCommonName.value; }
|
|
||||||
|
|
||||||
delete acmconfig.cert;
|
|
||||||
delete acmconfig.certpass;
|
|
||||||
acmconfig.certs = r.certs;
|
|
||||||
acmconfig.keys = r.keys;
|
|
||||||
for (var k in acmconfig.dnsmatch) { if (dnsmatch.indexOf(acmconfig.dnsmatch[k]) == -1) { dnsmatch.push(acmconfig.dnsmatch[k]); } }
|
|
||||||
amtAcmCertCount++;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Remove all bad configurations
|
|
||||||
for (var j in badAcmConfigs) { console.log('WARNING: Incorrect Intel AMT ACM configuration "' + i + (i == '' ? '' : '/') + badAcmConfigs[j] + '".'); delete obj.config.domains[i].amtacmactivationcerts[j]; }
|
|
||||||
if (amtAcmCertCount == 0) { delete obj.config.domains[i].amtacmactivation; } else { obj.config.domains[i].amtacmactivation.dnsmatch = dnsmatch; }
|
|
||||||
|
|
||||||
//console.log(obj.config.domains[''].amtacmactivation);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (obj.config.domains[i].certurl != null) {
|
if (obj.config.domains[i].certurl != null) {
|
||||||
// Fix the URL and add 'https://' if needed
|
// Fix the URL and add 'https://' if needed
|
||||||
|
@ -777,10 +728,7 @@ function CreateMeshCentralServer(config, args) {
|
||||||
if (cert != null) {
|
if (cert != null) {
|
||||||
// Hash the entire cert
|
// Hash the entire cert
|
||||||
var hash = obj.crypto.createHash('sha384').update(Buffer.from(cert, 'binary')).digest('hex');
|
var hash = obj.crypto.createHash('sha384').update(Buffer.from(cert, 'binary')).digest('hex');
|
||||||
if (xdomain.certhash != hash) {
|
if (xdomain.certhash != hash) { xdomain.certkeyhash = hash; xdomain.certhash = hash; }
|
||||||
xdomain.certkeyhash = hash;
|
|
||||||
xdomain.certhash = hash;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// Decode a RSA certificate and hash the public key, if this is not RSA, skip this.
|
// Decode a RSA certificate and hash the public key, if this is not RSA, skip this.
|
||||||
|
|
|
@ -734,6 +734,12 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
|
||||||
r = parent.db.getBackupConfig();
|
r = parent.db.getBackupConfig();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case 'acm': {
|
||||||
|
var acmrequest = { action: 'acmactivate', nonce: 'H9e099o2wIhnRkjd5vXJWBceqIY=', realm: 'Digest:4DCA0000000000000000000000000000', fqdn: 'vprodemo.com', hash: 'c3846bf24b9e93ca64274c0ec67c1ecc5e024ffcacd2d74019350e81fe546ae4' };
|
||||||
|
var response = parent.parent.certificateOperations.signAcmRequest(domain, acmrequest, 'admin', 'P@ssw0rd');
|
||||||
|
r = 'ACM Response: ' + JSON.stringify(response);
|
||||||
|
break;
|
||||||
|
}
|
||||||
default: { // This is an unknown command, return an error message
|
default: { // This is an unknown command, return an error message
|
||||||
r = 'Unknown command \"' + cmd + '\", type \"help\" for list of avaialble commands.';
|
r = 'Unknown command \"' + cmd + '\", type \"help\" for list of avaialble commands.';
|
||||||
break;
|
break;
|
||||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,116 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<asmv1:assembly xsi:schemaLocation="urn:schemas-microsoft-com:asm.v1 assembly.adaptive.xsd" manifestVersion="1.0" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns="urn:schemas-microsoft-com:asm.v2" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xrml="urn:mpeg:mpeg21:2003:01-REL-R-NS" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" xmlns:co.v1="urn:schemas-microsoft-com:clickonce.v1" xmlns:co.v2="urn:schemas-microsoft-com:clickonce.v2">
|
||||||
|
<assemblyIdentity name="MeshMiniRouter.application" version="2.0.0.29" publicKeyToken="2e8c763d6917d840" language="neutral" processorArchitecture="msil" xmlns="urn:schemas-microsoft-com:asm.v1" />
|
||||||
|
<description asmv2:publisher="Meshcentral.com" asmv2:product="MeshCentral Mini-Router" asmv2:supportUrl="https://meshcentral.com/" xmlns="urn:schemas-microsoft-com:asm.v1" />
|
||||||
|
<deployment install="false" mapFileExtensions="true" trustURLParameters="true" />
|
||||||
|
<compatibleFrameworks xmlns="urn:schemas-microsoft-com:clickonce.v2">
|
||||||
|
<framework targetVersion="4.5" profile="Full" supportedRuntime="4.0.30319" />
|
||||||
|
</compatibleFrameworks>
|
||||||
|
<dependency>
|
||||||
|
<dependentAssembly dependencyType="install" codebase="Application Files\MeshMiniRouter_2_0_0_29\MeshMiniRouter.exe.manifest" size="15644">
|
||||||
|
<assemblyIdentity name="MeshMiniRouter.exe" version="2.0.0.29" publicKeyToken="2e8c763d6917d840" language="neutral" processorArchitecture="msil" type="win32" />
|
||||||
|
<hash>
|
||||||
|
<dsig:Transforms>
|
||||||
|
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
|
||||||
|
</dsig:Transforms>
|
||||||
|
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" />
|
||||||
|
<dsig:DigestValue>if9WtevNlSBME9d6o47qi4WyeA2qvfYCadGZE2TrODI=</dsig:DigestValue>
|
||||||
|
</hash>
|
||||||
|
</dependentAssembly>
|
||||||
|
</dependency>
|
||||||
|
<publisherIdentity name="CN=meshcommander.com, O=Open Source, C=US" issuerKeyHash="a5ce27af64fc8ff59400eb5bfb629fbe55a295ec" /><Signature Id="StrongNameSignature" xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /><SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" /><Reference URI=""><Transforms><Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" /><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" /><DigestValue>Gzby5M48N18Q7i/Eg9XYaB/79Hg=</DigestValue></Reference></SignedInfo><SignatureValue>rnoXLX3OtcaDXfOZ02lqFGC8bcU+MK79Hv+Qo2pVDDgs9DuFx+BidU80czJmhBwJc/rASaDMVNLF8HiN5p+4QHpCtXtaeBAW5gvCaUitAsJBmNrG+7jQk4BYRbjJHa+gD+6c1Ya9OKgyKG0KZjvrlT1rg7kdDO0RE8Is0vG85/HG4tLrjCFGgP1acp9qWE+sKvkGBcU2ei8DtsRH6/LQ3HRfDFWpnk47f6Q/rQl2AQYxl6gpZPRbmKkmANvul0X3cLm/XbN1K9DCycHwHe9XBJ8DL1GiNdFfJVBy92gepSezFSu4GXgbPbgEQ5hPxtyRSN8N3EQRTSWAn4Mi01U+Qw==</SignatureValue><KeyInfo Id="StrongNameKeyInfo"><KeyValue><RSAKeyValue><Modulus>wroCIKvsY8JniSorSgYaU48PzB9id1png9IjbcLAPGGNJDT57ML8N8+OGCR/XNZlpFgAduA5SZlgeLuUO3DGk6XdxEEi+7i85YyC9BHlmVNi82GMJKN9hdcNE6nxf0mrXJRpR2X8j11UzD0ckpVbFZPq/3YnYIB7ZAkmDUsUgA/uWuhodrMp3DMePzGGA5Bhv3J/Cxh8N/1eCS9z8Ou8Fo/TWTsnWqhU3oaqJ63UHQ4GFiTY4NnQTp7124PT/MWI+mMxEDczi2cTkGklBwzBmCcu42AOkEY4lfrbILKPX12fnBILNttJQYol+pFiIzTdFa57uXaLTlDZ6m+4SjhT6w==</Modulus><Exponent>AQAB</Exponent></RSAKeyValue></KeyValue><msrel:RelData xmlns:msrel="http://schemas.microsoft.com/windows/rel/2005/reldata"><r:license xmlns:r="urn:mpeg:mpeg21:2003:01-REL-R-NS" xmlns:as="http://schemas.microsoft.com/windows/pki/2005/Authenticode"><r:grant><as:ManifestInformation Hash="78f4fb1f68d8d583c42fee105f373ccee4f2361b" Description="" Url=""><as:assemblyIdentity name="MeshMiniRouter.application" version="2.0.0.29" publicKeyToken="2e8c763d6917d840" language="neutral" processorArchitecture="msil" xmlns="urn:schemas-microsoft-com:asm.v1" /></as:ManifestInformation><as:SignedBy /><as:AuthenticodePublisher><as:X509SubjectName>CN=meshcommander.com, O=Open Source, C=US</as:X509SubjectName></as:AuthenticodePublisher></r:grant><r:issuer><Signature Id="AuthenticodeSignature" xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /><SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" /><Reference URI=""><Transforms><Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" /><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" /><DigestValue>QKqKE5fGTj7jD6B+w9fuZLY4zr4=</DigestValue></Reference></SignedInfo><SignatureValue>ffs9WakqTJ4POL4qvPSQO2PtOGntrIzQp4JiOl6xYW3PJ1cQV+ZryZZQ3fbEh1g0ATSLYu1LkBXO1tAXWA2cdwgTSeJOSEUok8FfNQLa5hBZYbb+PwaDUTqW+TQv5pW3IBIFF+4QKpOJMA2IVE/Cife2YqWohNE3wX2sHBN2aze4DoUU18piF3gf7MBZWq4WqoDdt3hc/YodiFqkNeaWRqJ8xA2Q74tC1SuJZ2TNCQvGCF8odjyCSTkZ0GjwD9s1nnnhM3KUefSDCtL13QPAIaWO+5WrwcojHuOmvgqCkOddPyCWaoyLhdCsuVjr0BH0Fjgljrpg8D36cyHCuVsCTw==</SignatureValue><KeyInfo><KeyValue><RSAKeyValue><Modulus>wroCIKvsY8JniSorSgYaU48PzB9id1png9IjbcLAPGGNJDT57ML8N8+OGCR/XNZlpFgAduA5SZlgeLuUO3DGk6XdxEEi+7i85YyC9BHlmVNi82GMJKN9hdcNE6nxf0mrXJRpR2X8j11UzD0ckpVbFZPq/3YnYIB7ZAkmDUsUgA/uWuhodrMp3DMePzGGA5Bhv3J/Cxh8N/1eCS9z8Ou8Fo/TWTsnWqhU3oaqJ63UHQ4GFiTY4NnQTp7124PT/MWI+mMxEDczi2cTkGklBwzBmCcu42AOkEY4lfrbILKPX12fnBILNttJQYol+pFiIzTdFa57uXaLTlDZ6m+4SjhT6w==</Modulus><Exponent>AQAB</Exponent></RSAKeyValue></KeyValue><X509Data><X509Certificate>MIIC+jCCAeICCQDiTk4zPcm5fTANBgkqhkiG9w0BAQUFADA/MQswCQYDVQQGEwJVUzEUMBIGA1UECgwLT3BlbiBTb3VyY2UxGjAYBgNVBAMMEW1lc2hjb21tYW5kZXIuY29tMB4XDTE5MDUyOTIxNDIwMloXDTM5MDUyNDIxNDIwMlowPzELMAkGA1UEBhMCVVMxFDASBgNVBAoMC09wZW4gU291cmNlMRowGAYDVQQDDBFtZXNoY29tbWFuZGVyLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMK6AiCr7GPCZ4kqK0oGGlOPD8wfYndaZ4PSI23CwDxhjSQ0+ezC/DfPjhgkf1zWZaRYAHbgOUmZYHi7lDtwxpOl3cRBIvu4vOWMgvQR5ZlTYvNhjCSjfYXXDROp8X9Jq1yUaUdl/I9dVMw9HJKVWxWT6v92J2CAe2QJJg1LFIAP7lroaHazKdwzHj8xhgOQYb9yfwsYfDf9Xgkvc/DrvBaP01k7J1qoVN6Gqiet1B0OBhYk2ODZ0E6e9duD0/zFiPpjMRA3M4tnE5BpJQcMwZgnLuNgDpBGOJX62yCyj19dn5wSCzbbSUGKJfqRYiM03RWue7l2i05Q2epvuEo4U+sCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEANBww5pVulxefbTTvqe1O64kExXbcv2WsVU98o2zDZgw2wsYvbeHXeRGNvtjFllIewrGQbyfDxGgY5Nqo2H1xD6/T8VksOLTbMfj8Qc5gtCu/DuW0JhdnLOwlXyoFqG83Ym9vaIfMd8J/5EkuvmAUvxoFw4uv+UYu+HUSQM2+1zdexn+rzNR8co/IOGNx2bDxQ1XYa7P3myhhM6/jdH40eSmJhvJxDH3nYxfV8CLNYPgj0DX335Tc28k9GHa8h9tNr0hPRoV/2jSpi9EE+x2lDENZrCCMw8D73UUq55OR+KSu4YbxyfvPrZmsFkft/Xeihay8IT1QYyWgWG0dbCHm4Q==</X509Certificate></X509Data></KeyInfo><Object><as:Timestamp>MIIRywYJKoZIhvcNAQcCoIIRvDCCEbgCAQExCzAJBgUrDgMCGgUAMIIBEwYJKoZI
|
||||||
|
hvcNAQcBoIIBBASCAQB9+z1ZqSpMng84viq89JA7Y+04ae2sjNCngmI6XrFhbc8n
|
||||||
|
VxBX5mvJllDd9sSHWDQBNIti7UuQFc7W0BdYDZx3CBNJ4k5IRSiTwV81AtrmEFlh
|
||||||
|
tv4/BoNROpb5NC/mlbcgEgUX7hAqk4kwDYhUT8KJ97ZipaiE0TfBfawcE3ZrN7gO
|
||||||
|
hRTXymIXeB/swFlarhaqgN23eFz9ih2IWqQ15pZGonzEDZDvi0LVK4lnZM0JC8YI
|
||||||
|
Xyh2PIJJORnQaPAP2zWeeeEzcpR59IMK0vXdA8AhpY77lavByiMe46a+CoKQ510/
|
||||||
|
IJZqjIuF0Ky5WOvQEfQWOCWOumDwPfpzIcK5WwJPoIIOdDCCBP4wggPmoAMCAQIC
|
||||||
|
ECtz23RjEUxaWzJK8jBXckkwDQYJKoZIhvcNAQEFBQAwejELMAkGA1UEBhMCR0Ix
|
||||||
|
GzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEa
|
||||||
|
MBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxIDAeBgNVBAMTF0NPTU9ETyBUaW1l
|
||||||
|
IFN0YW1waW5nIENBMB4XDTE5MDUwMjAwMDAwMFoXDTIwMDUzMDEwNDgzOFowgYMx
|
||||||
|
CzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAOBgNV
|
||||||
|
BAcMB1NhbGZvcmQxGDAWBgNVBAoMD1NlY3RpZ28gTGltaXRlZDErMCkGA1UEAwwi
|
||||||
|
U2VjdGlnbyBTSEEtMSBUaW1lIFN0YW1waW5nIFNpZ25lcjCCASIwDQYJKoZIhvcN
|
||||||
|
AQEBBQADggEPADCCAQoCggEBAL9SNoI63HQ3DXjVfxZQGWbtuhqZ0WM4mgxmskDb
|
||||||
|
p4BQv2kuNi8KZz9AoUqKYzWb0BnMdKoXGZErtVUgGfvAGjptyjmbgvK6laEa2DTH
|
||||||
|
uIl7cIhwUWZp7Hf+xpRyes8lge00gprfCBU3MbRtrhy/GNUNz/614cT7sUdx6fru
|
||||||
|
Y5Hs8ezOWQQRfK4LYFPqKvO+LwIP0ExdMRMvHmkPhZtFlsKNEotnrh+vaasGloEA
|
||||||
|
35F8lRzmnhlk33bIYEQvSeOPf2BqRTkTRCGluvuR+kFA7U0CtEt/3+LgPbiq8xrY
|
||||||
|
QYOPfzPtQQbifZ4/U4SNKNrddsa9944eOM3Ay2AkA956TKsCAwEAAaOCAXQwggFw
|
||||||
|
MB8GA1UdIwQYMBaAFGQihrZKickED9AEWJIrs249HidsMB0GA1UdDgQWBBSu7tlg
|
||||||
|
ul71LAES/Y6NslVyNUZv8TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAW
|
||||||
|
BgNVHSUBAf8EDDAKBggrBgEFBQcDCDBABgNVHSAEOTA3MDUGDCsGAQQBsjEBAgED
|
||||||
|
CDAlMCMGCCsGAQUFBwIBFhdodHRwczovL3NlY3RpZ28uY29tL0NQUzBCBgNVHR8E
|
||||||
|
OzA5MDegNaAzhjFodHRwOi8vY3JsLnNlY3RpZ28uY29tL0NPTU9ET1RpbWVTdGFt
|
||||||
|
cGluZ0NBXzIuY3JsMHIGCCsGAQUFBwEBBGYwZDA9BggrBgEFBQcwAoYxaHR0cDov
|
||||||
|
L2NydC5zZWN0aWdvLmNvbS9DT01PRE9UaW1lU3RhbXBpbmdDQV8yLmNydDAjBggr
|
||||||
|
BgEFBQcwAYYXaHR0cDovL29jc3Auc2VjdGlnby5jb20wDQYJKoZIhvcNAQEFBQAD
|
||||||
|
ggEBAHp/qUrSsKQcHQ2dLVzGrlrdj0Ud8J5ckPZerHD+09nN5BmkCkN1YGqDpMOZ
|
||||||
|
hCAxutb+TM8T+BD3VAl+6tzSLnnXB0xUt7XJnbLw8h4kFNCcx8hnqgtit7TxBuTn
|
||||||
|
5CFLGTKZNLkZYXcKM5BnbMCISpL1oUMB866ib8mVvZY494P3rXwoH/M4344hyHFo
|
||||||
|
Uy3LrqriMBeDIikYteGMietu+H44u5BPuV8HNBJrl9XmO5G+ABchbuJt/FJ574El
|
||||||
|
us8T0PvdK82BtleJTvDd8wtKNMqF/wi5ll/rERPg4cUDrVcc4V2SBr4byDw/pSCf
|
||||||
|
adBpwcXCyT7nxXL36huW4pSvhi4wggTmMIIDzqADAgECAhBiXE2QjNVC+6supXM/
|
||||||
|
8VQZMA0GCSqGSIb3DQEBBQUAMIGVMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQx
|
||||||
|
FzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNU
|
||||||
|
IE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRydXN0LmNvbTEdMBsG
|
||||||
|
A1UEAxMUVVROLVVTRVJGaXJzdC1PYmplY3QwHhcNMTEwNDI3MDAwMDAwWhcNMjAw
|
||||||
|
NTMwMTA0ODM4WjB6MQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3JlYXRlciBNYW5j
|
||||||
|
aGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01PRE8gQ0EgTGlt
|
||||||
|
aXRlZDEgMB4GA1UEAxMXQ09NT0RPIFRpbWUgU3RhbXBpbmcgQ0EwggEiMA0GCSqG
|
||||||
|
SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCqgvGEqVvYcbXSXSvt9BMgDPmb6dGPdF5u
|
||||||
|
7uspSNjIvizrCmFgzL2SjXzddLsKnmhOqnUkcyeuN/MagqVtuMgJRkx+oYPp4gNg
|
||||||
|
pCEQJ0CaWeFtrz6CryFpWW1jzM6x9haaeYOXOh0Mr8l90U7Yw0ahpZiqYM5V1BIR
|
||||||
|
8zsLbMaIupUu76BGRTl8rOnjrehXl1/++8IJjf6OmqU/WUb8xy1dhIfwb1gmw/BC
|
||||||
|
/FXeZb5nOGOzEbGhJe2pm75I30x3wKoZC7b9So8seVWx/llaWm1VixxD9rFVcimJ
|
||||||
|
TUA/vn9JAV08m1wI+8ridRUFk50IYv+6Dduq+LW/EDLKcuoIJs0ZAgMBAAGjggFK
|
||||||
|
MIIBRjAfBgNVHSMEGDAWgBTa7WR0FJwUPKvdmam9WyhNizzJ2DAdBgNVHQ4EFgQU
|
||||||
|
ZCKGtkqJyQQP0ARYkiuzbj0eJ2wwDgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQI
|
||||||
|
MAYBAf8CAQAwEwYDVR0lBAwwCgYIKwYBBQUHAwgwEQYDVR0gBAowCDAGBgRVHSAA
|
||||||
|
MEIGA1UdHwQ7MDkwN6A1oDOGMWh0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4t
|
||||||
|
VVNFUkZpcnN0LU9iamVjdC5jcmwwdAYIKwYBBQUHAQEEaDBmMD0GCCsGAQUFBzAC
|
||||||
|
hjFodHRwOi8vY3J0LnVzZXJ0cnVzdC5jb20vVVROQWRkVHJ1c3RPYmplY3RfQ0Eu
|
||||||
|
Y3J0MCUGCCsGAQUFBzABhhlodHRwOi8vb2NzcC51c2VydHJ1c3QuY29tMA0GCSqG
|
||||||
|
SIb3DQEBBQUAA4IBAQARyT3hBeg7ZazJdDEDt9qDOMaSuv3N+Ntjm30ekKSYyNlY
|
||||||
|
aDS18AshU55ZRv1jhd/+R6pw5D9eCJUoXxTx/SKucOS38bC2Vp+xZ7hog16oYNuY
|
||||||
|
OfbcSV4Tp5BnS+Nu5+vwQ8fQL33/llqnA9abVKAj06XCoI75T9GyBiH+IV0njKCv
|
||||||
|
2bBS7vzI7bec8ckmONalMu1Il5RePeA9NbSwyVivx1j/YnQWkmRB2sqo64sDvcFO
|
||||||
|
rh+RMrjhJDt77RRoCYaWKMk7yWwowiVp9UphreAn+FOndRWwUTGw8UH/PlomHmB+
|
||||||
|
4uNqOZrE6u4/5rITP1UDBE0LkHLU6/u8h5BRsjgZMIIEhDCCA2ygAwIBAgIQQhry
|
||||||
|
lAmEGR9SCkvGJCanSzANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEUMBIG
|
||||||
|
A1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFsIFRU
|
||||||
|
UCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290MB4X
|
||||||
|
DTA1MDYwNzA4MDkxMFoXDTIwMDUzMDEwNDgzOFowgZUxCzAJBgNVBAYTAlVTMQsw
|
||||||
|
CQYDVQQIEwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkxHjAcBgNVBAoTFVRo
|
||||||
|
ZSBVU0VSVFJVU1QgTmV0d29yazEhMB8GA1UECxMYaHR0cDovL3d3dy51c2VydHJ1
|
||||||
|
c3QuY29tMR0wGwYDVQQDExRVVE4tVVNFUkZpcnN0LU9iamVjdDCCASIwDQYJKoZI
|
||||||
|
hvcNAQEBBQADggEPADCCAQoCggEBAM6qgT+jo2F4qjEAVZURnicPHxzfOpuCaDDA
|
||||||
|
SmEd8S8O+r5596Uj71VRloTN2+O5bj4x2AogZ8f02b+U60cEPgLOKqJdhwQJ9jCd
|
||||||
|
GIqXsqoc/EHSoTbL+z2RuufZcDX65OeQw5ujm9M89RKZd7G3CeBo5hy485RjiGpq
|
||||||
|
/gt2yb70IuRnuasaXnfBhQfdDWy/7gbHd2pBnqcP1/vulBe3/IW+pKvEHDHd17bR
|
||||||
|
5PDv3xaPslKT16HUiaEHLr/hARJCHhrh2JU022R5KP+6LhHC5ehbkkj7RwvCbNqt
|
||||||
|
MoNB86XlQXD9ZZBt+vpRxPm9lisZBCzTbafc8H9vg2XiaquHhnUCAwEAAaOB9DCB
|
||||||
|
8TAfBgNVHSMEGDAWgBStvZh6NLQm9/rEJlTvA73gJMtUGjAdBgNVHQ4EFgQU2u1k
|
||||||
|
dBScFDyr3ZmpvVsoTYs8ydgwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMB
|
||||||
|
Af8wEQYDVR0gBAowCDAGBgRVHSAAMEQGA1UdHwQ9MDswOaA3oDWGM2h0dHA6Ly9j
|
||||||
|
cmwudXNlcnRydXN0LmNvbS9BZGRUcnVzdEV4dGVybmFsQ0FSb290LmNybDA1Bggr
|
||||||
|
BgEFBQcBAQQpMCcwJQYIKwYBBQUHMAGGGWh0dHA6Ly9vY3NwLnVzZXJ0cnVzdC5j
|
||||||
|
b20wDQYJKoZIhvcNAQEFBQADggEBAE1CL6bBiusHgJBYRoz4GTlmKjxaLG3P1NmH
|
||||||
|
VY15CxKIe0CP1cf4S41VFmOtt1fcOyu908FPHgOHS0Sb4+JARSbzJkkraoTxVHrU
|
||||||
|
Qtr802q7Zn7Knurpu9wHx8OSToM8gUmfktUyCepJLqERcZo20sVOaLbLDhslFq9s
|
||||||
|
3l122B9ysZMmhhfbGN6vRenf+5ivFBjtpF72iZRF8FUESt3/J90GSkD2tLzx5A+Z
|
||||||
|
Arv9XQ4uKMG+O18aP5cQhLwWPtijnGMdZstcX9o+8w8KCTUi29vAPwD55g1dZ9H9
|
||||||
|
oB4DK9lA977Mh2ZUgKajuPUZYtXSJrGYJu6ay0SnRVqBlRUa9VExggIVMIICEQIB
|
||||||
|
ATCBjjB6MQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVy
|
||||||
|
MRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01PRE8gQ0EgTGltaXRlZDEg
|
||||||
|
MB4GA1UEAxMXQ09NT0RPIFRpbWUgU3RhbXBpbmcgQ0ECECtz23RjEUxaWzJK8jBX
|
||||||
|
ckkwCQYFKw4DAhoFAKBdMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZI
|
||||||
|
hvcNAQkFMQ8XDTE5MDYxOTE2Mzk1MFowIwYJKoZIhvcNAQkEMRYEFIuBy2JuQq5c
|
||||||
|
82DOsSLGh0R5/oHSMA0GCSqGSIb3DQEBAQUABIIBAADOGLKyB4GBrfwsbIRJOQP3
|
||||||
|
NgZN/91KlAg+zMWtxPA0FldK62+2gctLtyZ1HPOElfB5JJ0rQTe2nMSxlD/Jeka4
|
||||||
|
jbvzOc/JP2Jf+dSjjnFu/IqBVCro5ev/l+A6dZ9C8iP0AzIX+O5blwbRdpYDGd2T
|
||||||
|
ZCtuLdU0GpWKOlCC8FCXjNi50fL7ZZec6iwPvz1LfuU20dBzjnaOu+g+Afy2w8kg
|
||||||
|
3n5vo27eXjfW1HMTR8qTwZETgGRJw7912xF3nc5nkqlas9Sluh5Iua2LS4DMYk1C
|
||||||
|
Q09r6ukNlA351S6ySrXYZWJVA0skqihk0fF4xM6/6c0pHcFKljPku9CUssb1uwg=
|
||||||
|
</as:Timestamp></Object></Signature></r:issuer></r:license></msrel:RelData></KeyInfo></Signature></asmv1:assembly>
|
Binary file not shown.
|
@ -0,0 +1,177 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<asmv1:assembly xsi:schemaLocation="urn:schemas-microsoft-com:asm.v1 assembly.adaptive.xsd" manifestVersion="1.0" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns="urn:schemas-microsoft-com:asm.v2" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:co.v1="urn:schemas-microsoft-com:clickonce.v1" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" xmlns:co.v2="urn:schemas-microsoft-com:clickonce.v2">
|
||||||
|
<asmv1:assemblyIdentity name="MeshMiniRouter.exe" version="2.0.0.29" publicKeyToken="2e8c763d6917d840" language="neutral" processorArchitecture="msil" type="win32" />
|
||||||
|
<description asmv2:iconFile="MeshMiniRouter.ico" xmlns="urn:schemas-microsoft-com:asm.v1" />
|
||||||
|
<application />
|
||||||
|
<entryPoint>
|
||||||
|
<assemblyIdentity name="MeshMiniRouter" version="1.0.7109.17443" language="neutral" processorArchitecture="msil" />
|
||||||
|
<commandLine file="MeshMiniRouter.exe" parameters="" />
|
||||||
|
</entryPoint>
|
||||||
|
<trustInfo>
|
||||||
|
<security>
|
||||||
|
<applicationRequestMinimum>
|
||||||
|
<PermissionSet version="1" class="System.Security.NamedPermissionSet" Name="Internet" Description="Default rights given to Internet applications" Unrestricted="true" ID="Custom" SameSite="site" />
|
||||||
|
<defaultAssemblyRequest permissionSetReference="Custom" />
|
||||||
|
</applicationRequestMinimum>
|
||||||
|
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
|
||||||
|
<!-- UAC Manifest Options
|
||||||
|
If you want to change the Windows User Account Control level replace the
|
||||||
|
requestedExecutionLevel node with one of the following.
|
||||||
|
|
||||||
|
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
|
||||||
|
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
|
||||||
|
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
|
||||||
|
|
||||||
|
Specifying requestedExecutionLevel node will disable file and registry virtualization.
|
||||||
|
If you want to utilize File and Registry Virtualization for backward
|
||||||
|
compatibility then delete the requestedExecutionLevel node.
|
||||||
|
-->
|
||||||
|
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
|
||||||
|
</requestedPrivileges>
|
||||||
|
</security>
|
||||||
|
</trustInfo>
|
||||||
|
<dependency>
|
||||||
|
<dependentOS>
|
||||||
|
<osVersionInfo>
|
||||||
|
<os majorVersion="5" minorVersion="1" buildNumber="2600" servicePackMajor="0" />
|
||||||
|
</osVersionInfo>
|
||||||
|
</dependentOS>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<dependentAssembly dependencyType="preRequisite" allowDelayedBinding="true">
|
||||||
|
<assemblyIdentity name="Microsoft.Windows.CommonLanguageRuntime" version="4.0.30319.0" />
|
||||||
|
</dependentAssembly>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<dependentAssembly dependencyType="install" allowDelayedBinding="true" codebase="MeshMiniRouter.exe" size="195568">
|
||||||
|
<assemblyIdentity name="MeshMiniRouter" version="1.0.7109.17443" language="neutral" processorArchitecture="msil" />
|
||||||
|
<hash>
|
||||||
|
<dsig:Transforms>
|
||||||
|
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
|
||||||
|
</dsig:Transforms>
|
||||||
|
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" />
|
||||||
|
<dsig:DigestValue>pjiT63g9OFJUGKkmY1qgx3fG5nZ4aJF6VW2rqftTu4w=</dsig:DigestValue>
|
||||||
|
</hash>
|
||||||
|
</dependentAssembly>
|
||||||
|
</dependency>
|
||||||
|
<file name="MeshMiniRouter.exe.config" size="2397">
|
||||||
|
<hash>
|
||||||
|
<dsig:Transforms>
|
||||||
|
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
|
||||||
|
</dsig:Transforms>
|
||||||
|
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" />
|
||||||
|
<dsig:DigestValue>UylUFD4/o0KBti+5/eodTDgq4BkUJD0J0aUXNd3yHbY=</dsig:DigestValue>
|
||||||
|
</hash>
|
||||||
|
</file>
|
||||||
|
<file name="MeshMiniRouter.ico" size="1078">
|
||||||
|
<hash>
|
||||||
|
<dsig:Transforms>
|
||||||
|
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
|
||||||
|
</dsig:Transforms>
|
||||||
|
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" />
|
||||||
|
<dsig:DigestValue>mkjbDQuo7YXa8wZxdKEu/ECXrORwwtpRgNj8NBKbzHo=</dsig:DigestValue>
|
||||||
|
</hash>
|
||||||
|
</file>
|
||||||
|
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
|
||||||
|
<application>
|
||||||
|
<!-- A list of all Windows versions that this application is designed to work with. Windows will automatically select the most compatible environment.-->
|
||||||
|
<!-- If your application is designed to work with Windows 7, uncomment the following supportedOS node-->
|
||||||
|
<!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>-->
|
||||||
|
</application>
|
||||||
|
</compatibility>
|
||||||
|
<publisherIdentity name="CN=meshcommander.com, O=Open Source, C=US" issuerKeyHash="a5ce27af64fc8ff59400eb5bfb629fbe55a295ec" /><Signature Id="StrongNameSignature" xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /><SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" /><Reference URI=""><Transforms><Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" /><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" /><DigestValue>rdudBjT8d/St+qhe7mR9ZBW9kwQ=</DigestValue></Reference></SignedInfo><SignatureValue>viMGsfeyoE91nA17ahh/J6R0+Yo3a1QiIsZguo1xY39K2u2Xfs9+RBBMdS1tFmsIAJXDeM8Us1WuZKZPQ87SmzNA/jow/8Z95WXAzjLIe7kgc0oductj0PuKoF2m/LJpXB/zxTspvQfC5i7wKv7rz9YBXXP6PZkJB3yfUYFHFj9gGuF43SLi6ZvO6qsd196ED0XmYK0mX0vv9ffduOAzSE/EI7jlDv2rfcILKnDvCfvQjQtA24qGENdMHFqvwFk+WqLKKJHKCAD2NOLRhBGgg68MvwVeOBqQYvEL8DczRuIKWv6TdPSY4aCWbXRmkYypGJTO0clRkiuDZGSVkdgL/Q==</SignatureValue><KeyInfo Id="StrongNameKeyInfo"><KeyValue><RSAKeyValue><Modulus>wroCIKvsY8JniSorSgYaU48PzB9id1png9IjbcLAPGGNJDT57ML8N8+OGCR/XNZlpFgAduA5SZlgeLuUO3DGk6XdxEEi+7i85YyC9BHlmVNi82GMJKN9hdcNE6nxf0mrXJRpR2X8j11UzD0ckpVbFZPq/3YnYIB7ZAkmDUsUgA/uWuhodrMp3DMePzGGA5Bhv3J/Cxh8N/1eCS9z8Ou8Fo/TWTsnWqhU3oaqJ63UHQ4GFiTY4NnQTp7124PT/MWI+mMxEDczi2cTkGklBwzBmCcu42AOkEY4lfrbILKPX12fnBILNttJQYol+pFiIzTdFa57uXaLTlDZ6m+4SjhT6w==</Modulus><Exponent>AQAB</Exponent></RSAKeyValue></KeyValue><msrel:RelData xmlns:msrel="http://schemas.microsoft.com/windows/rel/2005/reldata"><r:license xmlns:r="urn:mpeg:mpeg21:2003:01-REL-R-NS" xmlns:as="http://schemas.microsoft.com/windows/pki/2005/Authenticode"><r:grant><as:ManifestInformation Hash="0493bd15647d64ee5ea8faadf477fc34069ddbad" Description="" Url=""><as:assemblyIdentity name="MeshMiniRouter.exe" version="2.0.0.29" publicKeyToken="2e8c763d6917d840" language="neutral" processorArchitecture="msil" type="win32" /></as:ManifestInformation><as:SignedBy /><as:AuthenticodePublisher><as:X509SubjectName>CN=meshcommander.com, O=Open Source, C=US</as:X509SubjectName></as:AuthenticodePublisher></r:grant><r:issuer><Signature Id="AuthenticodeSignature" xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /><SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" /><Reference URI=""><Transforms><Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" /><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" /><DigestValue>/qnG2T8hvj5RjyxbDwZGHtTo3Ys=</DigestValue></Reference></SignedInfo><SignatureValue>lj6ZZ4ORr5bQCJsnKvHEml8AhDiLeJ8J/QjhrZlse8pKrurX16XuT2IH/z9Ov7qJfkvXDVblqIbKkr5P+eQUN69KcFkuUFGyUzNe2LGX8K5KC9S9AbTTGl2qw+GfLTNF6em8QWLz2Ul2CMyhv2Oz4Al/odJ59Dhf240iKf7CIonCWedShJoHrOrOPnCNg3Y/+/8yUVd6Obur7CoZ8V5C38fjlcJZO061CJ9z4qkWIf6oFh7B4ebxpX7ykjDJvIoMTJ55MirPw6eCg/b+zIFXBkqBmWp3eq1JDyW7dG9+kYfxiqE70BZTIn0GgN2tcsv5+a4F3zJN0n7RXQ2cQf4eQw==</SignatureValue><KeyInfo><KeyValue><RSAKeyValue><Modulus>wroCIKvsY8JniSorSgYaU48PzB9id1png9IjbcLAPGGNJDT57ML8N8+OGCR/XNZlpFgAduA5SZlgeLuUO3DGk6XdxEEi+7i85YyC9BHlmVNi82GMJKN9hdcNE6nxf0mrXJRpR2X8j11UzD0ckpVbFZPq/3YnYIB7ZAkmDUsUgA/uWuhodrMp3DMePzGGA5Bhv3J/Cxh8N/1eCS9z8Ou8Fo/TWTsnWqhU3oaqJ63UHQ4GFiTY4NnQTp7124PT/MWI+mMxEDczi2cTkGklBwzBmCcu42AOkEY4lfrbILKPX12fnBILNttJQYol+pFiIzTdFa57uXaLTlDZ6m+4SjhT6w==</Modulus><Exponent>AQAB</Exponent></RSAKeyValue></KeyValue><X509Data><X509Certificate>MIIC+jCCAeICCQDiTk4zPcm5fTANBgkqhkiG9w0BAQUFADA/MQswCQYDVQQGEwJVUzEUMBIGA1UECgwLT3BlbiBTb3VyY2UxGjAYBgNVBAMMEW1lc2hjb21tYW5kZXIuY29tMB4XDTE5MDUyOTIxNDIwMloXDTM5MDUyNDIxNDIwMlowPzELMAkGA1UEBhMCVVMxFDASBgNVBAoMC09wZW4gU291cmNlMRowGAYDVQQDDBFtZXNoY29tbWFuZGVyLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMK6AiCr7GPCZ4kqK0oGGlOPD8wfYndaZ4PSI23CwDxhjSQ0+ezC/DfPjhgkf1zWZaRYAHbgOUmZYHi7lDtwxpOl3cRBIvu4vOWMgvQR5ZlTYvNhjCSjfYXXDROp8X9Jq1yUaUdl/I9dVMw9HJKVWxWT6v92J2CAe2QJJg1LFIAP7lroaHazKdwzHj8xhgOQYb9yfwsYfDf9Xgkvc/DrvBaP01k7J1qoVN6Gqiet1B0OBhYk2ODZ0E6e9duD0/zFiPpjMRA3M4tnE5BpJQcMwZgnLuNgDpBGOJX62yCyj19dn5wSCzbbSUGKJfqRYiM03RWue7l2i05Q2epvuEo4U+sCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEANBww5pVulxefbTTvqe1O64kExXbcv2WsVU98o2zDZgw2wsYvbeHXeRGNvtjFllIewrGQbyfDxGgY5Nqo2H1xD6/T8VksOLTbMfj8Qc5gtCu/DuW0JhdnLOwlXyoFqG83Ym9vaIfMd8J/5EkuvmAUvxoFw4uv+UYu+HUSQM2+1zdexn+rzNR8co/IOGNx2bDxQ1XYa7P3myhhM6/jdH40eSmJhvJxDH3nYxfV8CLNYPgj0DX335Tc28k9GHa8h9tNr0hPRoV/2jSpi9EE+x2lDENZrCCMw8D73UUq55OR+KSu4YbxyfvPrZmsFkft/Xeihay8IT1QYyWgWG0dbCHm4Q==</X509Certificate></X509Data></KeyInfo><Object><as:Timestamp>MIIRywYJKoZIhvcNAQcCoIIRvDCCEbgCAQExCzAJBgUrDgMCGgUAMIIBEwYJKoZI
|
||||||
|
hvcNAQcBoIIBBASCAQCWPplng5GvltAImycq8cSaXwCEOIt4nwn9COGtmWx7ykqu
|
||||||
|
6tfXpe5PYgf/P06/uol+S9cNVuWohsqSvk/55BQ3r0pwWS5QUbJTM17YsZfwrkoL
|
||||||
|
1L0BtNMaXarD4Z8tM0Xp6bxBYvPZSXYIzKG/Y7PgCX+h0nn0OF/bjSIp/sIiicJZ
|
||||||
|
51KEmges6s4+cI2Ddj/7/zJRV3o5u6vsKhnxXkLfx+OVwlk7TrUIn3PiqRYh/qgW
|
||||||
|
HsHh5vGlfvKSMMm8igxMnnkyKs/Dp4KD9v7MgVcGSoGZand6rUkPJbt0b36Rh/GK
|
||||||
|
oTvQFlMifQaA3a1yy/n5rgXfMk3SftFdDZxB/h5DoIIOdDCCBP4wggPmoAMCAQIC
|
||||||
|
ECtz23RjEUxaWzJK8jBXckkwDQYJKoZIhvcNAQEFBQAwejELMAkGA1UEBhMCR0Ix
|
||||||
|
GzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEa
|
||||||
|
MBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxIDAeBgNVBAMTF0NPTU9ETyBUaW1l
|
||||||
|
IFN0YW1waW5nIENBMB4XDTE5MDUwMjAwMDAwMFoXDTIwMDUzMDEwNDgzOFowgYMx
|
||||||
|
CzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAOBgNV
|
||||||
|
BAcMB1NhbGZvcmQxGDAWBgNVBAoMD1NlY3RpZ28gTGltaXRlZDErMCkGA1UEAwwi
|
||||||
|
U2VjdGlnbyBTSEEtMSBUaW1lIFN0YW1waW5nIFNpZ25lcjCCASIwDQYJKoZIhvcN
|
||||||
|
AQEBBQADggEPADCCAQoCggEBAL9SNoI63HQ3DXjVfxZQGWbtuhqZ0WM4mgxmskDb
|
||||||
|
p4BQv2kuNi8KZz9AoUqKYzWb0BnMdKoXGZErtVUgGfvAGjptyjmbgvK6laEa2DTH
|
||||||
|
uIl7cIhwUWZp7Hf+xpRyes8lge00gprfCBU3MbRtrhy/GNUNz/614cT7sUdx6fru
|
||||||
|
Y5Hs8ezOWQQRfK4LYFPqKvO+LwIP0ExdMRMvHmkPhZtFlsKNEotnrh+vaasGloEA
|
||||||
|
35F8lRzmnhlk33bIYEQvSeOPf2BqRTkTRCGluvuR+kFA7U0CtEt/3+LgPbiq8xrY
|
||||||
|
QYOPfzPtQQbifZ4/U4SNKNrddsa9944eOM3Ay2AkA956TKsCAwEAAaOCAXQwggFw
|
||||||
|
MB8GA1UdIwQYMBaAFGQihrZKickED9AEWJIrs249HidsMB0GA1UdDgQWBBSu7tlg
|
||||||
|
ul71LAES/Y6NslVyNUZv8TAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAW
|
||||||
|
BgNVHSUBAf8EDDAKBggrBgEFBQcDCDBABgNVHSAEOTA3MDUGDCsGAQQBsjEBAgED
|
||||||
|
CDAlMCMGCCsGAQUFBwIBFhdodHRwczovL3NlY3RpZ28uY29tL0NQUzBCBgNVHR8E
|
||||||
|
OzA5MDegNaAzhjFodHRwOi8vY3JsLnNlY3RpZ28uY29tL0NPTU9ET1RpbWVTdGFt
|
||||||
|
cGluZ0NBXzIuY3JsMHIGCCsGAQUFBwEBBGYwZDA9BggrBgEFBQcwAoYxaHR0cDov
|
||||||
|
L2NydC5zZWN0aWdvLmNvbS9DT01PRE9UaW1lU3RhbXBpbmdDQV8yLmNydDAjBggr
|
||||||
|
BgEFBQcwAYYXaHR0cDovL29jc3Auc2VjdGlnby5jb20wDQYJKoZIhvcNAQEFBQAD
|
||||||
|
ggEBAHp/qUrSsKQcHQ2dLVzGrlrdj0Ud8J5ckPZerHD+09nN5BmkCkN1YGqDpMOZ
|
||||||
|
hCAxutb+TM8T+BD3VAl+6tzSLnnXB0xUt7XJnbLw8h4kFNCcx8hnqgtit7TxBuTn
|
||||||
|
5CFLGTKZNLkZYXcKM5BnbMCISpL1oUMB866ib8mVvZY494P3rXwoH/M4344hyHFo
|
||||||
|
Uy3LrqriMBeDIikYteGMietu+H44u5BPuV8HNBJrl9XmO5G+ABchbuJt/FJ574El
|
||||||
|
us8T0PvdK82BtleJTvDd8wtKNMqF/wi5ll/rERPg4cUDrVcc4V2SBr4byDw/pSCf
|
||||||
|
adBpwcXCyT7nxXL36huW4pSvhi4wggTmMIIDzqADAgECAhBiXE2QjNVC+6supXM/
|
||||||
|
8VQZMA0GCSqGSIb3DQEBBQUAMIGVMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQx
|
||||||
|
FzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNU
|
||||||
|
IE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRydXN0LmNvbTEdMBsG
|
||||||
|
A1UEAxMUVVROLVVTRVJGaXJzdC1PYmplY3QwHhcNMTEwNDI3MDAwMDAwWhcNMjAw
|
||||||
|
NTMwMTA0ODM4WjB6MQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3JlYXRlciBNYW5j
|
||||||
|
aGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01PRE8gQ0EgTGlt
|
||||||
|
aXRlZDEgMB4GA1UEAxMXQ09NT0RPIFRpbWUgU3RhbXBpbmcgQ0EwggEiMA0GCSqG
|
||||||
|
SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCqgvGEqVvYcbXSXSvt9BMgDPmb6dGPdF5u
|
||||||
|
7uspSNjIvizrCmFgzL2SjXzddLsKnmhOqnUkcyeuN/MagqVtuMgJRkx+oYPp4gNg
|
||||||
|
pCEQJ0CaWeFtrz6CryFpWW1jzM6x9haaeYOXOh0Mr8l90U7Yw0ahpZiqYM5V1BIR
|
||||||
|
8zsLbMaIupUu76BGRTl8rOnjrehXl1/++8IJjf6OmqU/WUb8xy1dhIfwb1gmw/BC
|
||||||
|
/FXeZb5nOGOzEbGhJe2pm75I30x3wKoZC7b9So8seVWx/llaWm1VixxD9rFVcimJ
|
||||||
|
TUA/vn9JAV08m1wI+8ridRUFk50IYv+6Dduq+LW/EDLKcuoIJs0ZAgMBAAGjggFK
|
||||||
|
MIIBRjAfBgNVHSMEGDAWgBTa7WR0FJwUPKvdmam9WyhNizzJ2DAdBgNVHQ4EFgQU
|
||||||
|
ZCKGtkqJyQQP0ARYkiuzbj0eJ2wwDgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQI
|
||||||
|
MAYBAf8CAQAwEwYDVR0lBAwwCgYIKwYBBQUHAwgwEQYDVR0gBAowCDAGBgRVHSAA
|
||||||
|
MEIGA1UdHwQ7MDkwN6A1oDOGMWh0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4t
|
||||||
|
VVNFUkZpcnN0LU9iamVjdC5jcmwwdAYIKwYBBQUHAQEEaDBmMD0GCCsGAQUFBzAC
|
||||||
|
hjFodHRwOi8vY3J0LnVzZXJ0cnVzdC5jb20vVVROQWRkVHJ1c3RPYmplY3RfQ0Eu
|
||||||
|
Y3J0MCUGCCsGAQUFBzABhhlodHRwOi8vb2NzcC51c2VydHJ1c3QuY29tMA0GCSqG
|
||||||
|
SIb3DQEBBQUAA4IBAQARyT3hBeg7ZazJdDEDt9qDOMaSuv3N+Ntjm30ekKSYyNlY
|
||||||
|
aDS18AshU55ZRv1jhd/+R6pw5D9eCJUoXxTx/SKucOS38bC2Vp+xZ7hog16oYNuY
|
||||||
|
OfbcSV4Tp5BnS+Nu5+vwQ8fQL33/llqnA9abVKAj06XCoI75T9GyBiH+IV0njKCv
|
||||||
|
2bBS7vzI7bec8ckmONalMu1Il5RePeA9NbSwyVivx1j/YnQWkmRB2sqo64sDvcFO
|
||||||
|
rh+RMrjhJDt77RRoCYaWKMk7yWwowiVp9UphreAn+FOndRWwUTGw8UH/PlomHmB+
|
||||||
|
4uNqOZrE6u4/5rITP1UDBE0LkHLU6/u8h5BRsjgZMIIEhDCCA2ygAwIBAgIQQhry
|
||||||
|
lAmEGR9SCkvGJCanSzANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEUMBIG
|
||||||
|
A1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFsIFRU
|
||||||
|
UCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290MB4X
|
||||||
|
DTA1MDYwNzA4MDkxMFoXDTIwMDUzMDEwNDgzOFowgZUxCzAJBgNVBAYTAlVTMQsw
|
||||||
|
CQYDVQQIEwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkxHjAcBgNVBAoTFVRo
|
||||||
|
ZSBVU0VSVFJVU1QgTmV0d29yazEhMB8GA1UECxMYaHR0cDovL3d3dy51c2VydHJ1
|
||||||
|
c3QuY29tMR0wGwYDVQQDExRVVE4tVVNFUkZpcnN0LU9iamVjdDCCASIwDQYJKoZI
|
||||||
|
hvcNAQEBBQADggEPADCCAQoCggEBAM6qgT+jo2F4qjEAVZURnicPHxzfOpuCaDDA
|
||||||
|
SmEd8S8O+r5596Uj71VRloTN2+O5bj4x2AogZ8f02b+U60cEPgLOKqJdhwQJ9jCd
|
||||||
|
GIqXsqoc/EHSoTbL+z2RuufZcDX65OeQw5ujm9M89RKZd7G3CeBo5hy485RjiGpq
|
||||||
|
/gt2yb70IuRnuasaXnfBhQfdDWy/7gbHd2pBnqcP1/vulBe3/IW+pKvEHDHd17bR
|
||||||
|
5PDv3xaPslKT16HUiaEHLr/hARJCHhrh2JU022R5KP+6LhHC5ehbkkj7RwvCbNqt
|
||||||
|
MoNB86XlQXD9ZZBt+vpRxPm9lisZBCzTbafc8H9vg2XiaquHhnUCAwEAAaOB9DCB
|
||||||
|
8TAfBgNVHSMEGDAWgBStvZh6NLQm9/rEJlTvA73gJMtUGjAdBgNVHQ4EFgQU2u1k
|
||||||
|
dBScFDyr3ZmpvVsoTYs8ydgwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMB
|
||||||
|
Af8wEQYDVR0gBAowCDAGBgRVHSAAMEQGA1UdHwQ9MDswOaA3oDWGM2h0dHA6Ly9j
|
||||||
|
cmwudXNlcnRydXN0LmNvbS9BZGRUcnVzdEV4dGVybmFsQ0FSb290LmNybDA1Bggr
|
||||||
|
BgEFBQcBAQQpMCcwJQYIKwYBBQUHMAGGGWh0dHA6Ly9vY3NwLnVzZXJ0cnVzdC5j
|
||||||
|
b20wDQYJKoZIhvcNAQEFBQADggEBAE1CL6bBiusHgJBYRoz4GTlmKjxaLG3P1NmH
|
||||||
|
VY15CxKIe0CP1cf4S41VFmOtt1fcOyu908FPHgOHS0Sb4+JARSbzJkkraoTxVHrU
|
||||||
|
Qtr802q7Zn7Knurpu9wHx8OSToM8gUmfktUyCepJLqERcZo20sVOaLbLDhslFq9s
|
||||||
|
3l122B9ysZMmhhfbGN6vRenf+5ivFBjtpF72iZRF8FUESt3/J90GSkD2tLzx5A+Z
|
||||||
|
Arv9XQ4uKMG+O18aP5cQhLwWPtijnGMdZstcX9o+8w8KCTUi29vAPwD55g1dZ9H9
|
||||||
|
oB4DK9lA977Mh2ZUgKajuPUZYtXSJrGYJu6ay0SnRVqBlRUa9VExggIVMIICEQIB
|
||||||
|
ATCBjjB6MQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVy
|
||||||
|
MRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01PRE8gQ0EgTGltaXRlZDEg
|
||||||
|
MB4GA1UEAxMXQ09NT0RPIFRpbWUgU3RhbXBpbmcgQ0ECECtz23RjEUxaWzJK8jBX
|
||||||
|
ckkwCQYFKw4DAhoFAKBdMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZI
|
||||||
|
hvcNAQkFMQ8XDTE5MDYxOTE2Mzk0N1owIwYJKoZIhvcNAQkEMRYEFBNH2dqKIc3O
|
||||||
|
d9nu4yVZyVqrZBgsMA0GCSqGSIb3DQEBAQUABIIBABCzYCfVxz++o2+2UNWUqi4k
|
||||||
|
Hzoc4tfnKC5WRQl0lxrw5dSINQv3Zf/4GmZCXc8cXo0aRTSsj+zMhipypc5aN5Ny
|
||||||
|
KKP9HWp7v8xwr/xQvu+3Uwj3C1s2sRNER6NPh3t2SMbK/QXgkneVYo+5gM8qJprV
|
||||||
|
0Z8Mx4sx0s5nOC+abT/kA1s9pRgQWMY3RfiQLE8y5GcQzed0VqkkcGejlvTTiSlf
|
||||||
|
Wd6z9dPoOpuRBzrpBWQhpPsJ9XGlYPeB+VVsqrg7E6Wt/CcmMV/ed5e+iM0fcqW1
|
||||||
|
ngbNX3oSQOpRvxNNxjHga3igYKBZtf4/idoBkTxrRHe56Ah4eMTJjc8luAy8S+0=
|
||||||
|
</as:Timestamp></Object></Signature></r:issuer></r:license></msrel:RelData></KeyInfo></Signature></asmv1:assembly>
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
File diff suppressed because one or more lines are too long
|
@ -59,7 +59,7 @@ FONT.key {font-weight: bold; color: darkgreen}
|
||||||
<TR><TD ALIGN="LEFT"><TABLE CELLPADDING="2" CELLSPACING="0" BORDER="0" WIDTH="540"><TR><TD WIDTH="496">
|
<TR><TD ALIGN="LEFT"><TABLE CELLPADDING="2" CELLSPACING="0" BORDER="0" WIDTH="540"><TR><TD WIDTH="496">
|
||||||
|
|
||||||
<!-- Begin AppInfo -->
|
<!-- Begin AppInfo -->
|
||||||
<TABLE><TR><TD COLSPAN="3"> </TD></TR><TR><TD><B>Name:</B></TD><TD WIDTH="5"><SPACER TYPE="block" WIDTH="10" /></TD><TD>MeshCentral Mini-Router</TD></TR><TR><TD COLSPAN="3"> </TD></TR><TR><TD><B>Version:</B></TD><TD WIDTH="5"><SPACER TYPE="block" WIDTH="10" /></TD><TD>2.0.0.26</TD></TR><TR><TD COLSPAN="3"> </TD></TR><TR><TD><B>Publisher:</B></TD><TD WIDTH="5"><SPACER TYPE="block" WIDTH="10" /></TD><TD>Meshcentral.com</TD></TR><tr><td colspan="3"> </td></tr></TABLE>
|
<TABLE><TR><TD COLSPAN="3"> </TD></TR><TR><TD><B>Name:</B></TD><TD WIDTH="5"><SPACER TYPE="block" WIDTH="10" /></TD><TD>MeshCentral Mini-Router</TD></TR><TR><TD COLSPAN="3"> </TD></TR><TR><TD><B>Version:</B></TD><TD WIDTH="5"><SPACER TYPE="block" WIDTH="10" /></TD><TD>2.0.0.29</TD></TR><TR><TD COLSPAN="3"> </TD></TR><TR><TD><B>Publisher:</B></TD><TD WIDTH="5"><SPACER TYPE="block" WIDTH="10" /></TD><TD>Meshcentral.com</TD></TR><tr><td colspan="3"> </td></tr></TABLE>
|
||||||
<!-- End AppInfo -->
|
<!-- End AppInfo -->
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue