From 8fd3590a8748f8f1d4955c3c38116dc9d036f34b Mon Sep 17 00:00:00 2001 From: Ylian Saint-Hilaire Date: Mon, 4 Mar 2019 23:48:45 -0800 Subject: [PATCH] Server improvements, first Intel AMT CCM activation. --- agents/meshcmd.min.js | 1 - agents/meshcore.js | 438 +------------- agents/meshcore.min.js | 1 - agents/modules_meshcmd_min/amt-lme.min.js | 1 - agents/modules_meshcmd_min/amt-mei.min.js | 1 - agents/modules_meshcmd_min/amt-scanner.min.js | 1 - agents/modules_meshcmd_min/amt-script.min.js | 1 - .../modules_meshcmd_min/amt-wsman-duk.min.js | 1 - agents/modules_meshcmd_min/amt-wsman.min.js | 1 - agents/modules_meshcmd_min/amt-xml.min.js | 1 - agents/modules_meshcmd_min/amt.min.js | 1 - .../process-manager.min.js | 1 - .../modules_meshcmd_min/service-host.min.js | 1 - .../service-manager.min.js | 1 - agents/modules_meshcmd_min/smbios.min.js | 1 - .../modules_meshcmd_min/user-sessions.min.js | 1 - agents/modules_meshcore/amt-manage.js | 536 ++++++++++++++++++ agents/modules_meshcore/amt-mei.js | 1 + agents/modules_meshcore_min/amt-lme.min.js | 1 - agents/modules_meshcore_min/amt-mei.min.js | 1 - .../modules_meshcore_min/amt-scanner.min.js | 1 - .../modules_meshcore_min/amt-wsman-duk.min.js | 1 - agents/modules_meshcore_min/amt-wsman.min.js | 1 - agents/modules_meshcore_min/amt-xml.min.js | 1 - agents/modules_meshcore_min/amt.min.js | 1 - agents/modules_meshcore_min/clipboard.min.js | 1 - agents/modules_meshcore_min/linux-dbus.min.js | 1 - .../monitor-border.min.js | 1 - .../modules_meshcore_min/monitor-info.min.js | 1 - .../modules_meshcore_min/power-monitor.min.js | 1 - .../process-manager.min.js | 1 - .../service-manager.min.js | 1 - agents/modules_meshcore_min/smbios.min.js | 1 - agents/modules_meshcore_min/toaster.min.js | 1 - .../modules_meshcore_min/user-sessions.min.js | 1 - .../wifi-scanner-windows.min.js | 1 - .../modules_meshcore_min/wifi-scanner.min.js | 1 - .../modules_meshcore_min/win-console.min.js | 1 - .../win-message-pump.min.js | 1 - .../modules_meshcore_min/win-registry.min.js | 1 - .../modules_meshcore_min/win-terminal.min.js | 1 - letsEncrypt.js | 2 +- meshagent.js | 2 + meshcentral.js | 2 +- meshmail.js | 6 +- meshscanner.js | 8 +- meshuser.js | 20 +- mpsserver.js | 58 +- package.json | 2 +- redirserver.js | 2 +- views/default.handlebars | 2 +- webserver.js | 10 +- 52 files changed, 626 insertions(+), 501 deletions(-) delete mode 100644 agents/meshcmd.min.js delete mode 100644 agents/meshcore.min.js delete mode 100644 agents/modules_meshcmd_min/amt-lme.min.js delete mode 100644 agents/modules_meshcmd_min/amt-mei.min.js delete mode 100644 agents/modules_meshcmd_min/amt-scanner.min.js delete mode 100644 agents/modules_meshcmd_min/amt-script.min.js delete mode 100644 agents/modules_meshcmd_min/amt-wsman-duk.min.js delete mode 100644 agents/modules_meshcmd_min/amt-wsman.min.js delete mode 100644 agents/modules_meshcmd_min/amt-xml.min.js delete mode 100644 agents/modules_meshcmd_min/amt.min.js delete mode 100644 agents/modules_meshcmd_min/process-manager.min.js delete mode 100644 agents/modules_meshcmd_min/service-host.min.js delete mode 100644 agents/modules_meshcmd_min/service-manager.min.js delete mode 100644 agents/modules_meshcmd_min/smbios.min.js delete mode 100644 agents/modules_meshcmd_min/user-sessions.min.js create mode 100644 agents/modules_meshcore/amt-manage.js delete mode 100644 agents/modules_meshcore_min/amt-lme.min.js delete mode 100644 agents/modules_meshcore_min/amt-mei.min.js delete mode 100644 agents/modules_meshcore_min/amt-scanner.min.js delete mode 100644 agents/modules_meshcore_min/amt-wsman-duk.min.js delete mode 100644 agents/modules_meshcore_min/amt-wsman.min.js delete mode 100644 agents/modules_meshcore_min/amt-xml.min.js delete mode 100644 agents/modules_meshcore_min/amt.min.js delete mode 100644 agents/modules_meshcore_min/clipboard.min.js delete mode 100644 agents/modules_meshcore_min/linux-dbus.min.js delete mode 100644 agents/modules_meshcore_min/monitor-border.min.js delete mode 100644 agents/modules_meshcore_min/monitor-info.min.js delete mode 100644 agents/modules_meshcore_min/power-monitor.min.js delete mode 100644 agents/modules_meshcore_min/process-manager.min.js delete mode 100644 agents/modules_meshcore_min/service-manager.min.js delete mode 100644 agents/modules_meshcore_min/smbios.min.js delete mode 100644 agents/modules_meshcore_min/toaster.min.js delete mode 100644 agents/modules_meshcore_min/user-sessions.min.js delete mode 100644 agents/modules_meshcore_min/wifi-scanner-windows.min.js delete mode 100644 agents/modules_meshcore_min/wifi-scanner.min.js delete mode 100644 agents/modules_meshcore_min/win-console.min.js delete mode 100644 agents/modules_meshcore_min/win-message-pump.min.js delete mode 100644 agents/modules_meshcore_min/win-registry.min.js delete mode 100644 agents/modules_meshcore_min/win-terminal.min.js diff --git a/agents/meshcmd.min.js b/agents/meshcmd.min.js deleted file mode 100644 index ccdceabd..00000000 --- a/agents/meshcmd.min.js +++ /dev/null @@ -1 +0,0 @@ -var fs=require("fs");var os=require("os");var net=require("net");var http=require("http");var dgram=require("dgram");var httpHeaders=require("http-headers");var tcpserver=null;var broadcastSockets={};var multicastSockets={};var discoveryInterval=null;var membershipIPv4="239.255.255.235";var membershipIPv6="FF02:0:0:0:0:0:0:FE";var settings=null;var meshCmdVersion="***Mesh*Cmd*Version***";var amtLms=null,amtMei=null,amtMeiState=null;var wsstack=null,amtstack=null;var oswsstack=null,osamtstack=null;var amtMeiTmpState=null;var SMBiosTables=null;var Large_IntelAmtWebApp="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";var Medium_IntelAmtWebApp="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";var Small_IntelAmtWebApp="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";function onVerifyServer(b,a){if(a==null){a=b}try{for(var d in a){if(a[d].fingerprint.replace(/:/g,"")==settings.serverHttpsHash){return}}}catch(c){}if(serverhash!=null){console.log("Error: Failed to verify server certificate.");throw"Invalid server certificate"}}function debug(a,b){if((settings.debugLevel!=null)&&(settings.debugLevel>=a)){console.log(b)}}function exit(b){if(b==null){b=0}try{process.exit(b)}catch(a){}}function getInstance(b,c){for(var a in b){if(b[a]["InstanceID"]==c){return b[a]}}return null}function md5hex(a){return require("MD5Stream").create().syncHash(a).toString("hex")}function guidToStr(a){return a.substring(6,8)+a.substring(4,6)+a.substring(2,4)+a.substring(0,2)+"-"+a.substring(10,12)+a.substring(8,10)+"-"+a.substring(14,16)+a.substring(12,14)+"-"+a.substring(16,20)+"-"+a.substring(20)}function parceArguments(a){var d={};for(var b in a){b=parseInt(b);if(a[b].startsWith("--")==true){var c=a[b].substring(2).toLowerCase(),e=true;if(((b+1)8){return"[...]"}if(e==undefined){return"[undefined]"}if(typeof e=="string"){if(b==0){return e}return'"'+(e.split("\0")[0])+'"'}if(typeof e=="buffer"){return"[buffer]"}if(typeof e!="object"){return e}var c="{"+(d?"\r\n":" ");for(var a in e){if(a!="_ObjectID"){c+=(addPad(b+2,d)+a+": "+objToString(e[a],b+2,d)+(d?"\r\n":" "))}}return c+addPad(b,d)+"}"}function addPad(b,d){var c="";for(var a=0;a=2){settings={action:j[1]}}}if(settings==null){settings={}}if((typeof h.action)=="string"){settings.action=h.action}if((typeof h.localport)=="string"){settings.localport=parseInt(h.localport)}if((typeof h.remotenodeid)=="string"){settings.remoteNodeId=h.remotenodeid}if((typeof h.username)=="string"){settings.username=h.username}if((typeof h.password)=="string"){settings.password=h.password}if((typeof h.user)=="string"){settings.username=h.user}if((typeof h.pass)=="string"){settings.password=h.pass}if((typeof h.host)=="string"){settings.hostname=h.host}if((typeof h.hostname)=="string"){settings.hostname=h.hostname}if((typeof h.serverid)=="string"){settings.serverId=h.serverid}if((typeof h.serverhttpshash)=="string"){settings.serverHttpsHash=h.serverhttpshash}if((typeof h.remoteport)=="string"){settings.remotePort=parseInt(h.remoteport)}if((typeof h.out)=="string"){settings.output=h.out}if((typeof h.output)=="string"){settings.output=h.output}if((typeof h.debug)=="string"){settings.debugLevel=parseInt(h.debug)}if((typeof h.script)=="string"){settings.script=h.script}if((typeof h.agent)=="string"){settings.agent=h.agent}if(h.debug){try{waitForDebugger()}catch(k){}}if(h.noconsole){settings.noconsole=true}if(h.nocommander){settings.noconsole=true}if(h.lmsdebug){settings.lmsdebug=true}if(h.tls){settings.tls=true}if((j.length>1)&&(d.indexOf(j[1].toUpperCase())>=0)){settings.action=j[1]}if(settings.action==null){console.log("MeshCentral Command (MeshCmd) "+meshCmdVersion);console.log("No action specified, use MeshCmd like this:\r\n");console.log(" meshcmd [action] [arguments...]\r\n");console.log("Valid MeshCentral actions:");console.log(" Route - Map a local TCP port to a remote computer.");console.log("\r\nValid local actions:");console.log(" SMBios - Display System Management BIOS tables for this computer.");console.log(" RawSMBios - Display RAW System Management BIOS tables for this computer.");console.log(" MicroLMS - Run MicroLMS, allowing local access to Intel AMT.");console.log(" AmtInfo - Show Intel AMT version and activation state.");console.log(" AmtVersions - Show all Intel ME version information.");console.log(" AmtHashes - Show all Intel AMT trusted activation hashes.");console.log(" AmtCCM - Activate Intel AMT into Client Control Mode.");console.log(" AmtDeactivate - Deactivate Intel AMT if activated in Client Control mode.");console.log("\r\nValid local or remote actions:");console.log(" MeshCommander - Launch a local MeshCommander web server.");console.log(" AmtUUID - Show Intel AMT unique identifier.");console.log(" AmtAuditLog - Show the Intel AMT audit log.");console.log(" AmtLoadWebApp - Load MeshCommander in Intel AMT 11.6+ firmware.");console.log(" AmtClearWebApp - Clear everything from Intel AMT web storage.");console.log(" AmtStorageState - Show contents of the Intel AMT web storage.");console.log(" AmtSaveState - Save all Intel AMT WSMAN object to file.");console.log(" AmtPresence - Heartbeat a local Intel AMT watchdog agent.");console.log(" AmtScript - Run .mescript on Intel AMT.");console.log("\r\nHelp on a specific action using:\r\n");console.log(" meshcmd help [action]");exit(1);return}if(settings.action=="help"){if(j.length<=2){d.shift();console.log("Help usage:\r\n\r\n MeshCmd help [action]\r\n\r\nValid actions are: "+d.join(", ")+".");exit(1);return}var a=j[2].toLowerCase();if(a=="route"){console.log("The route action is used along with a MeshCentral account to map a local TCP port to a remote port on any computer on your MeshCentral account. This action requires many arguments, to avoid specifying them all it's best to download the meshaction.txt file from the web site and place it in the current folder. Example usage:\r\n\r\n (Place meshaction.txt file in current folder)\r\n meshcmd route --pass myAccountPassword")}else{if(a=="smbios"){console.log("SMBios action will display this computer's system management BIOS information. Example usage:\r\n\r\n meshcmd smbios --out smbios.txt\r\n");console.log("\rOptional arguments:\r\n");console.log(" --output [filename] Optional filename to write the results to.")}else{if(a=="rawsmbios"){console.log("RawSMBios action will display this computer's system management BIOS information in raw hexdecimal form. Example usage:\r\n\r\n meshcmd rawsmbios --out smbios.txt\r\n");console.log("\rOptional arguments:\r\n");console.log(" --output [filename] Optional filename to write the results to.")}else{if(a=="amtinfo"){console.log("AmtInfo action will get the version and activation state of Intel AMT on this computer. The command must be run on a computer with Intel AMT, must run as administrator and the Intel management driver must be installed. Example usage:\r\n\r\n meshcmd amtinfo")}else{if((a=="amtversion")||(a=="amtversions")){console.log("AmtVersions will display all version information about Intel AMT on this computer. The command must be run on a computer with Intel AMT, must run as administrator and the Intel management driver must be installed. Example usage:\r\n\r\n meshcmd amtversions")}else{if(a=="amthashes"){console.log("Amthashes will display all trusted activations hashes for Intel AMT on this computer. The command must be run on a computer with Intel AMT, must run as administrator and the Intel management driver must be installed. These certificates hashes are used by Intel AMT when performing activation into ACM mode. Example usage:\r\n\r\n meshcmd amthashes")}else{if((a=="microlms")||(a=="lms")||(a=="amtlms")){console.log("Starts MicroLMS on this computer, allowing local access to Intel AMT on TCP ports 16992 and 16993 when applicable. The command must be run on a computer with Intel AMT, must run as administrator and the Intel management driver must be installed. These certificates hashes are used by Intel AMT when performing activation into ACM mode. Example usage:\r\n\r\n meshcmd microlms");console.log("\r\nPossible arguments:\r\n");console.log(" --noconsole MeshCommander for LMS will no be available on port 16994.");console.log("\r\nRun as a background service:\r\n");console.log(" microlms install/uninstall/start/stop.")}else{if(a=="amtccm"){console.log('AmtCCM will attempt to activate Intel AMT on this computer into client control mode (CCM). The command must be run on a computer with Intel AMT, must run as administrator and the Intel management driver must be installed. Intel AMT must be in "pre-provisioning" state for this command to work and a administrator password must be provided. Example usage:\r\n\r\n meshcmd amtccm --pass mypassword')}else{if(a=="amtdeactivate"){console.log("AmtDeactivate will attempt to deactivate Intel AMT on this computer when in client control mode (CCM). The command must be run on a computer with Intel AMT, must run as administrator and the Intel management driver must be installed. Intel AMT must be activated in client control mode for this command to work. Example usage:\r\n\r\n meshcmd amtdeactivate")}else{if(a=="amtuuid"){console.log("AmtUUID action will get the unique identifier of the local or remote Intel AMT computer. By default, the local UUID is obtained unless a host is specified. Intel AMT must be activated for this command to work. Example usage:\r\n\r\n meshcmd amtuuid --host 1.2.3.4 --user admin --pass mypassword --tls");console.log("\r\nPossible arguments:\r\n");console.log(" --host [hostname] The IP address or DNS name of Intel AMT, 127.0.0.1 is default.");console.log(" --user [username] The Intel AMT login username, admin is default.");console.log(" --pass [password] The Intel AMT login password.");console.log(" --tls Specifies that TLS must be used.")}else{if((a=="amtloadwebapp")||(a=="amtloadsmallwebapp")||(a=="amtloadlargewebapp")||(a=="amtclearwebapp")||(a=="amtstoragestate")){console.log('AmtLoadWebApp action will load MeshCommander into Intel AMT 11.6 or higher. If the computer is in ACM mode, MeshCommander will replace the default index.htm on HTTP/16992 or HTTPS/16993. If Intel AMT is in CCM mode, MeshCommander will be installed alongside the default web page and will be accessible in the "Web Applications" section. This action works on Intel AMT 11.6 and higher only. Example usage:\r\n\r\n meshcmd amtloadwebapp --host 1.2.3.4 --user admin --pass mypassword --tls');console.log("\r\nPossible arguments:\r\n");console.log(" --host [hostname] The IP address or DNS name of Intel AMT, 127.0.0.1 is default.");console.log(" --user [username] The Intel AMT login username, admin is default.");console.log(" --pass [password] The Intel AMT login password.");console.log(" --tls Specifies that TLS must be used.")}else{if(a=="amtclearwebstorage"){console.log("AmtClearWebStorage will clear the web storage of Intel AMT, removing any loaded firmware version of MeshCommander. This command can clear the local or a remote Intel AMT computer. By default, the local computer storage is cleared unless a host is specified. Intel AMT must be activated for this command to work. This action works on Intel AMT 11.6 and higher only. Example usage:\r\n\r\n meshcmd amtclearwebstorage --host 1.2.3.4 --user admin --pass mypassword --tls");console.log("\r\nPossible arguments:\r\n");console.log(" --host [hostname] The IP address or DNS name of Intel AMT, 127.0.0.1 is default.");console.log(" --user [username] The Intel AMT login username, admin is default.");console.log(" --pass [password] The Intel AMT login password.");console.log(" --tls Specifies that TLS must be used.")}else{if(a=="amtstoragestate"){console.log("AmtStorageState will display the content of the web storage of Intel AMT including any loaded firmware version of MeshCommander. This command can read the storage state of a local or remote Intel AMT computer. By default, the local computer storage state is displayed unless a host is specified. Intel AMT must be activated for this command to work. This action works on Intel AMT 11.6 and higher only. Example usage:\r\n\r\n meshcmd amtstoragestate --host 1.2.3.4 --user admin --pass mypassword --tls");console.log("\r\nPossible arguments:\r\n");console.log(" --host [hostname] The IP address or DNS name of Intel AMT, 127.0.0.1 is default.");console.log(" --user [username] The Intel AMT login username, admin is default.");console.log(" --pass [password] The Intel AMT login password.");console.log(" --tls Specifies that TLS must be used.")}else{if(a=="amtsavestate"){console.log("AmtSaveState action will fetch all the entire state of Intel AMT and save it as a JSON file. This action will take multiple minutes to perform. The command will fetch the local computer state unless host is specified. Intel AMT must be ativated for this command to work. Example usage:\r\n\r\n meshcmd amtsavestate --host 1.2.3.4 --user admin --pass mypassword --tls --output state.json");console.log("\r\nPossible arguments:\r\n");console.log(" --output [filename] The output file for the Intel AMT state in JSON format.");console.log(" --host [hostname] The IP address or DNS name of Intel AMT, 127.0.0.1 is default.");console.log(" --user [username] The Intel AMT login username, admin is default.");console.log(" --pass [password] The Intel AMT login password.");console.log(" --tls Specifies that TLS must be used.")}else{if(a=="amtpresence"){console.log("AmtPresence will heartbeat a local Intel AMT watchdog agent. Example usage:\r\n\r\n meshcmd amtpresence --agent B4B6A24C-255E-A75C-F5E8-B00B4D946AA7");console.log("\r\nPossible arguments:\r\n");console.log(" --user [username] The Intel AMT login username, admin is default.");console.log(" --pass [password] The Intel AMT login password.");console.log(" --agent [uuid] The unique identifier of the watchdog agent.")}else{if(a=="amtscript"){console.log("AmtScript will run a .mescript file on the local or remote Intel AMT. Script files can be built using the MeshCommander script editor and be used to setup or perform actions on Intel AMT. Example usage:\r\n\r\n meshcmd amtscript --script myscript.mescript --host 1.2.3.4 --user admin --pass mypassword --tls");console.log("\r\nPossible arguments:\r\n");console.log(" --script [filename] The script file to run on Intel AMT.");console.log(" --host [hostname] The IP address or DNS name of Intel AMT, 127.0.0.1 is default.");console.log(" --user [username] The Intel AMT login username, admin is default.");console.log(" --pass [password] The Intel AMT login password.");console.log(" --tls Specifies that TLS must be used.")}else{if(a=="meshcommander"){console.log("This action launched a local web server that hosts MeshCommander, a Intel AMT management console.");console.log("\r\nPossible arguments:\r\n");console.log(" --localport [port] Local port used for the web server, 3000 is default.");console.log("\r\nRun as a background service:\r\n");console.log(" meshcommander install/uninstall/start/stop.")}else{if(a=="amtauditlog"){console.log("AmtAuditLog action will fetch the local or remote audit log. If used localy, no username/password is required. Example usage:\r\n\r\n meshcmd amtauditlog --host 1.2.3.4 --user admin --pass mypassword --tls --output audit.json");console.log("\r\nPossible arguments:\r\n");console.log(" --output [filename] The output file for the Intel AMT state in JSON format.");console.log(" --host [hostname] The IP address or DNS name of Intel AMT, 127.0.0.1 is default.");console.log(" --user [username] The Intel AMT login username, admin is default.");console.log(" --pass [password] The Intel AMT login password.");console.log(" --tls Specifies that TLS must be used.")}else{d.shift();console.log("Invalid action, usage:\r\n\r\n meshcmd help [action]\r\n\r\nValid actions are: "+d.join(", ")+".")}}}}}}}}}}}}}}}}}}exit(1);return}settings.action=settings.action.toLowerCase();debug(1,"Settings: "+JSON.stringify(settings));if(settings.action=="smbios"){SMBiosTables=require("smbios");SMBiosTables.get(function(e){var o=SMBiosTables.parse(e);var n=objToString(o,0,"\r\n");if(settings.output==null){console.log(n)}else{var m=fs.openSync(settings.output,"w");fs.writeSync(m,Buffer.from(n,"utf8"));fs.closeSync(m)}exit(1)})}else{if(settings.action=="rawsmbios"){SMBiosTables=require("smbios");SMBiosTables.get(function(e){var q="";for(var o in e){var n=false;for(var p in e[o]){if(e[o][p].length>0){if(n==false){q+=("Table type #"+o+((SMBiosTables.smTableTypes[o]==null)?"":(", "+SMBiosTables.smTableTypes[o])))+"\r\n";n=true}q+=(" "+e[o][p].toString("hex"))+"\r\n"}}}if(settings.output==null){console.log(q)}else{var m=fs.openSync(settings.output,"w");fs.writeSync(m,Buffer.from(q,"utf8"));fs.closeSync(m)}exit(1)})}else{if(settings.action=="route"){if((settings.localPort==null)||(typeof settings.localPort!="number")||(settings.localPort<0)||(settings.localPort>65535)){console.log('No or invalid "localPort" specified, use --localport [localport].');exit(1);return}if((settings.remoteNodeId==null)||(typeof settings.remoteNodeId!="string")){console.log('No or invalid "remoteNodeId" specified.');exit(1);return}if((settings.username==null)||(typeof settings.username!="string")||(settings.username=="")){console.log('No or invalid "username" specified, use --username [username].');exit(1);return}if((settings.password==null)||(typeof settings.password!="string")||(settings.password=="")){console.log('No or invalid "password" specified, use --password [password].');exit(1);return}if((settings.serverId==null)||(typeof settings.serverId!="string")||(settings.serverId.length!=96)){console.log('No or invalid "serverId" specified.');exit(1);return}if((settings.serverHttpsHash==null)||(typeof settings.serverHttpsHash!="string")||(settings.serverHttpsHash.length!=96)){console.log('No or invalid "serverHttpsHash" specified.');exit(1);return}if((settings.remotePort==null)||(typeof settings.remotePort!="number")||(settings.remotePort<0)||(settings.remotePort>65535)){console.log('No or invalid "remotePort" specified, use --remoteport [remoteport].');exit(1);return}if(settings.serverUrl!=null){startRouter()}else{discoverMeshServer()}}else{if((settings.action=="amtloadwebapp")||(settings.action=="amtloadsmallwebapp")||(settings.action=="amtloadlargewebapp")||(settings.action=="amtclearwebapp")||(settings.action=="amtstoragestate")){if((settings.password==null)||(typeof settings.password!="string")||(settings.password=="")){console.log('No or invalid "password" specified, use --password [password].');exit(1);return}if((settings.hostname==null)||(typeof settings.hostname!="string")||(settings.hostname=="")){settings.hostname="127.0.0.1"}if((settings.username==null)||(typeof settings.username!="string")||(settings.username=="")){settings.username="admin"}settings.protocol="http:";settings.localport=16992;debug(1,"Settings: "+JSON.stringify(settings));digest=require("http-digest").create(settings.username,settings.password);digest.http=require("http");if(settings.action=="amtstoragestate"){getAmtStorage(function(m,e){if(m==200){console.log("Storage State: "+JSON.stringify(e,null,2));exit();return}else{console.log("Unable to read storage state.");exit();return}})}else{if(settings.action=="amtloadwebapp"){settings.webapp=Medium_IntelAmtWebApp}else{if(settings.action=="amtloadsmallwebapp"){settings.webapp=Small_IntelAmtWebApp}else{if(settings.action=="amtloadlargewebapp"){settings.webapp=Large_IntelAmtWebApp}else{if(settings.action=="amtclearwebapp"){settings.webapp=null}}}}nextStepStorageUpload()}}else{if((settings.action=="amtversion")||(settings.action=="amtversions")||(settings.action=="amtver")){var g,f;try{g=require("amt-mei");f=new g()}catch(l){console.log(l);exit(1);return}f.on("error",function(m){console.log("ERROR: "+m);exit(1);return});f.getVersion(function(e){console.log("MEI Version = "+e.BiosVersion.toString());for(var m in e.Versions){console.log(e.Versions[m].Description+" = "+e.Versions[m].Version)}exit(1);return})}else{if(settings.action=="amthashes"){var g,f;try{g=require("amt-mei");f=new g()}catch(l){console.log(l);exit(1);return}f.on("error",function(m){console.log("ERROR: "+m);exit(1);return});f.getHashHandles(function(e){exitOnCount=e.length;for(var m=0;m100){lmsNotifications.shift()}var m=Buffer.concat([Buffer.from("0900","hex"),Buffer.from(JSON.stringify(l))]);for(var k in lmsControlSockets){lmsControlSockets[k].write(m)}}}});amtLms.on("bind",function(h){if(h[16992]){this.removeAllListeners("bind")}else{return}amtLms.connected=true;this.promise._res();if(settings.noconsole!==true){amtLms.meshCommander=e.createServer();amtLms.meshCommander.listen(16994);amtLms.meshCommander.on("upgrade",function(l,m,j){switch(l.url.split("?")[0]){case"/lms.ashx":m.ws=m.upgradeWebSocket();m.ws.on("data",processLmsControlData);m.ws.on("end",function(){if(lmsControlSockets[this.id]){delete lmsControlSockets[this.id]}});var k=lmsControlSocketsNextId++;lmsControlSockets[k]=m.ws;m.ws.id=k;break;case"/webrelay.ashx":m.ws=m.upgradeWebSocket();amtLms.bindDuplexStream(m.ws,"IPv4",16992);break;default:m.end();break}});amtLms.meshCommander.on("request",function(l,m){switch(l.url.split("?")[0]){case"/":var k=null;try{k=fs.readFileSync("lmscommander.htm")}catch(j){}if(k!=null){m.writeHead(200,"OK",{Server:"JSLMS","Cache-Control":"max-age=0, no-cache","X-Frame-Options":"DENY","Content-Type":"text/html","Transfer-Encoding":"chunked"});m.end(k)}else{m.writeHead(200,"OK",{Server:"JSLMS","Cache-Control":"max-age=0, no-cache","X-Frame-Options":"DENY","Content-Type":"text/html","Content-Encoding":"gzip","Transfer-Encoding":"chunked",ETag:b});m.end(Buffer.from(a,"base64"))}break;default:m.statusCode=404;m.statusMessage="Not Found";m.end();break}});tempTimer=setTimeout(function(){delete tempTimer;setupMeiOsAdmin(d,2)},100)}else{tempTimer=setTimeout(function(){delete tempTimer;setupMeiOsAdmin(d,1)},100)}});return(g)}function setupMeiOsAdmin(a,b){if(amtMei==null){if(a){a(b)}}else{amtMei.getLocalSystemAccount(function(f){var d=require("amt-wsman-duk");var e=require("amt-wsman");var c=require("amt");oswsstack=new e(d,"127.0.0.1",16992,f.user,f.pass,false);osamtstack=new c(oswsstack);if(a){a(b)}amtMei.getVersion(function(k){var g=null;try{for(var j in k.Versions){if(k.Versions[j].Description=="AMT"){g=parseInt(k.Versions[j].Version.split(".")[0])}}}catch(h){}if((g!=null)&&(g>=12)){kvmGetData("skip");tempTimer=setInterval(function(){kvmGetData()},2000);kvmSetData(JSON.stringify({action:"restart",ver:1}))}})})}}function kvmGetData(a){osamtstack.IPS_KVMRedirectionSettingData_DataChannelRead(kvmDataGetResponse,a)}function kvmDataGetResponse(d,b,c,f,g){if((g!="skip")&&(f==200)&&(c.Body.ReturnValue==0)){var h=null;try{h=Buffer.from(c.Body.DataMessage,"base64").toString()}catch(a){return}if(h!=null){kvmProcessData(c.Body.RealmsBitmap,c.Body.MessageId,h)}}}var webRtcDesktop=null;function kvmProcessData(d,c,g){var a=null;try{a=JSON.parse(g)}catch(b){}if((a!=null)&&(a.action)){if(a.action=="present"){kvmSetData(JSON.stringify({action:"present",ver:1,platform:process.platform}))}if(a.action=="offer"){webRtcDesktop={};var f=require("ILibWebRTC");webRtcDesktop.webrtc=f.createConnection();webRtcDesktop.webrtc.on("connected",function(){});webRtcDesktop.webrtc.on("disconnected",function(){webRtcCleanUp()});webRtcDesktop.webrtc.on("dataChannel",function(h){webRtcDesktop.rtcchannel=h;var e=require("meshDesktop");webRtcDesktop.kvm=e.getRemoteDesktopStream();webRtcDesktop.kvm.pipe(webRtcDesktop.rtcchannel,{dataTypeSkip:1,end:false});webRtcDesktop.rtcchannel.on("end",function(){webRtcCleanUp()});webRtcDesktop.rtcchannel.on("data",function(j){kvmCtrlData(this,j)});webRtcDesktop.rtcchannel.pipe(webRtcDesktop.kvm,{dataTypeSkip:1,end:false})});kvmSetData(JSON.stringify({action:"answer",ver:1,sdp:webRtcDesktop.webrtc.setOffer(a.sdp)}))}}}var path={join:function(){var c=[];for(var a in arguments){var b=arguments[a];if(b!=null){while(b.endsWith("/")||b.endsWith("\\")){b=b.substring(0,b.length-1)}if(a!=0){while(b.startsWith("/")||b.startsWith("\\")){b=b.substring(1)}}c.push(b)}}if(c.length==0){return"/"}return c.join("/")}};function getDirectoryInfo(f){var g={path:f,dir:[]};if(((f==undefined)||(f==""))&&(process.platform=="win32")){var h=null;try{h=fs.readDrivesSync()}catch(b){}if(h!=null){for(var c=0;c0&&c.charCodeAt(0)!=123){if(this.fileupload!=null){c=Buffer.from(c,"base64");var k=c.readUInt32BE(0);if((k==16777216)||(k==16777217)){fs.writeSync(this.fileupload.fp,c.slice(4));b.write({action:"upload",sub:"ack",reqid:this.fileupload.reqid});if(k==16777217){fs.closeSync(this.fileupload.fp);this.fileupload=null}}}return}try{c=JSON.parse(c)}catch(g){console.error("Invalid JSON: "+c);return}if((c.path!=null)&&(process.platform!="win32")&&(c.path[0]!="/")){c.path="/"+c.path}switch(c.action){case"ping":b.write({action:"pong"});break;case"ls":var p=getDirectoryInfo(c.path);if(c.reqid!=undefined){p.reqid=c.reqid}b.write(p);break;case"mkdir":fs.mkdirSync(c.path);break;case"rm":for(var l in c.delfiles){var j=path.join(c.path,c.delfiles[l]);try{fs.unlinkSync(j)}catch(f){console.log(f)}}break;case"rename":var o=path.join(c.path,c.oldname);var n=path.join(c.path,c.newname);try{fs.renameSync(o,n)}catch(f){console.log(f)}break;case"download":var r=0;if(c.sub=="start"){if(this.filedownload!=null){b.write({action:"download",sub:"cancel",id:this.filedownload.id});delete this.filedownload}this.filedownload={id:c.id,path:c.path,ptr:0};try{this.filedownload.f=fs.openSync(this.filedownload.path,"rbN")}catch(f){b.write({action:"download",sub:"cancel",id:this.filedownload.id});delete this.filedownload}if(this.filedownload){b.write({action:"download",sub:"start",id:c.id})}}else{if((this.filedownload!=null)&&(c.id==this.filedownload.id)){if(c.sub=="startack"){r=8}else{if(c.sub=="stop"){delete this.filedownload}else{if(c.sub=="ack"){r=1}}}}}while(r>0){r--;var a=Buffer.alloc(4096);var m=fs.readSync(this.filedownload.f,a,4,4092,null);this.filedownload.ptr+=m;if(m<4092){a.writeInt32BE(16777217,0);fs.closeSync(this.filedownload.f);delete this.filedownload;r=0}else{a.writeInt32BE(16777216,0)}b.write(a.slice(0,m+4).toString("base64"))}break;case"upload":if(c.sub=="start"){if(this.fileupload!=null){fs.closeSync(this.fileupload.fp)}if(!c.path||!c.name){break}this.fileupload={reqid:c.reqid};var h=path.join(c.path,c.name);try{this.fileupload.fp=fs.openSync(h,"wbN")}catch(f){}if(this.fileupload.fp){b.write({action:"upload",sub:"start",reqid:this.fileupload.reqid})}else{this.fileupload=null;b.write({action:"upload",sub:"error",reqid:this.fileupload.reqid})}}else{if(c.sub=="cancel"){if(this.fileupload!=null){fs.closeSync(this.fileupload.fp);this.fileupload=null}}}break;case"copy":for(var l in c.names){var q=path.join(c.scpath,c.names[l]),d=path.join(c.dspath,c.names[l]);if(q!=d){try{fs.copyFileSync(q,d)}catch(f){}}}break;case"move":for(var l in c.names){var q=path.join(c.scpath,c.names[l]),d=path.join(c.dspath,c.names[l]);if(q!=d){try{fs.copyFileSync(q,d);fs.unlinkSync(q)}catch(f){}}}break;default:break}}function webRtcCleanUp(){if(webRtcDesktop==null){return}if(webRtcDesktop.rtcchannel){try{webRtcDesktop.rtcchannel.close()}catch(a){}try{webRtcDesktop.rtcchannel.removeAllListeners("data")}catch(a){}try{webRtcDesktop.rtcchannel.removeAllListeners("end")}catch(a){}delete webRtcDesktop.rtcchannel}if(webRtcDesktop.webrtc){try{webRtcDesktop.webrtc.close()}catch(a){}try{webRtcDesktop.webrtc.removeAllListeners("connected")}catch(a){}try{webRtcDesktop.webrtc.removeAllListeners("disconnected")}catch(a){}try{webRtcDesktop.webrtc.removeAllListeners("dataChannel")}catch(a){}delete webRtcDesktop.webrtc}if(webRtcDesktop.kvm){try{webRtcDesktop.kvm.end()}catch(a){}delete webRtcDesktop.kvm}webRtcDesktop=null}function kvmSetData(a){osamtstack.IPS_KVMRedirectionSettingData_DataChannelWrite(Buffer.from(a).toString("base64"),function(){})}function startLmsWsmanResponse(d,b,c,e){if(e==600){console.log("ERROR: Unable to connect to Intel(R) AMT.")}else{if(e!=200){console.log("ERROR: Unable to get object from Intel(R) AMT, status = "+e+".")}else{var a=c.CIM_SoftwareIdentity.responses;if(a.length>0){var f=getInstance(a,"AMT")["VersionString"];amtversion=parseInt(f.split(".")[0]);amtversionmin=parseInt(f.split(".")[1])}}}}function processLmsControlData(b){if(b.length<2){return}var a=b.readUInt16LE(0);switch(a){case 1:getAmtInfo(function(c,d){c.LoginMode=2;d.write(Buffer.concat([Buffer.from("0100","hex"),Buffer.from(JSON.stringify(c))]))},this);break;case 2:if(b.length<6){break}amtMei.unprovision(b.readUInt32LE(2),function(e,d){var c=Buffer.alloc(6);c.writeUInt16LE(2,0);c.writeUInt32LE(e,2);d.write(c)},this);break;case 3:amtMei.getLocalSystemAccount(function(c,d){d.write(Buffer.concat([Buffer.from("030000000000","hex"),c.raw]))},this);break;case 4:amtMei.startConfiguration(function(e,d){var c=Buffer.alloc(6);c.writeUInt16LE(7,0);c.writeUInt32LE(e,2);d.write(c)},this);break;case 5:amtMei.stopConfiguration(function(e,d){var c=Buffer.alloc(6);c.writeUInt16LE(7,0);c.writeUInt32LE(e,2);d.write(c)},this);break;case 6:amtMei.openUserInitiatedConnection(function(e,d){var c=Buffer.alloc(6);c.writeUInt16LE(7,0);c.writeUInt32LE(e,2);d.write(c)},this);break;case 7:amtMei.closeUserInitiatedConnection(function(e,d){var c=Buffer.alloc(6);c.writeUInt16LE(7,0);c.writeUInt32LE(e,2);d.write(c)},this);break;case 8:amtMei.getRemoteAccessConnectionStatus(function(e,d){var c=Buffer.alloc(6);c.writeUInt16LE(8,0);c.writeUInt32LE(e.status,2);d.write(Buffer.concat([c,e.raw]))},this);break;default:break}}function startRouter(){tcpserver=net.createServer(OnTcpClientConnected);tcpserver.on("error",function(a){console.log("ERROR: "+JSON.stringify(a));exit(0);return});tcpserver.listen(settings.localPort,function(){if(settings.remoteName==null){console.log("Redirecting local port "+settings.localPort+" to remote port "+settings.remotePort+".")}else{console.log("Redirecting local port "+settings.localPort+" to "+settings.remoteName+":"+settings.remotePort+".")}console.log("Press ctrl-c to exit.")})}function OnTcpClientConnected(a){try{debug(1,"Client connected");a.on("end",function(){disconnectTunnel(this,this.websocket,"Client closed")});a.pause();try{options=http.parseUri(settings.serverUrl+"?user="+settings.username+"&pass="+settings.password+"&nodeid="+settings.remoteNodeId+"&tcpport="+settings.remotePort)}catch(b){console.log('Unable to parse "serverUrl".');process.exit(1);return}options.checkServerIdentity=onVerifyServer;options.rejectUnauthorized=false;a.websocket=http.request(options);a.websocket.tcp=a;a.websocket.tunneling=false;a.websocket.upgrade=OnWebSocket;a.websocket.on("error",function(c){console.log("ERROR: "+JSON.stringify(c))});a.websocket.end()}catch(b){debug(2,b)}}function disconnectTunnel(c,d,b){if(d!=null){try{d.end()}catch(a){debug(2,a)}}if(c!=null){try{c.end()}catch(a){debug(2,a)}}debug(1,"Tunnel disconnected: "+b)}function OnWebSocket(b,c,a){debug(1,"Websocket connected");c.on("data",function(d){if(this.parent.tunneling==false){d=d.toString();if(d=="c"){this.parent.tunneling=true;this.pipe(this.parent.tcp);this.parent.tcp.pipe(this);debug(1,"Tunnel active")}else{if((d.length>6)&&(d.substring(0,6)=="error:")){console.log(d.substring(6));disconnectTunnel(this.tcp,this,d.substring(6))}}}});c.on("error",function(d){disconnectTunnel(this.tcp,this,"Websocket error")});c.on("close",function(d){disconnectTunnel(this.tcp,this,"Websocket closed")});c.parent=this}function discoverMeshServer(){console.log("Looking for server...");discoveryInterval=setInterval(discoverMeshServerOnce,5000);discoverMeshServerOnce()}function discoverMeshServerOnce(){var f=os.networkInterfaces();for(var a in f){if(f.hasOwnProperty(a)){for(var d=0;d0)?"":"Content-Encoding:gzipContent-Type:text/html"+((e!=null)?(""+e+""):"")+"";var a=((b.length-g)>(7000-d.length))?(7000-d.length):(b.length-g);h.write(Buffer.concat([new Buffer(d),b.slice(g,g+a)]));g+=a;h.end()}function verifyStorage(c,a,b){var d=digest.request({protocol:settings.protocol,method:"GET",host:settings.hostname,path:("/amt-storage/"+c),port:settings.localport});d.on("error",function(f){console.log("Verify error occured: "+JSON.stringify(f));if(b!=null){b(null)}});d.on("response",function(e){e.ptr=0;e.ok=true;e.on("data",function(f){if(f.toString("hex")!=a.slice(e.ptr,e.ptr+f.length).toString("hex")){e.ok=false;console.log("Verifiy failed ("+e.ptr+", "+f.length+").")}e.ptr+=f.length});e.on("end",function(){if(b!=null){b(e.ok)}})});d.end()}function deleteStorage(b,a,c){var d=digest.request({protocol:settings.protocol,method:"DELETE",host:settings.hostname,path:"/amt-storage/"+b,port:settings.localport});d.on("error",function(f){if((f=="Error: Socket was unexpectedly closed")&&(c!=true)){deleteStorage(b,a,true)}else{if(a!=null){if(f.statusCode){a(f.statusCode)}else{a(null)}}}});d.on("response",function(e){if(a!=null){a(e.statusCode)}});d.end()}function parseUrlArguments(d){var c={},e=d.split("?");if(e.length<2){return c}e=e[1].split("&");for(var a in e){var b=e[a].indexOf("=");if(b>0){c[e[a].substring(0,b).toLowerCase()]=e[a].substring(b+1)}}return c}function removeItemFromArray(a,b){var c=a.indexOf(b);if(c!==-1){a.splice(c,1)}}var serviceName=null;var serviceOpSpecified=0;var serviceInstall=0;for(var i in process.argv){if(process.argv[i].toLowerCase()=="install"){serviceInstall=1}else{if(process.argv[i].toLowerCase()=="uninstall"){serviceInstall=-1}}if((process.argv[i].toLowerCase()=="microlms")||(process.argv[i].toLowerCase()=="amtlms")||(process.argv[i].toLowerCase()=="lms")){serviceName="MicroLMS";break}if((process.argv[i].toLowerCase()=="meshcommander")||(process.argv[i].toLowerCase()=="commander")){serviceName="MeshCommander";break}}if(serviceName==null){for(var i in process.argv){if((process.argv[i].toLowerCase()=="install")||(process.argv[i].toLowerCase()=="uninstall")){console.log("In order to install/uninstall, a service type must be specified.");process.exit()}}if(process.execPath.includes("MicroLMS")){serviceName="MicroLMS"}else{if(process.execPath.includes("MeshCommander")){serviceName="MeshCommander"}else{serviceName="not_a_service"}}}if(serviceInstall==0){run(process.argv)}else{var serviceHost=require("service-host");var meshcmdService=new serviceHost({name:serviceName,startType:"AUTO_START"});meshcmdService.on("serviceStart",function onStart(){console.setDestination(console.Destinations.DISABLED);if(process.execPath.includes("MicroLMS")){run([process.execPath,"microlms"])}else{if(process.execPath.includes("MeshCommander")){run([process.execPath,"meshcommander"])}else{console.log("Aborting Service Start, because unknown binary: "+process.execPath);process.exit(1)}}});meshcmdService.on("serviceStop",function onStop(){console.log("Stopping service");process.exit()});meshcmdService.on("normalStart",function onNormalStart(){try{run(process.argv)}catch(a){console.log("ERROR: "+a)}});meshcmdService.run()}; \ No newline at end of file diff --git a/agents/meshcore.js b/agents/meshcore.js index 8ebf7358..8a842b7e 100644 --- a/agents/meshcore.js +++ b/agents/meshcore.js @@ -88,16 +88,13 @@ function createMeshCore(agent) { var net = require('net'); var fs = require('fs'); var rtc = require('ILibWebRTC'); + var amt = null; var processManager = require('process-manager'); - var amtMei = null, amtLms = null, amtLmsState = 0; - var amtMeiConnected = 0, amtMeiTmpState = null; var wifiScannerLib = null; var wifiScanner = null; var networkMonitor = null; var amtscanner = null; var nextTunnelIndex = 1; - var oswsstack = null; - var osamtstack = null; var amtPolicy = null; // If we are running in Duktape, agent will be null @@ -165,33 +162,25 @@ function createMeshCore(agent) { if (mesh.isControlChannelConnected) { mesh.SendCommand({ "action": "smbios", "value": SMBiosTablesRaw }); } // If SMBios tables say that AMT is present, try to connect MEI - if (SMBiosTables.amtInfo && (SMBiosTables.amtInfo.AMT == true)) { resetMei(); } + if (SMBiosTables.amtInfo && (SMBiosTables.amtInfo.AMT == true)) { + var amtmodule = require('amt-manage'); + amt = new amtmodule(mesh, db, true); + amt.onStateChange = function (state) { if (state == 2) { sendPeriodicServerUpdate(1); } } + if (amtPolicy != null) { amt.setPolicy(amtPolicy); } + amt.start(); + } } }); } - } catch (ex) { sendConsoleText(ex); } + } catch (ex) { sendConsoleText("ex1: " + ex); } // Try to load up the WIFI scanner try { var wifiScannerLib = require('wifi-scanner'); wifiScanner = new wifiScannerLib(); - wifiScanner.on('accessPoint', function (data) { sendConsoleText(data); }); + wifiScanner.on('accessPoint', function (data) { sendConsoleText("wifiScanner: " + data); }); } catch (ex) { wifiScannerLib = null; wifiScanner = null; } - // Try to load Intel AMT policy - try { amtPolicy = JSON.parse(db.Get('amtPolicy')); } catch (ex) { amtPolicy = null; } - - // Try to load up the MEI module - function resetMei() { - try { - var amtMeiLib = require('amt-mei'); - amtMei = new amtMeiLib(); - amtMei.on('error', function (e) { amtMeiLib = null; amtMei = null; amtMeiConnected = -1; sendConsoleText('MEI Error.'); }); - amtMeiConnected = 2; - sendPeriodicServerUpdate(1); - } catch (ex) { amtMeiLib = null; amtMei = null; amtMeiConnected = -1; } - } - // Get our location (lat/long) using our public IP address var getIpLocationDataExInProgress = false; var getIpLocationDataExCounts = [0, 0]; @@ -459,7 +448,7 @@ function createMeshCore(agent) { case 'pskill': { // Kill a process if (data.value) { - try { process.kill(data.value); } catch (e) { sendConsoleText(JSON.stringify(e)); } + try { process.kill(data.value); } catch (e) { sendConsoleText("pskill: " + JSON.stringify(e)); } } break; } @@ -528,6 +517,7 @@ function createMeshCore(agent) { // Store the latest Intel AMT policy amtPolicy = data.amtPolicy; if (data.amtPolicy != null) { db.Put('amtPolicy', JSON.stringify(data.amtPolicy)); } else { db.Put('amtPolicy', null); } + if (amt != null) { amt.setPolicy(amtPolicy); } break; } case 'getScript': { @@ -1160,20 +1150,22 @@ function createMeshCore(agent) { break; } case 'amtreset': { - resetMei(); - resetMicroLms(); - response = 'Done.'; + if (amt != null) { amt.reset(); response = 'Done.'; } + break; + } + case 'amtlmsreset': { + if (amt != null) { amt.lmsreset(); response = 'Done.'; } break; } case 'amtccm': { - if (amtMei == null) { response = 'Intel AMT not supported.'; } else { + if (amt == null) { response = 'Intel AMT not supported.'; } else { if (args['_'].length != 1) { response = 'Proper usage: amtccm (adminPassword)'; } // Display usage - else { activeToCCM(args['_'][0]); } + else { amt.setPolicy({ type: 0 }); amt.activeToCCM(args['_'][0]); } } break; } case 'amtdeactivate': { - if (amtMei == null) { response = 'Intel AMT not supported.'; } else { deactivateCCM(); } + if (amt == null) { response = 'Intel AMT not supported.'; } else { amt.setPolicy({ type: 0 }); amt.deactivateCCM(); } break; } case 'amtpolicy': { @@ -1267,7 +1259,7 @@ function createMeshCore(agent) { } case 'info': { // Return information about the agent and agent core module response = 'Current Core: ' + meshCoreObj.value + '.\r\nAgent Time: ' + Date() + '.\r\nUser Rights: 0x' + rights.toString(16) + '.\r\nPlatform: ' + process.platform + '.\r\nCapabilities: ' + meshCoreObj.caps + '.\r\nServer URL: ' + mesh.ServerUrl + '.'; - if (amtLmsState >= 0) { response += '\r\nBuilt-in LMS: ' + ['Disabled', 'Connecting..', 'Connected'][amtLmsState] + '.'; } + if (amt != null) { response += '\r\nBuilt-in LMS: ' + ['Disabled', 'Connecting..', 'Connected'][amt.lmsstate] + '.'; } if (meshCoreObj.osdesc) { response += '\r\nOS: ' + meshCoreObj.osdesc + '.'; } response += '\r\nModules: ' + addedModules.join(', ') + '.'; response += '\r\nServer Connection: ' + mesh.isControlChannelConnected + ', State: ' + meshServerConnectionState + '.'; @@ -1487,11 +1479,13 @@ function createMeshCore(agent) { break; } case 'amt': { // Show Intel AMT status - getAmtInfo(function (state) { - var resp = 'Intel AMT not detected.'; - if (state != null) { resp = objToString(state, 0, ' ', true); } - sendConsoleText(resp, sessionid); - }); + if (amt != null) { + amt.getAmtInfo(function (state) { + var resp = 'Intel AMT not detected.'; + if (state != null) { resp = objToString(state, 0, ' ', true); } + sendConsoleText(resp, sessionid); + }); + } break; } case 'netinfo': { // Show network interface information @@ -1646,9 +1640,9 @@ function createMeshCore(agent) { if (meshServerConnectionState == 0) return; // Not connected to server, do nothing. if (!flags) { flags = 0xFFFFFFFF; } - if (flags & 1) { + if ((flags & 1) && (amt != null)) { // If we have a connected MEI, get Intel ME information - getAmtInfo(function (meinfo) { + amt.getAmtInfo(function (meinfo) { try { if (meinfo == null) return; var intelamt = {}, p = false; @@ -1675,59 +1669,6 @@ function createMeshCore(agent) { } } - // Get Intel AMT information using MEI - function getAmtInfo(func) { - if (amtMei == null || amtMeiConnected != 2) { if (func != null) { func(null); } return; } - try { - amtMeiTmpState = { Flags: 0 }; // Flags: 1=EHBC, 2=CCM, 4=ACM - amtMei.getProtocolVersion(function (result) { if (result != null) { amtMeiTmpState.MeiVersion = result; } }); - amtMei.getVersion(function (result) { if (result) { amtMeiTmpState.Versions = {}; for (var version in result.Versions) { amtMeiTmpState.Versions[result.Versions[version].Description] = result.Versions[version].Version; } } }); - amtMei.getProvisioningMode(function (result) { if (result) { amtMeiTmpState.ProvisioningMode = result.mode; } }); - amtMei.getProvisioningState(function (result) { if (result) { amtMeiTmpState.ProvisioningState = result.state; } }); - amtMei.getEHBCState(function (result) { if ((result != null) && (result.EHBC == true)) { amtMeiTmpState.Flags += 1; } }); - amtMei.getControlMode(function (result) { if (result != null) { if (result.controlMode == 1) { amtMeiTmpState.Flags += 2; } if (result.controlMode == 2) { amtMeiTmpState.Flags += 4; } } }); - //amtMei.getMACAddresses(function (result) { if (result) { amtMeiTmpState.mac = result; } }); - amtMei.getLanInterfaceSettings(0, function (result) { if (result) { amtMeiTmpState.net0 = result; } }); - amtMei.getLanInterfaceSettings(1, function (result) { if (result) { amtMeiTmpState.net1 = result; } }); - amtMei.getUuid(function (result) { if ((result != null) && (result.uuid != null)) { amtMeiTmpState.UUID = result.uuid; } }); - amtMei.getDnsSuffix(function (result) { if (result != null) { amtMeiTmpState.dns = result; } if (func != null) { func(amtMeiTmpState); } }); - } catch (e) { if (func != null) { func(null); } return; } - } - - // Called on MicroLMS Intel AMT user notification - function handleAmtNotification(notifyMsg) { - if ((notifyMsg == null) || (notifyMsg.Body == null) || (notifyMsg.Body.MessageID == null) || (notifyMsg.Body.MessageArguments == null)) return null; - var amtMessage = notifyMsg.Body.MessageID, amtMessageArg = notifyMsg.Body.MessageArguments[0], notify = null; - - switch (amtMessage) { - case 'iAMT0050': { if (amtMessageArg == '48') { notify = 'Intel® AMT Serial-over-LAN connected'; } else if (amtMessageArg == '49') { notify = 'Intel® AMT Serial-over-LAN disconnected'; } break; } // SOL - case 'iAMT0052': { if (amtMessageArg == '1') { notify = 'Intel® AMT KVM connected'; } else if (amtMessageArg == '2') { notify = 'Intel® AMT KVM disconnected'; } break; } // KVM - default: { break; } - } - - // Send to the entire mesh, no sessionid or userid specified. - if (notify != null) { mesh.SendCommand({ "action": "msg", "type": "notify", "value": notify, "tag": "general" }); } - } - - function resetMicroLms() { - // Launch LMS - try { - var lme_heci = require('amt-lme'); - amtLmsState = 1; - amtLms = new lme_heci(); - amtLms.on('error', function (e) { amtLmsState = 0; amtLms = null; sendConsoleText('LMS Error.'); obj.setupMeiOsAdmin(null, 1); }); - amtLms.on('connect', function () { amtLmsState = 2; obj.setupMeiOsAdmin(null, 2); }); - //amtLms.on('bind', function (map) { }); - amtLms.on('notify', function (data, options, str, code) { - if (code == 'iAMT0052-3') { - obj.kvmGetData(); - } else { - //if (str != null) { sendConsoleText('Intel AMT LMS: ' + str); } - handleAmtNotification(data); - } - }); - } catch (e) { amtLmsState = -1; amtLms = null; } - } // Starting function obj.start = function () { @@ -1739,7 +1680,7 @@ function createMeshCore(agent) { //var args = parseArgs(process.argv); //console.log(args); - resetMicroLms(); + //resetMicroLms(); // Setup logged in user monitoring (THIS IS BROKEN IN WIN7) try { @@ -1778,323 +1719,6 @@ function createMeshCore(agent) { s.data = onWebSocketData; } - - // - // KVM Data Channel - // - - obj.setupMeiOsAdmin = function (func, state) { - if ((amtMei == null) || (amtMeiConnected != 2)) { return; } // If there is no MEI, don't bother with this. - amtMei.getLocalSystemAccount(function (x) { - if (x == null) return; - var transport = require('amt-wsman-duk'); - var wsman = require('amt-wsman'); - var amt = require('amt'); - oswsstack = new wsman(transport, '127.0.0.1', 16992, x.user, x.pass, false); - obj.osamtstack = new amt(oswsstack); - if (func) { func(state); } - //var AllWsman = "CIM_SoftwareIdentity,IPS_SecIOService,IPS_ScreenSettingData,IPS_ProvisioningRecordLog,IPS_HostBasedSetupService,IPS_HostIPSettings,IPS_IPv6PortSettings".split(','); - //obj.osamtstack.BatchEnum(null, AllWsman, startLmsWsmanResponse, null, true); - //************************************* - // Setup KVM data channel if this is Intel AMT 12 or above - amtMei.getVersion(function (x) { - if (x == null) return; - var amtver = null; - try { for (var i in x.Versions) { if (x.Versions[i].Description == 'AMT') amtver = parseInt(x.Versions[i].Version.split('.')[0]); } } catch (e) { } - if ((amtver != null) && (amtver >= 12)) { - obj.kvmGetData('skip'); // Clear any previous data, this is a dummy read to about handling old data. - obj.kvmTempTimer = setInterval(function () { obj.kvmGetData(); }, 2000); // Start polling for KVM data. - obj.kvmSetData(JSON.stringify({ action: 'restart', ver: 1 })); // Send a restart command to advise the console if present that MicroLMS just started. - } - }); - }); - } - - obj.kvmGetData = function (tag) { - obj.osamtstack.IPS_KVMRedirectionSettingData_DataChannelRead(obj.kvmDataGetResponse, tag); - } - - obj.kvmDataGetResponse = function (stack, name, response, status, tag) { - if ((tag != 'skip') && (status == 200) && (response.Body.ReturnValue == 0)) { - var val = null; - try { val = Buffer.from(response.Body.DataMessage, 'base64').toString(); } catch (e) { return } - if (val != null) { obj.kvmProcessData(response.Body.RealmsBitmap, response.Body.MessageId, val); } - } - } - - var webRtcDesktop = null; - obj.kvmProcessData = function (realms, messageId, val) { - var data = null; - try { data = JSON.parse(val) } catch (e) { } - if ((data != null) && (data.action)) { - if (data.action == 'present') { obj.kvmSetData(JSON.stringify({ action: 'present', ver: 1, platform: process.platform })); } - if (data.action == 'offer') { - webRtcDesktop = {}; - var rtc = require('ILibWebRTC'); - webRtcDesktop.webrtc = rtc.createConnection(); - webRtcDesktop.webrtc.on('connected', function () { }); - webRtcDesktop.webrtc.on('disconnected', function () { obj.webRtcCleanUp(); }); - webRtcDesktop.webrtc.on('dataChannel', function (rtcchannel) { - webRtcDesktop.rtcchannel = rtcchannel; - webRtcDesktop.kvm = mesh.getRemoteDesktopStream(); - webRtcDesktop.kvm.pipe(webRtcDesktop.rtcchannel, { dataTypeSkip: 1, end: false }); - webRtcDesktop.rtcchannel.on('end', function () { obj.webRtcCleanUp(); }); - webRtcDesktop.rtcchannel.on('data', function (x) { obj.kvmCtrlData(this, x); }); - webRtcDesktop.rtcchannel.pipe(webRtcDesktop.kvm, { dataTypeSkip: 1, end: false }); - //webRtcDesktop.kvm.on('end', function () { console.log('WebRTC DataChannel closed2'); obj.webRtcCleanUp(); }); - //webRtcDesktop.rtcchannel.on('data', function (data) { console.log('WebRTC data: ' + data); }); - }); - obj.kvmSetData(JSON.stringify({ action: 'answer', ver: 1, sdp: webRtcDesktop.webrtc.setOffer(data.sdp) })); - } - } - } - - // Polyfill path.join - var path = { - join: function () { - var x = []; - for (var i in arguments) { - var w = arguments[i]; - if (w != null) { - while (w.endsWith('/') || w.endsWith('\\')) { w = w.substring(0, w.length - 1); } - if (i != 0) { while (w.startsWith('/') || w.startsWith('\\')) { w = w.substring(1); } } - x.push(w); - } - } - if (x.length == 0) return '/'; - return x.join('/'); - } - }; - - // Process KVM control channel data - obj.kvmCtrlData = function(channel, cmd) { - if (cmd.length > 0 && cmd.charCodeAt(0) != 123) { - // This is upload data - if (this.fileupload != null) { - cmd = Buffer.from(cmd, 'base64'); - var header = cmd.readUInt32BE(0); - if ((header == 0x01000000) || (header == 0x01000001)) { - fs.writeSync(this.fileupload.fp, cmd.slice(4)); - channel.write({ action: 'upload', sub: 'ack', reqid: this.fileupload.reqid }); - if (header == 0x01000001) { fs.closeSync(this.fileupload.fp); this.fileupload = null; } // Close the file - } - } - return; - } - //console.log('KVM Ctrl Data', cmd); - //sendConsoleText('KVM Ctrl Data: ' + cmd); - - try { cmd = JSON.parse(cmd); } catch (ex) { console.error('Invalid JSON: ' + cmd); return; } - if ((cmd.path != null) && (process.platform != 'win32') && (cmd.path[0] != '/')) { cmd.path = '/' + cmd.path; } // Add '/' to paths on non-windows - switch (cmd.action) { - case 'ping': { - // This is a keep alive - channel.write({ action: 'pong' }); - break; - } - case 'lock': { - // Lock the current user out of the desktop - if (process.platform == 'win32') { var child = require('child_process'); child.execFile(process.env['windir'] + '\\system32\\cmd.exe', ['/c', 'RunDll32.exe user32.dll,LockWorkStation'], { type: 1 }); } - break; - } - case 'ls': { - /* - // Close the watcher if required - var samepath = ((this.httprequest.watcher != undefined) && (cmd.path == this.httprequest.watcher.path)); - if ((this.httprequest.watcher != undefined) && (samepath == false)) { - //console.log('Closing watcher: ' + this.httprequest.watcher.path); - //this.httprequest.watcher.close(); // TODO: This line causes the agent to crash!!!! - delete this.httprequest.watcher; - } - */ - - // Send the folder content to the browser - var response = getDirectoryInfo(cmd.path); - if (cmd.reqid != undefined) { response.reqid = cmd.reqid; } - channel.write(response); - - /* - // Start the directory watcher - if ((cmd.path != '') && (samepath == false)) { - var watcher = fs.watch(cmd.path, onFileWatcher); - watcher.tunnel = this.httprequest; - watcher.path = cmd.path; - this.httprequest.watcher = watcher; - //console.log('Starting watcher: ' + this.httprequest.watcher.path); - } - */ - break; - } - case 'mkdir': { - // Create a new empty folder - fs.mkdirSync(cmd.path); - break; - } - case 'rm': { - // Remove many files or folders - for (var i in cmd.delfiles) { - var fullpath = path.join(cmd.path, cmd.delfiles[i]); - try { fs.unlinkSync(fullpath); } catch (e) { console.log(e); } - } - break; - } - case 'rename': { - // Rename a file or folder - try { fs.renameSync(path.join(cmd.path, cmd.oldname), path.join(cmd.path, cmd.newname)); } catch (e) { console.log(e); } - break; - } - case 'download': { - // Download a file, to browser - var sendNextBlock = 0; - if (cmd.sub == 'start') { // Setup the download - if (this.filedownload != null) { channel.write({ action: 'download', sub: 'cancel', id: this.filedownload.id }); delete this.filedownload; } - this.filedownload = { id: cmd.id, path: cmd.path, ptr: 0 } - try { this.filedownload.f = fs.openSync(this.filedownload.path, 'rbN'); } catch (e) { channel.write({ action: 'download', sub: 'cancel', id: this.filedownload.id }); delete this.filedownload; } - if (this.filedownload) { channel.write({ action: 'download', sub: 'start', id: cmd.id }); } - } else if ((this.filedownload != null) && (cmd.id == this.filedownload.id)) { // Download commands - if (cmd.sub == 'startack') { sendNextBlock = 8; } else if (cmd.sub == 'stop') { delete this.filedownload; } else if (cmd.sub == 'ack') { sendNextBlock = 1; } - } - // Send the next download block(s) - while (sendNextBlock > 0) { - sendNextBlock--; - var buf = Buffer.alloc(4096); - var len = fs.readSync(this.filedownload.f, buf, 4, 4092, null); - this.filedownload.ptr += len; - if (len < 4092) { buf.writeInt32BE(0x01000001, 0); fs.closeSync(this.filedownload.f); delete this.filedownload; sendNextBlock = 0; } else { buf.writeInt32BE(0x01000000, 0); } - channel.write(buf.slice(0, len + 4).toString('base64')); // Write as Base64 - } - break; - } - case 'upload': { - // Upload a file, from browser - if (cmd.sub == 'start') { // Start the upload - if (this.fileupload != null) { fs.closeSync(this.fileupload.fp); } - if (!cmd.path || !cmd.name) break; - this.fileupload = { reqid: cmd.reqid }; - var filepath = path.join(cmd.path, cmd.name); - try { this.fileupload.fp = fs.openSync(filepath, 'wbN'); } catch (e) { } - if (this.fileupload.fp) { channel.write({ action: 'upload', sub: 'start', reqid: this.fileupload.reqid }); } else { this.fileupload = null; channel.write({ action: 'upload', sub: 'error', reqid: this.fileupload.reqid }); } - } - else if (cmd.sub == 'cancel') { // Stop the upload - if (this.fileupload != null) { fs.closeSync(this.fileupload.fp); this.fileupload = null; } - } - break; - } - case 'copy': { - // Copy a bunch of files from scpath to dspath - for (var i in cmd.names) { - var sc = path.join(cmd.scpath, cmd.names[i]), ds = path.join(cmd.dspath, cmd.names[i]); - if (sc != ds) { try { fs.copyFileSync(sc, ds); } catch (e) { } } - } - break; - } - case 'move': { - // Move a bunch of files from scpath to dspath - for (var i in cmd.names) { - var sc = path.join(cmd.scpath, cmd.names[i]), ds = path.join(cmd.dspath, cmd.names[i]); - if (sc != ds) { try { fs.copyFileSync(sc, ds); fs.unlinkSync(sc); } catch (e) { } } - } - break; - } - default: { - console.log('Invalid KVM command', cmd); - sendConsoleText('Invalid KVM command: ' + cmd); - break; - } - } - } - - obj.webRtcCleanUp = function () { - sendConsoleText('webRtcCleanUp'); - if (webRtcDesktop == null) return; - if (webRtcDesktop.rtcchannel) { - try { webRtcDesktop.rtcchannel.close(); } catch (e) { } - try { webRtcDesktop.rtcchannel.removeAllListeners('data'); } catch (e) { } - try { webRtcDesktop.rtcchannel.removeAllListeners('end'); } catch (e) { } - delete webRtcDesktop.rtcchannel; - } - if (webRtcDesktop.webrtc) { - try { webRtcDesktop.webrtc.close(); } catch (e) { } - try { webRtcDesktop.webrtc.removeAllListeners('connected'); } catch (e) { } - try { webRtcDesktop.webrtc.removeAllListeners('disconnected'); } catch (e) { } - try { webRtcDesktop.webrtc.removeAllListeners('dataChannel'); } catch (e) { } - delete webRtcDesktop.webrtc; - } - if (webRtcDesktop.kvm) { - try { webRtcDesktop.kvm.end(); } catch (e) { } - delete webRtcDesktop.kvm; - } - webRtcDesktop = null; - } - - obj.kvmSetData = function(x) { - obj.osamtstack.IPS_KVMRedirectionSettingData_DataChannelWrite(Buffer.from(x).toString('base64'), function () { }); - } - - // Delete a directory with a files and directories within it - function deleteFolderRecursive(path, rec) { - if (fs.existsSync(path)) { - if (rec == true) { - fs.readdirSync(obj.path.join(path, '*')).forEach(function (file, index) { - var curPath = obj.path.join(path, file); - if (fs.statSync(curPath).isDirectory()) { // recurse - deleteFolderRecursive(curPath, true); - } else { // delete file - fs.unlinkSync(curPath); - } - }); - } - fs.unlinkSync(path); - } - }; - - - // - // Deactivate Intel AMT CCM - // - - // When called, this will use MEI to deactivate Intel AMT when it's in CCM mode. Simply calls "unprovision" on MEI and checks the return code. - function deactivateCCM() { - amtMei.unprovision(1, function (status) { if (status == 0) { sendConsoleText('Success deactivating Intel AMT CCM.'); } else { sendConsoleText('Intel AMT CCM deactivation error: ' + status); } }); - } - - - // - // Activate Intel AMT to CCM - // - - function activeToCCM(adminpass) { - sendConsoleText('Trying to get local account info...'); - amtMei.getLocalSystemAccount(function (x) { - if (x.user && x.pass) { - sendConsoleText('Intel AMT local account info: User=' + x.user + ', Pass=' + x.pass + '.'); - var transport = require('amt-wsman-duk'); - var wsman = require('amt-wsman'); - var amt = require('amt'); - oswsstack = new wsman(transport, '127.0.0.1', 16992, x.user, x.pass, false); - osamtstack = new amt(oswsstack); - sendConsoleText('Trying to get Intel AMT activation information...'); - osamtstack.BatchEnum(null, ['*AMT_GeneralSettings', '*IPS_HostBasedSetupService'], activeToCCMEx2, adminpass); - } else { - sendConsoleText('Unable to get $$OsAdmin password.'); - } - }); - } - - function activeToCCMEx2(stack, name, responses, status, adminpass) { - if (status != 200) { sendConsoleText('Failed to fetch activation information, status ' + status); } - else if (responses['IPS_HostBasedSetupService'].response['AllowedControlModes'].length != 2) { sendConsoleText('Client control mode activation not allowed'); } - else { stack.IPS_HostBasedSetupService_Setup(2, md5hex('admin:' + responses['AMT_GeneralSettings'].response['DigestRealm'] + ':' + adminpass).substring(0, 32), null, null, null, null, activeToCCMEx3); } - } - - function activeToCCMEx3(stack, name, responses, status) { - if (status != 200) { sendConsoleText('Failed to activate, status ' + status); } - else if (responses.Body.ReturnValue != 0) { sendConsoleText('Client control mode activation failed: ' + responses.Body.ReturnValueStr); } - else { sendConsoleText('Intel AMT CCM activation success'); } - } - - function md5hex(str) { return require('MD5Stream').create().syncHash(str).toString('hex'); } - return obj; } diff --git a/agents/meshcore.min.js b/agents/meshcore.min.js deleted file mode 100644 index 17700bbf..00000000 --- a/agents/meshcore.min.js +++ /dev/null @@ -1 +0,0 @@ -process.on("uncaughtException",function(a){require("MeshAgent").SendCommand({action:"msg",type:"console",value:"uncaughtException1: "+a})});var MESHRIGHT_EDITMESH=1;var MESHRIGHT_MANAGEUSERS=2;var MESHRIGHT_MANAGECOMPUTERS=4;var MESHRIGHT_REMOTECONTROL=8;var MESHRIGHT_AGENTCONSOLE=16;var MESHRIGHT_SERVERFILES=32;var MESHRIGHT_WAKEDEVICE=64;var MESHRIGHT_SETNOTES=128;var MESHRIGHT_REMOTEVIEW=256;var MESHRIGHT_NOTERMINAL=512;var MESHRIGHT_NOFILES=1024;var MESHRIGHT_NOAMT=2048;function createMeshCore(agent){var obj={};var meshCoreObj={action:"coreinfo",value:"MeshCore v6",caps:14};try{require("os").name().then(function(v){meshCoreObj.osdesc=v})}catch(ex){}var meshServerConnectionState=0;var tunnels={};var lastMeInfo=null;var lastNetworkInfo=null;var lastPublicLocationInfo=null;var selfInfoUpdateTimer=null;var http=require("http");var net=require("net");var fs=require("fs");var rtc=require("ILibWebRTC");var processManager=require("process-manager");var amtMei=null,amtLms=null,amtLmsState=0;var amtMeiConnected=0,amtMeiTmpState=null;var wifiScannerLib=null;var wifiScanner=null;var networkMonitor=null;var amtscanner=null;var nextTunnelIndex=1;var oswsstack=null;var osamtstack=null;var amtPolicy=null;if(agent==null){db=require("SimpleDataStore").Shared();sha=require("SHA256Stream");mesh=require("MeshAgent");childProcess=require("child_process");if(mesh.hasKVM==1){try{if((process.platform=="win32")||(process.platform=="darwin")||(require("monitor-info").kvm_x11_support)){meshCoreObj.caps|=1}}catch(ex){}}}else{meshCoreObj.value+="-NodeJS";meshCoreObj.caps=8;mesh=agent.getMeshApi()}try{var AMTScannerModule=require("amt-scanner");amtscanner=new AMTScannerModule()}catch(ex){amtscanner=null}var SMBiosTables=null;var SMBiosTablesRaw=null;try{var SMBiosModule=null;try{SMBiosModule=require("smbios")}catch(ex){}if(SMBiosModule!=null){SMBiosModule.get(function(data){if(data!=null){SMBiosTablesRaw=data;SMBiosTables=require("smbios").parse(data);if(mesh.isControlChannelConnected){mesh.SendCommand({action:"smbios",value:SMBiosTablesRaw})}if(SMBiosTables.amtInfo&&(SMBiosTables.amtInfo.AMT==true)){resetMei()}}})}}catch(ex){sendConsoleText(ex)}try{var wifiScannerLib=require("wifi-scanner");wifiScanner=new wifiScannerLib();wifiScanner.on("accessPoint",function(data){sendConsoleText(data)})}catch(ex){wifiScannerLib=null;wifiScanner=null}try{amtPolicy=JSON.parse(db.Get("amtPolicy"))}catch(ex){amtPolicy=null}function resetMei(){try{var amtMeiLib=require("amt-mei");amtMei=new amtMeiLib();amtMei.on("error",function(e){amtMeiLib=null;amtMei=null;amtMeiConnected=-1;sendConsoleText("MEI Error.")});amtMeiConnected=2;sendPeriodicServerUpdate(1)}catch(ex){amtMeiLib=null;amtMei=null;amtMeiConnected=-1}}var getIpLocationDataExInProgress=false;var getIpLocationDataExCounts=[0,0];function getIpLocationDataEx(func){if(getIpLocationDataExInProgress==true){return false}try{getIpLocationDataExInProgress=true;getIpLocationDataExCounts[0]++;var options=http.parseUri("http://ipinfo.io/json");options.method="GET";http.request(options,function(resp){if(resp.statusCode==200){var geoData="";resp.data=function(geoipdata){geoData+=geoipdata};resp.end=function(){var location=null;try{if(typeof geoData=="string"){var result=JSON.parse(geoData);if(result.ip&&result.loc){location=result}}}catch(e){}if(func){getIpLocationDataExCounts[1]++;func(location)}}}else{func(null)}getIpLocationDataExInProgress=false}).end();return true}catch(e){return false}}function clearGatewayMac(str){if(str==null){return null}var x=JSON.parse(str);for(var i in x.netif){if(x.netif[i].gatewaymac){delete x.netif[i].gatewaymac}}return JSON.stringify(x)}function getIpLocationData(func){var publicLocationInfo=db.Get("publicLocationInfo");if(publicLocationInfo!=null){publicLocationInfo=JSON.parse(publicLocationInfo)}if(publicLocationInfo==null){getIpLocationDataEx(function(locationData){if(locationData!=null){publicLocationInfo={};publicLocationInfo.netInfoStr=lastNetworkInfo;publicLocationInfo.locationData=locationData;var x=db.Put("publicLocationInfo",JSON.stringify(publicLocationInfo));if(func){func(locationData)}}else{if(func){func(null)}}})}else{if(clearGatewayMac(publicLocationInfo.netInfoStr)==clearGatewayMac(lastNetworkInfo)){if(func){func(publicLocationInfo.locationData)}}else{getIpLocationDataEx(function(locationData){if(locationData!=null){publicLocationInfo={};publicLocationInfo.netInfoStr=lastNetworkInfo;publicLocationInfo.locationData=locationData;var x=db.Put("publicLocationInfo",JSON.stringify(publicLocationInfo));if(func){func(locationData)}}else{if(func){func(publicLocationInfo.locationData)}}})}}}if(!String.prototype.endsWith){String.prototype.endsWith=function(searchString,position){var subjectString=this.toString();if(typeof position!=="number"||!isFinite(position)||Math.floor(position)!==position||position>subjectString.length){position=subjectString.length}position-=searchString.length;var lastIndex=subjectString.lastIndexOf(searchString,position);return lastIndex!==-1&&lastIndex===position}}obj.path={join:function(){var x=[];for(var i in arguments){var w=arguments[i];if(w!=null){while(w.endsWith("/")||w.endsWith("\\")){w=w.substring(0,w.length-1)}if(i!=0){while(w.startsWith("/")||w.startsWith("\\")){w=w.substring(1)}}x.push(w)}}if(x.length==0){return"/"}return x.join("/")}};function toNumberIfNumber(x){if((typeof x=="string")&&(+parseInt(x)===x)){x=parseInt(x)}return x}function char2hex(i){return(i+256).toString(16).substr(-2).toUpperCase()}function rstr2hex(input){var r="",i;for(i=0;i8){return"[...]"}if(x==undefined){return"[undefined]"}if(typeof x=="string"){if(p==0){return x}return'"'+x+'"'}if(typeof x=="buffer"){return"[buffer]"}if(typeof x!="object"){return x}var r="{"+(ret?"\r\n":" ");for(var i in x){if(i!="_ObjectID"){r+=(addPad(p+2,pad)+i+": "+objToString(x[i],p+2,pad,ret)+(ret?"\r\n":" "))}}return r+addPad(p,pad)+"}"}function addPad(p,ret){var r="";for(var i=0;i2&&x[0]=="-"&&x[1]=="-"){if(current!=null){results[current]=true}current=x.substring(2)}else{if(current!=null){results[current]=toNumberIfNumber(x);current=null}else{results._.push(toNumberIfNumber(x))}}}if(current!=null){results[current]=true}return results}function getServerTargetUrl(path){var x=mesh.ServerUrl;if(x==null){return null}if(path==null){path=""}x=http.parseUri(x);if(x==null){return null}return x.protocol+"//"+x.host+":"+x.port+"/"+path}function getServerTargetUrlEx(url){if(url.substring(0,2)=="*/"){return getServerTargetUrl(url.substring(2))}return url}function sendWakeOnLan(hexMac){var count=0;try{var interfaces=require("os").networkInterfaces();var magic="FFFFFFFFFFFF";for(var x=1;x<=16;++x){magic+=hexMac}var magicbin=Buffer.from(magic,"hex");for(var adapter in interfaces){if(interfaces.hasOwnProperty(adapter)){for(var i=0;i0){sendNextBlock--;var buf=new Buffer(4096);var len=fs.readSync(this.filedownload.f,buf,4,4092,null);this.filedownload.ptr+=len;if(len<4092){buf.writeInt32BE(16777217,0);fs.closeSync(this.filedownload.f);delete this.filedownload;sendNextBlock=0}else{buf.writeInt32BE(16777216,0)}this.write(buf.slice(0,len+4))}break;case"upload":if(this.httprequest.uploadFile!=undefined){fs.closeSync(this.httprequest.uploadFile);this.httprequest.uploadFile=undefined}if(cmd.path==undefined){break}var filepath=cmd.name?obj.path.join(cmd.path,cmd.name):cmd.path;try{this.httprequest.uploadFile=fs.openSync(filepath,"wbN")}catch(e){this.write(new Buffer(JSON.stringify({action:"uploaderror",reqid:cmd.reqid})));break}this.httprequest.uploadFileid=cmd.reqid;if(this.httprequest.uploadFile){this.write(new Buffer(JSON.stringify({action:"uploadstart",reqid:this.httprequest.uploadFileid})))}break;case"copy":for(var i in cmd.names){var sc=obj.path.join(cmd.scpath,cmd.names[i]),ds=obj.path.join(cmd.dspath,cmd.names[i]);if(sc!=ds){try{fs.copyFileSync(sc,ds)}catch(e){}}}break;case"move":for(var i in cmd.names){var sc=obj.path.join(cmd.scpath,cmd.names[i]),ds=obj.path.join(cmd.dspath,cmd.names[i]);if(sc!=ds){try{fs.copyFileSync(sc,ds);fs.unlinkSync(sc)}catch(e){}}}break;default:break}}}}}}}function onTunnelWebRTCControlData(data){if(typeof data!="string"){return}var obj;try{obj=JSON.parse(data)}catch(e){sendConsoleText("Invalid control JSON on WebRTC: "+data);return}if(obj.type=="close"){try{this.close()}catch(e){}try{this.xrtc.close()}catch(e){}}}function onTunnelControlData(data,ws){var obj;if(ws==null){ws=this}if(typeof data=="string"){try{obj=JSON.parse(data)}catch(e){sendConsoleText("Invalid control JSON: "+data);return}}else{if(typeof data=="object"){obj=data}else{return}}if(obj.action){switch(obj.action){case"lock":try{if(process.platform=="win32"){var child=require("child_process");child.execFile(process.env.windir+"\\system32\\cmd.exe",["/c","RunDll32.exe user32.dll,LockWorkStation"],{type:1})}}catch(e){}break;default:break}return}if(obj.type=="close"){try{ws.close()}catch(e){}}else{if(obj.type=="webrtc0"){if(ws.httprequest.protocol==1){if(process.platform=="win32"){ws.httprequest._term.unpipe(ws)}else{ws.httprequest.process.stdout.unpipe(ws);ws.httprequest.process.stderr.unpipe(ws)}}else{if(ws.httprequest.protocol==2){ws.httprequest.desktop.kvm.unpipe(ws)}else{ws.rtcchannel.httprequest=ws.httprequest;ws.rtcchannel.removeAllListeners("data");ws.rtcchannel.on("data",onTunnelData)}}ws.write('{"ctrlChannel":"102938","type":"webrtc1"}')}else{if(obj.type=="webrtc1"){if(ws.httprequest.protocol==1){if(process.platform=="win32"){ws.unpipe(ws.httprequest._term);ws.rtcchannel.pipe(ws.httprequest._term,{dataTypeSkip:1})}else{ws.unpipe(ws.httprequest.process.stdin);ws.rtcchannel.pipe(ws.httprequest.process.stdin,{dataTypeSkip:1})}ws.resume()}else{if(ws.httprequest.protocol==2){ws.unpipe(ws.httprequest.desktop.kvm);try{ws.webrtc.rtcchannel.pipe(ws.httprequest.desktop.kvm,{dataTypeSkip:1,end:false})}catch(e){sendConsoleText("EX2")}ws.resume()}}ws.write('{"ctrlChannel":"102938","type":"webrtc2"}')}else{if(obj.type=="webrtc2"){if(ws.httprequest.protocol==1){if(process.platform=="win32"){ws.httprequest._term.pipe(ws.webrtc.rtcchannel,{dataTypeSkip:1,end:false})}else{ws.httprequest.process.stdout.pipe(ws.webrtc.rtcchannel,{dataTypeSkip:1,end:false});ws.httprequest.process.stderr.pipe(ws.webrtc.rtcchannel,{dataTypeSkip:1,end:false})}}else{if(ws.httprequest.protocol==2){ws.httprequest.desktop.kvm.pipe(ws.webrtc.rtcchannel,{dataTypeSkip:1})}}}else{if(obj.type=="offer"){if(ws.httprequest.protocol==1){return}ws.webrtc=rtc.createConnection();ws.webrtc.websocket=ws;ws.webrtc.on("connected",function(){});ws.webrtc.on("disconnected",function(){});ws.webrtc.on("dataChannel",function(rtcchannel){rtcchannel.xrtc=this;rtcchannel.websocket=this.websocket;this.rtcchannel=rtcchannel;this.websocket.rtcchannel=rtcchannel;this.websocket.rtcchannel.on("data",onTunnelWebRTCControlData);this.websocket.rtcchannel.on("end",function(){if(this.websocket.desktop&&this.websocket.desktop.kvm){this.unpipe(this.websocket.desktop.kvm);this.websocket.httprequest.desktop.kvm.unpipe(this)}});this.websocket.write('{"ctrlChannel":"102938","type":"webrtc0"}')});var sdp=null;try{sdp=ws.webrtc.setOffer(obj.sdp)}catch(ex){}if(sdp!=null){ws.write({type:"answer",ctrlChannel:"102938",sdp:sdp})}}}}}}}var consoleWebSockets={};var consoleHttpRequest=null;function consoleHttpResponse(response){response.data=function(data){sendConsoleText(rstr2hex(buf2rstr(data)),this.sessionid);consoleHttpRequest=null};response.close=function(){sendConsoleText("httprequest.response.close",this.sessionid);consoleHttpRequest=null}}function openUserDesktopUrl(url){var child=null;try{switch(process.platform){case"win32":child=require("child_process").execFile(process.env.windir+"\\system32\\cmd.exe",["/c","start",url],{type:childProcess.SpawnTypes.USER});break;case"linux":child=require("child_process").execFile("/usr/bin/xdg-open",["xdg-open",url],{uid:require("user-sessions").consoleUid()});break;case"darwin":child=require("child_process").execFile("/usr/bin/open",["open",url],{uid:require("user-sessions").consoleUid()});break;default:break}}catch(ex){}return child}function processConsoleCommand(cmd,args,rights,sessionid){try{var response=null;switch(cmd){case"help":response="Available commands: help, info, osinfo,args, print, type, dbget, dbset, dbcompact, eval, parseuri, httpget,\r\nwslist, wsconnect, wssend, wsclose, notify, ls, ps, kill, amt, netinfo, location, power, wakeonlan, scanwifi,\r\nscanamt, setdebug, smbios, rawsmbios, toast, lock, users, sendcaps, openurl, amtreset, amtccm, amtdeactivate,\r\namtpolicy, getscript, getclip, setclip.";break;case"getclip":require("clipboard").read().then(function(str){sendConsoleText(str,sessionid)});break;case"setclip":if(args._.length!=1){response="Proper usage: setclip (text)"}else{require("clipboard")(args._[0]);response="Setting clipboard to: "+args._[0]}break;case"amtreset":resetMei();resetMicroLms();response="Done.";break;case"amtccm":if(amtMei==null){response="Intel AMT not supported."}else{if(args._.length!=1){response="Proper usage: amtccm (adminPassword)"}else{activeToCCM(args._[0])}}break;case"amtdeactivate":if(amtMei==null){response="Intel AMT not supported."}else{deactivateCCM()}break;case"amtpolicy":if(amtPolicy==null){response="No Intel(R) AMT policy."}else{response=JSON.stringify(amtPolicy)}break;case"openurl":if(args._.length!=1){response="Proper usage: openurl (url)"}else{if(openUserDesktopUrl(args._[0])==null){response="Failed."}else{response="Success."}}break;case"users":if(meshCoreObj.users==null){response="Active users are unknown."}else{response="Active Users: "+meshCoreObj.users.join(", ")+"."}require("user-sessions").enumerateUsers().then(function(u){for(var i in u){sendConsoleText(u[i])}});break;case"toast":if(process.platform=="win32"){if(args._.length<1){response='Proper usage: toast "message"'}else{require("toaster").Toast("MeshCentral",args._[0]);response="ok"}}else{response="Only supported on Windows."}break;case"setdebug":if(args._.length<1){response="Proper usage: setdebug (target), 0 = Disabled, 1 = StdOut, 2 = This Console, * = All Consoles, 4 = WebLog, 8 = Logfile"}else{if(args._[0]=="*"){console.setDestination(2)}else{console.setDestination(parseInt(args._[0]),sessionid)}}break;case"ps":processManager.getProcesses(function(plist){var x="";for(var i in plist){x+=i+", "+plist[i].cmd+((plist[i].user)?(", "+plist[i].user):"")+"\r\n"}sendConsoleText(x,sessionid)});break;case"kill":if((args._.length<1)){response="Proper usage: kill [pid]"}else{process.kill(parseInt(args._[0]));response="Killed process "+args._[0]+"."}break;case"smbios":if(SMBiosTables==null){response="SMBios tables not available."}else{response=objToString(SMBiosTables,0," ",true)}break;case"rawsmbios":if(SMBiosTablesRaw==null){response="SMBios tables not available."}else{response="";for(var i in SMBiosTablesRaw){var header=false;for(var j in SMBiosTablesRaw[i]){if(SMBiosTablesRaw[i][j].length>0){if(header==false){response+=("Table type #"+i+((require("smbios").smTableTypes[i]==null)?"":(", "+require("smbios").smTableTypes[i])))+"\r\n";header=true}response+=(" "+SMBiosTablesRaw[i][j].toString("hex"))+"\r\n"}}}}break;case"eval":if(args._.length<1){response='Proper usage: eval "JavaScript code"'}else{response=JSON.stringify(mesh.eval(args._[0]))}break;case"notify":if(args._.length!=1){response='Proper usage: notify "message" [--session]'}else{var notification={action:"msg",type:"notify",value:args._[0],tag:"console"};if(args.session){notification.sessionid=sessionid}mesh.SendCommand(notification);response="ok"}break;case"info":response="Current Core: "+meshCoreObj.value+".\r\nAgent Time: "+Date()+".\r\nUser Rights: 0x"+rights.toString(16)+".\r\nPlatform: "+process.platform+".\r\nCapabilities: "+meshCoreObj.caps+".\r\nServer URL: "+mesh.ServerUrl+".";if(amtLmsState>=0){response+="\r\nBuilt-in LMS: "+["Disabled","Connecting..","Connected"][amtLmsState]+"."}if(meshCoreObj.osdesc){response+="\r\nOS: "+meshCoreObj.osdesc+"."}response+="\r\nModules: "+addedModules.join(", ")+".";response+="\r\nServer Connection: "+mesh.isControlChannelConnected+", State: "+meshServerConnectionState+".";response+="\rlastMeInfo: "+lastMeInfo+".";var oldNodeId=db.Get("OldNodeId");if(oldNodeId!=null){response+="\r\nOldNodeID: "+oldNodeId+"."}if(process.platform!="win32"){response+="\r\nX11 support: "+require("monitor-info").kvm_x11_support+"."}break;case"osinfo":var i=1;if(args._.length>0){i=parseInt(args._[0]);if(i>8){i=8}response="Calling "+i+" times."}for(var j=0;j0){meshCoreObj.osdesc=args._[0];mesh.SendCommand(meshCoreObj);response=JSON.stringify(meshCoreObj)}else{response="Proper usage: sendosdesc [os description]"}break;case"args":response="args "+objToString(args,0," ",true);break;case"print":var r=[];for(var i in args._){r.push(args._[i])}console.log(r.join(" "));response="Message printed on agent console.";break;case"type":if(args._.length==0){response="Proper usage: type (filepath) [maxlength]"}else{var max=4096;if((args._.length>1)&&(typeof args._[1]=="number")){max=args._[1]}if(max>4096){max=4096}var buf=Buffer.alloc(max),fd=fs.openSync(args._[0],"r"),r=fs.readSync(fd,buf,0,max);response=buf.toString();var i=response.indexOf("\n");if((i>0)&&(response[i-1]!="\r")){response=response.split("\n").join("\r\n")}if(r==max){response+="..."}fs.closeSync(fd)}break;case"dbkeys":response=JSON.stringify(db.Keys);break;case"dbget":if(db==null){response="Database not accessible.";break}if(args._.length!=1){response="Proper usage: dbget (key)"}else{response=db.Get(args._[0])}break;case"dbset":if(db==null){response="Database not accessible.";break}if(args._.length!=2){response="Proper usage: dbset (key) (value)"}else{var r=db.Put(args._[0],args._[1]);response="Key set: "+r}break;case"dbcompact":if(db==null){response="Database not accessible.";break}var r=db.Compact();response="Database compacted: "+r;break;case"httpget":if(consoleHttpRequest!=null){response="HTTP operation already in progress."}else{if(args._.length!=1){response="Proper usage: httpget (url)"}else{var options=http.parseUri(args._[0]);options.method="GET";if(options==null){response="Invalid url."}else{try{consoleHttpRequest=http.request(options,consoleHttpResponse)}catch(e){response="Invalid HTTP GET request"}consoleHttpRequest.sessionid=sessionid;if(consoleHttpRequest!=null){consoleHttpRequest.end();response="HTTPGET "+options.protocol+"//"+options.host+":"+options.port+options.path}}}}break;case"wslist":response="";for(var i in consoleWebSockets){var httprequest=consoleWebSockets[i];response+="Websocket #"+i+", "+httprequest.url+"\r\n"}if(response==""){response="no websocket sessions."}break;case"wsconnect":if(args._.length==0){response="Proper usage: wsconnect (url)\r\nFor example: wsconnect wss://localhost:443/meshrelay.ashx?id=abc"}else{var httprequest=null;try{var options=http.parseUri(args._[0]);options.rejectUnauthorized=0;httprequest=http.request(options)}catch(e){response="Invalid HTTP websocket request"}if(httprequest!=null){httprequest.upgrade=onWebSocketUpgrade;httprequest.on("error",function(e){sendConsoleText("ERROR: "+JSON.stringify(e))});var index=1;while(consoleWebSockets[index]){index++}httprequest.sessionid=sessionid;httprequest.index=index;httprequest.url=args._[0];consoleWebSockets[index]=httprequest;response="New websocket session #"+index}}break;case"wssend":if(args._.length==0){response="Proper usage: wssend (socketnumber)\r\n";for(var i in consoleWebSockets){var httprequest=consoleWebSockets[i];response+="Websocket #"+i+", "+httprequest.url+"\r\n"}}else{var i=parseInt(args._[0]);var httprequest=consoleWebSockets[i];if(httprequest!=undefined){httprequest.s.write(args._[1]);response="ok"}else{response="Invalid web socket number"}}break;case"wsclose":if(args._.length==0){response="Proper usage: wsclose (socketnumber)"}else{var i=parseInt(args._[0]);var httprequest=consoleWebSockets[i];if(httprequest!=undefined){if(httprequest.s!=null){httprequest.s.end()}else{httprequest.end()}response="ok"}else{response="Invalid web socket number"}}break;case"tunnels":response="";for(var i in tunnels){response+="Tunnel #"+i+", "+tunnels[i].url+"\r\n"}if(response==""){response="No websocket sessions."}break;case"ls":response="";var xpath="*";if(args._.length>0){xpath=obj.path.join(args._[0],"*")}response="List of "+xpath+"\r\n";var results=fs.readdirSync(xpath);for(var i=0;i0){var r="",pstates=["NotActivated","InActivation","Activated"];for(var i in data){var x=data[i];if(r!=""){r+="\r\n"}r+=x.address+" - Intel AMT v"+x.majorVersion+"."+x.minorVersion;if(x.provisioningState<3){r+=(", "+pstates[x.provisioningState])}if(x.provisioningState==2){r+=(", "+x.openPorts.join(", "))}r+="."}}else{r="No Intel AMT found."}sendConsoleText(r)})}}else{response="Intel AMT scanner module not present."}break;case"modules":response=JSON.stringify(addedModules);break;case"getscript":if(args._.length!=1){response="Proper usage: getscript [scriptNumber]."}else{mesh.SendCommand({action:"getScript",type:args._[0]})}break;default:response='Unknown command "'+cmd+'", type "help" for list of avaialble commands.';break}}catch(e){response="Command returned an exception error: "+e;console.log(e)}if(response!=null){sendConsoleText(response,sessionid)}}function sendConsoleText(text,sessionid){if(typeof text=="object"){text=JSON.stringify(text)}mesh.SendCommand({action:"msg",type:"console",value:text,sessionid:sessionid})}function handleServerConnection(state){meshServerConnectionState=state;if(meshServerConnectionState==0){if(selfInfoUpdateTimer!=null){clearInterval(selfInfoUpdateTimer);selfInfoUpdateTimer=null}lastSelfInfo=null}else{var oldNodeId=db.Get("OldNodeId");if(oldNodeId!=null){mesh.SendCommand({action:"mc1migration",oldnodeid:oldNodeId})}mesh.SendCommand(meshCoreObj);if(SMBiosTablesRaw!=null){mesh.SendCommand({action:"smbios",value:SMBiosTablesRaw})}meInfoStr=null;sendPeriodicServerUpdate()}}var sendNetworkUpdateNagleTimer=null;function sendNetworkUpdateNagle(){if(sendNetworkUpdateNagleTimer!=null){clearTimeout(sendNetworkUpdateNagleTimer);sendNetworkUpdateNagleTimer=null}sendNetworkUpdateNagleTimer=setTimeout(sendNetworkUpdate,5000)}function sendNetworkUpdate(force){sendNetworkUpdateNagleTimer=null;var netInfo=mesh.NetInfo;netInfo.action="netinfo";var netInfoStr=JSON.stringify(netInfo);if((force==true)||(clearGatewayMac(netInfoStr)!=clearGatewayMac(lastNetworkInfo))){mesh.SendCommand(netInfo);lastNetworkInfo=netInfoStr}}function sendPeriodicServerUpdate(flags){if(meshServerConnectionState==0){return}if(!flags){flags=4294967295}if(flags&1){getAmtInfo(function(meinfo){try{if(meinfo==null){return}var intelamt={},p=false;if(meinfo.Versions&&meinfo.Versions.AMT){intelamt.ver=meinfo.Versions.AMT;p=true}if(meinfo.ProvisioningState){intelamt.state=meinfo.ProvisioningState;p=true}if(meinfo.Flags){intelamt.flags=meinfo.Flags;p=true}if(meinfo.OsHostname){intelamt.host=meinfo.OsHostname;p=true}if(meinfo.UUID){intelamt.uuid=meinfo.UUID;p=true}if(p==true){var meInfoStr=JSON.stringify(intelamt);if(meInfoStr!=lastMeInfo){meshCoreObj.intelamt=intelamt;mesh.SendCommand(meshCoreObj);lastMeInfo=meInfoStr}}}catch(ex){}})}if(flags&2){sendNetworkUpdateNagle(false)}}function getAmtInfo(func){if(amtMei==null||amtMeiConnected!=2){if(func!=null){func(null)}return}try{amtMeiTmpState={Flags:0};amtMei.getProtocolVersion(function(result){if(result!=null){amtMeiTmpState.MeiVersion=result}});amtMei.getVersion(function(result){if(result){amtMeiTmpState.Versions={};for(var version in result.Versions){amtMeiTmpState.Versions[result.Versions[version].Description]=result.Versions[version].Version}}});amtMei.getProvisioningMode(function(result){if(result){amtMeiTmpState.ProvisioningMode=result.mode}});amtMei.getProvisioningState(function(result){if(result){amtMeiTmpState.ProvisioningState=result.state}});amtMei.getEHBCState(function(result){if((result!=null)&&(result.EHBC==true)){amtMeiTmpState.Flags+=1}});amtMei.getControlMode(function(result){if(result!=null){if(result.controlMode==1){amtMeiTmpState.Flags+=2}if(result.controlMode==2){amtMeiTmpState.Flags+=4}}});amtMei.getLanInterfaceSettings(0,function(result){if(result){amtMeiTmpState.net0=result}});amtMei.getLanInterfaceSettings(1,function(result){if(result){amtMeiTmpState.net1=result}});amtMei.getUuid(function(result){if((result!=null)&&(result.uuid!=null)){amtMeiTmpState.UUID=result.uuid}});amtMei.getDnsSuffix(function(result){if(result!=null){amtMeiTmpState.dns=result}if(func!=null){func(amtMeiTmpState)}})}catch(e){if(func!=null){func(null)}return}}function handleAmtNotification(notifyMsg){if((notifyMsg==null)||(notifyMsg.Body==null)||(notifyMsg.Body.MessageID==null)||(notifyMsg.Body.MessageArguments==null)){return null}var amtMessage=notifyMsg.Body.MessageID,amtMessageArg=notifyMsg.Body.MessageArguments[0],notify=null;switch(amtMessage){case"iAMT0050":if(amtMessageArg=="48"){notify="Intel® AMT Serial-over-LAN connected"}else{if(amtMessageArg=="49"){notify="Intel® AMT Serial-over-LAN disconnected"}}break;case"iAMT0052":if(amtMessageArg=="1"){notify="Intel® AMT KVM connected"}else{if(amtMessageArg=="2"){notify="Intel® AMT KVM disconnected"}}break;default:break}if(notify!=null){mesh.SendCommand({action:"msg",type:"notify",value:notify,tag:"general"})}}function resetMicroLms(){try{var lme_heci=require("amt-lme");amtLmsState=1;amtLms=new lme_heci();amtLms.on("error",function(e){amtLmsState=0;amtLms=null;sendConsoleText("LMS Error.");obj.setupMeiOsAdmin(null,1)});amtLms.on("connect",function(){amtLmsState=2;obj.setupMeiOsAdmin(null,2)});amtLms.on("notify",function(data,options,str,code){if(code=="iAMT0052-3"){obj.kvmGetData()}else{handleAmtNotification(data)}})}catch(e){amtLmsState=-1;amtLms=null}}obj.start=function(){mesh.AddCommandHandler(handleServerCommand);mesh.AddConnectHandler(handleServerConnection);resetMicroLms();try{var userSession=require("user-sessions");userSession.on("changed",function onUserSessionChanged(){userSession.enumerateUsers().then(function(users){var u=[],a=users.Active;for(var i=0;i=12)){obj.kvmGetData("skip");obj.kvmTempTimer=setInterval(function(){obj.kvmGetData()},2000);obj.kvmSetData(JSON.stringify({action:"restart",ver:1}))}})})};obj.kvmGetData=function(tag){obj.osamtstack.IPS_KVMRedirectionSettingData_DataChannelRead(obj.kvmDataGetResponse,tag)};obj.kvmDataGetResponse=function(stack,name,response,status,tag){if((tag!="skip")&&(status==200)&&(response.Body.ReturnValue==0)){var val=null;try{val=Buffer.from(response.Body.DataMessage,"base64").toString()}catch(e){return}if(val!=null){obj.kvmProcessData(response.Body.RealmsBitmap,response.Body.MessageId,val)}}};var webRtcDesktop=null;obj.kvmProcessData=function(realms,messageId,val){var data=null;try{data=JSON.parse(val)}catch(e){}if((data!=null)&&(data.action)){if(data.action=="present"){obj.kvmSetData(JSON.stringify({action:"present",ver:1,platform:process.platform}))}if(data.action=="offer"){webRtcDesktop={};var rtc=require("ILibWebRTC");webRtcDesktop.webrtc=rtc.createConnection();webRtcDesktop.webrtc.on("connected",function(){});webRtcDesktop.webrtc.on("disconnected",function(){obj.webRtcCleanUp()});webRtcDesktop.webrtc.on("dataChannel",function(rtcchannel){webRtcDesktop.rtcchannel=rtcchannel;webRtcDesktop.kvm=mesh.getRemoteDesktopStream();webRtcDesktop.kvm.pipe(webRtcDesktop.rtcchannel,{dataTypeSkip:1,end:false});webRtcDesktop.rtcchannel.on("end",function(){obj.webRtcCleanUp()});webRtcDesktop.rtcchannel.on("data",function(x){obj.kvmCtrlData(this,x)});webRtcDesktop.rtcchannel.pipe(webRtcDesktop.kvm,{dataTypeSkip:1,end:false})});obj.kvmSetData(JSON.stringify({action:"answer",ver:1,sdp:webRtcDesktop.webrtc.setOffer(data.sdp)}))}}};var path={join:function(){var x=[];for(var i in arguments){var w=arguments[i];if(w!=null){while(w.endsWith("/")||w.endsWith("\\")){w=w.substring(0,w.length-1)}if(i!=0){while(w.startsWith("/")||w.startsWith("\\")){w=w.substring(1)}}x.push(w)}}if(x.length==0){return"/"}return x.join("/")}};obj.kvmCtrlData=function(channel,cmd){if(cmd.length>0&&cmd.charCodeAt(0)!=123){if(this.fileupload!=null){cmd=Buffer.from(cmd,"base64");var header=cmd.readUInt32BE(0);if((header==16777216)||(header==16777217)){fs.writeSync(this.fileupload.fp,cmd.slice(4));channel.write({action:"upload",sub:"ack",reqid:this.fileupload.reqid});if(header==16777217){fs.closeSync(this.fileupload.fp);this.fileupload=null}}}return}try{cmd=JSON.parse(cmd)}catch(ex){console.error("Invalid JSON: "+cmd);return}if((cmd.path!=null)&&(process.platform!="win32")&&(cmd.path[0]!="/")){cmd.path="/"+cmd.path}switch(cmd.action){case"ping":channel.write({action:"pong"});break;case"lock":if(process.platform=="win32"){var child=require("child_process");child.execFile(process.env.windir+"\\system32\\cmd.exe",["/c","RunDll32.exe user32.dll,LockWorkStation"],{type:1})}break;case"ls":var response=getDirectoryInfo(cmd.path);if(cmd.reqid!=undefined){response.reqid=cmd.reqid}channel.write(response);break;case"mkdir":fs.mkdirSync(cmd.path);break;case"rm":for(var i in cmd.delfiles){var fullpath=path.join(cmd.path,cmd.delfiles[i]);try{fs.unlinkSync(fullpath)}catch(e){console.log(e)}}break;case"rename":try{fs.renameSync(path.join(cmd.path,cmd.oldname),path.join(cmd.path,cmd.newname))}catch(e){console.log(e)}break;case"download":var sendNextBlock=0;if(cmd.sub=="start"){if(this.filedownload!=null){channel.write({action:"download",sub:"cancel",id:this.filedownload.id});delete this.filedownload}this.filedownload={id:cmd.id,path:cmd.path,ptr:0};try{this.filedownload.f=fs.openSync(this.filedownload.path,"rbN")}catch(e){channel.write({action:"download",sub:"cancel",id:this.filedownload.id});delete this.filedownload}if(this.filedownload){channel.write({action:"download",sub:"start",id:cmd.id})}}else{if((this.filedownload!=null)&&(cmd.id==this.filedownload.id)){if(cmd.sub=="startack"){sendNextBlock=8}else{if(cmd.sub=="stop"){delete this.filedownload}else{if(cmd.sub=="ack"){sendNextBlock=1}}}}}while(sendNextBlock>0){sendNextBlock--;var buf=Buffer.alloc(4096);var len=fs.readSync(this.filedownload.f,buf,4,4092,null);this.filedownload.ptr+=len;if(len<4092){buf.writeInt32BE(16777217,0);fs.closeSync(this.filedownload.f);delete this.filedownload;sendNextBlock=0}else{buf.writeInt32BE(16777216,0)}channel.write(buf.slice(0,len+4).toString("base64"))}break;case"upload":if(cmd.sub=="start"){if(this.fileupload!=null){fs.closeSync(this.fileupload.fp)}if(!cmd.path||!cmd.name){break}this.fileupload={reqid:cmd.reqid};var filepath=path.join(cmd.path,cmd.name);try{this.fileupload.fp=fs.openSync(filepath,"wbN")}catch(e){}if(this.fileupload.fp){channel.write({action:"upload",sub:"start",reqid:this.fileupload.reqid})}else{this.fileupload=null;channel.write({action:"upload",sub:"error",reqid:this.fileupload.reqid})}}else{if(cmd.sub=="cancel"){if(this.fileupload!=null){fs.closeSync(this.fileupload.fp);this.fileupload=null}}}break;case"copy":for(var i in cmd.names){var sc=path.join(cmd.scpath,cmd.names[i]),ds=path.join(cmd.dspath,cmd.names[i]);if(sc!=ds){try{fs.copyFileSync(sc,ds)}catch(e){}}}break;case"move":for(var i in cmd.names){var sc=path.join(cmd.scpath,cmd.names[i]),ds=path.join(cmd.dspath,cmd.names[i]);if(sc!=ds){try{fs.copyFileSync(sc,ds);fs.unlinkSync(sc)}catch(e){}}}break;default:console.log("Invalid KVM command",cmd);sendConsoleText("Invalid KVM command: "+cmd);break}};obj.webRtcCleanUp=function(){sendConsoleText("webRtcCleanUp");if(webRtcDesktop==null){return}if(webRtcDesktop.rtcchannel){try{webRtcDesktop.rtcchannel.close()}catch(e){}try{webRtcDesktop.rtcchannel.removeAllListeners("data")}catch(e){}try{webRtcDesktop.rtcchannel.removeAllListeners("end")}catch(e){}delete webRtcDesktop.rtcchannel}if(webRtcDesktop.webrtc){try{webRtcDesktop.webrtc.close()}catch(e){}try{webRtcDesktop.webrtc.removeAllListeners("connected")}catch(e){}try{webRtcDesktop.webrtc.removeAllListeners("disconnected")}catch(e){}try{webRtcDesktop.webrtc.removeAllListeners("dataChannel")}catch(e){}delete webRtcDesktop.webrtc}if(webRtcDesktop.kvm){try{webRtcDesktop.kvm.end()}catch(e){}delete webRtcDesktop.kvm}webRtcDesktop=null};obj.kvmSetData=function(x){obj.osamtstack.IPS_KVMRedirectionSettingData_DataChannelWrite(Buffer.from(x).toString("base64"),function(){})};function deleteFolderRecursive(path,rec){if(fs.existsSync(path)){if(rec==true){fs.readdirSync(obj.path.join(path,"*")).forEach(function(file,index){var curPath=obj.path.join(path,file);if(fs.statSync(curPath).isDirectory()){deleteFolderRecursive(curPath,true)}else{fs.unlinkSync(curPath)}})}fs.unlinkSync(path)}}function deactivateCCM(){amtMei.unprovision(1,function(status){if(status==0){sendConsoleText("Success deactivating Intel AMT CCM.")}else{sendConsoleText("Intel AMT CCM deactivation error: "+status)}})}function activeToCCM(adminpass){sendConsoleText("Trying to get local account info...");amtMei.getLocalSystemAccount(function(x){if(x.user&&x.pass){sendConsoleText("Intel AMT local account info: User="+x.user+", Pass="+x.pass+".");var transport=require("amt-wsman-duk");var wsman=require("amt-wsman");var amt=require("amt");oswsstack=new wsman(transport,"127.0.0.1",16992,x.user,x.pass,false);osamtstack=new amt(oswsstack);sendConsoleText("Trying to get Intel AMT activation information...");osamtstack.BatchEnum(null,["*AMT_GeneralSettings","*IPS_HostBasedSetupService"],activeToCCMEx2,adminpass)}else{sendConsoleText("Unable to get $$OsAdmin password.")}})}function activeToCCMEx2(stack,name,responses,status,adminpass){if(status!=200){sendConsoleText("Failed to fetch activation information, status "+status)}else{if(responses.IPS_HostBasedSetupService.response.AllowedControlModes.length!=2){sendConsoleText("Client control mode activation not allowed")}else{stack.IPS_HostBasedSetupService_Setup(2,md5hex("admin:"+responses.AMT_GeneralSettings.response.DigestRealm+":"+adminpass).substring(0,32),null,null,null,null,activeToCCMEx3)}}}function activeToCCMEx3(stack,name,responses,status){if(status!=200){sendConsoleText("Failed to activate, status "+status)}else{if(responses.Body.ReturnValue!=0){sendConsoleText("Client control mode activation failed: "+responses.Body.ReturnValueStr)}else{sendConsoleText("Intel AMT CCM activation success")}}}function md5hex(str){return require("MD5Stream").create().syncHash(str).toString("hex")}return obj}try{var xexports=null,mainMeshCore=null;try{xexports=module.exports}catch(e){}if(xexports!=null){module.exports.createMeshCore=createMeshCore}else{mainMeshCore=createMeshCore();mainMeshCore.start(null)}}catch(ex){require("MeshAgent").SendCommand({action:"msg",type:"console",value:"uncaughtException2: "+ex})}; \ No newline at end of file diff --git a/agents/modules_meshcmd_min/amt-lme.min.js b/agents/modules_meshcmd_min/amt-lme.min.js deleted file mode 100644 index 1d43678a..00000000 --- a/agents/modules_meshcmd_min/amt-lme.min.js +++ /dev/null @@ -1 +0,0 @@ -var MemoryStream=require("MemoryStream");var lme_id=0;var lme_port_offset=0;var xmlParser=require("amt-xml");var APF_DISCONNECT=1;var APF_SERVICE_REQUEST=5;var APF_SERVICE_ACCEPT=6;var APF_USERAUTH_REQUEST=50;var APF_USERAUTH_FAILURE=51;var APF_USERAUTH_SUCCESS=52;var APF_GLOBAL_REQUEST=80;var APF_REQUEST_SUCCESS=81;var APF_REQUEST_FAILURE=82;var APF_CHANNEL_OPEN=90;var APF_CHANNEL_OPEN_CONFIRMATION=91;var APF_CHANNEL_OPEN_FAILURE=92;var APF_CHANNEL_WINDOW_ADJUST=93;var APF_CHANNEL_DATA=94;var APF_CHANNEL_CLOSE=97;var APF_PROTOCOLVERSION=192;function lme_object(){this.ourId=++lme_id;this.amtId=-1;this.LME_CHANNEL_STATUS="LME_CS_FREE";this.txWindow=0;this.rxWindow=0;this.localPort=0;this.errorCount=0}function stream_bufferedWrite(){var a=require("events").inherits(this);this.buffer=[];this._readCheckImmediate=undefined;this._ObjectID="bufferedWriteStream";a.createEvent("close");a.createEvent("drain");a.createEvent("error");a.createEvent("finish");a.createEvent("pipe");a.createEvent("unpipe");a.createEvent("readable");this.isEmpty=function(){return(this.buffer.length==0)};this.isWaiting=function(){return(this._readCheckImmediate==undefined)};this.write=function(c){for(var b in arguments){if(typeof(arguments[b])=="function"){this.once("drain",arguments[b]);break}}var d=Buffer.alloc(c.length);c.copy(d);this.buffer.push({offset:0,data:d});this.emit("readable");return(this.buffer.length==0?true:false)};this.read=function(){var f=arguments.length==0?undefined:arguments[0];var b=0;var d=[];while((f==undefined||b0){var c=this.buffer[0].data.length-this.buffer[0].offset;var e=this.buffer[0].offset;if(c>(f-b)){d.push(this.buffer[0].data.slice(e,e+f-b));this.buffer[0].offset+=(f-b);b+=(f-b)}else{d.push(this.buffer[0].data.slice(e));b+=c;this.buffer.shift()}}this._readCheckImmediate=setImmediate(function(g){g._readCheckImmediate=undefined;if(g.buffer.length==0){g.emit("drain")}else{g.emit("readable")}},this);return(Buffer.concat(d))}}function lme_heci(c){var a=require("events").inherits(this);a.createEvent("error");a.createEvent("connect");a.createEvent("notify");a.createEvent("bind");if((c!=null)&&(c.debug==true)){lme_port_offset=-100}var b=require("heci");this.INITIAL_RXWINDOW_SIZE=4096;this._ObjectID="lme";this._LME=b.create();this._LME._binded={};this._LME.LMS=this;this._LME.on("error",function(d){this.LMS.emit("error",d)});this._LME.on("connect",function(){this.on("data",function(k){var l=k.readUInt8(0);switch(l){default:console.log("Unhandled LME Command "+l+", "+k.length+" byte(s).");break;case APF_SERVICE_REQUEST:var z=k.readUInt32BE(1);var y=k.slice(5,z+5);if(y=="pfwd@amt.intel.com"||y=="auth@amt.intel.com"){var F=Buffer.alloc(5+z);F.writeUInt8(6,0);F.writeUInt32BE(z,1);F.write(y.toString(),5);this.write(F)}else{}break;case APF_GLOBAL_REQUEST:var z=k.readUInt32BE(1);var y=k.slice(5,z+5).toString();switch(y){case"tcpip-forward":var v=k.readUInt32BE(z+6);var G=k.readUInt32BE(z+10+v);if(this[y]==undefined){this[y]={}}if(this[y][G]!=null){for(var s in this.sockets){var h=this.sockets[s];if(h.localPort==G){this.sockets[s].end();delete this.sockets[s]}}}if(this[y][G]==null){this[y][G]=require("net").createServer();this[y][G].HECI=this;if(lme_port_offset==0){this[y][G].listen({port:G,host:"127.0.0.1"})}else{this[y][G].listen({port:(G+lme_port_offset)})}this[y][G].on("connection",function(e){this.HECI.LMS.bindDuplexStream(e,e.remoteFamily,e.localPort-lme_port_offset)});this._binded[G]=true;this.LMS.emit("bind",this._binded)}var F=Buffer.alloc(5);F.writeUInt8(81,0);F.writeUInt32BE(G,1);this.write(F);break;case"cancel-tcpip-forward":var F=Buffer.alloc(1);F.writeUInt8(APF_REQUEST_SUCCESS,0);this.write(F);break;case"udp-send-to@amt.intel.com":var F=Buffer.alloc(1);F.writeUInt8(APF_REQUEST_FAILURE,0);this.write(F);break;default:break}break;case APF_CHANNEL_OPEN_CONFIRMATION:var I=k.readUInt32BE(1);var M=k.readUInt32BE(5);var N=k.readUInt32BE(9);if(this.sockets[I]!=undefined){this.sockets[I].lme.amtId=M;this.sockets[I].lme.rxWindow=N;this.sockets[I].lme.txWindow=N;this.sockets[I].lme.LME_CHANNEL_STATUS="LME_CS_CONNECTED";this.sockets[I].bufferedStream=new stream_bufferedWrite();this.sockets[I].bufferedStream.socket=this.sockets[I];this.sockets[I].bufferedStream.on("readable",function(){if(this.socket.lme.txWindow>0){var e=this.read(this.socket.lme.txWindow);var i=Buffer.alloc(9+e.length);i.writeUInt8(APF_CHANNEL_DATA,0);i.writeUInt32BE(this.socket.lme.amtId,1);i.writeUInt32BE(e.length,5);e.copy(i,9);this.socket.lme.txWindow-=e.length;this.socket.HECI.write(i)}});this.sockets[I].bufferedStream.on("drain",function(){this.socket.resume()});this.sockets[I].on("data",function(e){if(!this.bufferedStream.write(e)){this.pause()}});this.sockets[I].on("end",function(){var e=Buffer.alloc(5);e.writeUInt8(APF_CHANNEL_CLOSE,0);e.writeUInt32BE(this.lme.amtId,1);this.HECI.write(e)});this.sockets[I].resume()}break;case APF_PROTOCOLVERSION:var w=k.readUInt32BE(1);var x=k.readUInt32BE(5);var K=k.readUInt32BE(9);var F=Buffer.alloc(93);F.writeUInt8(192,0);F.writeUInt32BE(1,1);F.writeUInt32BE(0,5);F.writeUInt32BE(K,9);this.write(F);break;case APF_CHANNEL_WINDOW_ADJUST:var J=k.readUInt32BE(1);var g=k.readUInt32BE(5);if(this.sockets[J]!=undefined){this.sockets[J].lme.txWindow+=g;if(!this.sockets[J].bufferedStream.isEmpty()&&this.sockets[J].bufferedStream.isWaiting()){this.sockets[J].bufferedStream.emit("readable")}}else{console.log("Unknown Recipient ID/"+J+" for APF_CHANNEL_WINDOW_ADJUST")}break;case APF_CHANNEL_DATA:var J=k.readUInt32BE(1);var n=k.readUInt32BE(5);var m=k.slice(9,9+n);if((this.sockets!=null)&&(this.sockets[J]!=undefined)){this.sockets[J].pendingBytes.push(m.length);this.sockets[J].write(m,function(){var i=this.pendingBytes.shift();var e=Buffer.alloc(9);e.writeUInt8(APF_CHANNEL_WINDOW_ADJUST,0);e.writeUInt32BE(this.lme.amtId,1);e.writeUInt32BE(i,5);this.HECI.write(e)})}else{if((this.insockets!=null)&&(this.insockets[J]!=undefined)){var h=this.insockets[J];if(h.data==null){h.data=m.toString()}else{h.data+=m.toString()}h.rxWindow+=n;var r=parseHttp(h.data);if((r!=null)||(h.data.length>=8000)){var A=null;try{A=xmlParser.ParseWsman(r)}catch(o){}if(A!=null){this.LMS.emit("notify",A,h.options,_lmsNotifyToString(A),_lmsNotifyToCode(A))}var f=Buffer.alloc(5);f.writeUInt8(APF_CHANNEL_CLOSE,0);f.writeUInt32BE(d,1);this.write(f)}else{if(h.rxWindow>6000){var f=Buffer.alloc(9);f.writeUInt8(APF_CHANNEL_WINDOW_ADJUST,0);f.writeUInt32BE(h.amtId,1);f.writeUInt32BE(h.rxWindow,5);this.write(f);h.rxWindow=0}}}else{console.log("Unknown Recipient ID/"+J+" for APF_CHANNEL_DATA")}}break;case APF_CHANNEL_OPEN_FAILURE:var J=k.readUInt32BE(1);var L=k.readUInt32BE(5);if((this.sockets!=null)&&(this.sockets[J]!=undefined)){this.sockets[J].end();delete this.sockets[J]}else{if((this.insockets!=null)&&(this.insockets[J]!=undefined)){delete this.insockets[J]}else{console.log("Unknown Recipient ID/"+J+" for APF_CHANNEL_OPEN_FAILURE")}}break;case APF_CHANNEL_CLOSE:var J=k.readUInt32BE(1);if((this.sockets!=null)&&(this.sockets[J]!=undefined)){this.sockets[J].end();var d=this.sockets[J].lme.amtId;var f=Buffer.alloc(5);delete this.sockets[J];f.writeUInt8(APF_CHANNEL_CLOSE,0);f.writeUInt32BE(d,1);this.write(f)}else{if((this.insockets!=null)&&(this.insockets[J]!=undefined)){delete this.insockets[J]}else{console.log("Unknown Recipient ID/"+J+" for APF_CHANNEL_CLOSE")}}break;case APF_CHANNEL_OPEN:var z=k.readUInt32BE(1);var y=k.slice(5,z+5).toString();var j=k.readUInt32BE(z+5);var t=k.readUInt32BE(z+9);var q=k.readUInt32BE(z+17);var p=k.slice(z+21,z+21+q).toString();var H=k.readUInt32BE(z+21+q);var C=k.readUInt32BE(z+25+q);var B=k.slice(z+29+q,z+29+q+C).toString();var D=k.readUInt32BE(z+29+q+C);if(this.insockets==null){this.insockets={}}var E=++lme_id;var u=new lme_object();u.ourId=E;u.amtId=j;u.txWindow=t;u.rxWindow=0;u.options={target:p,targetPort:H,source:B,sourcePort:D};this.insockets[E]=u;var f=Buffer.alloc(17);f.writeUInt8(APF_CHANNEL_OPEN_CONFIRMATION,0);f.writeUInt32BE(j,1);f.writeUInt32BE(E,5);f.writeUInt32BE(4000,9);f.writeUInt32BE(4294967295,13);this.write(f);break}});this.LMS.emit("connect");this.resume()});this.bindDuplexStream=function(e,h,g){var j=e;j.pendingBytes=[];j.HECI=this._LME;j.LMS=this;j.lme=new lme_object();j.lme.Socket=j;j.localPort=g;var d=new MemoryStream();d.writeUInt8(90);d.writeUInt32BE(15);d.write("forwarded-tcpip");d.writeUInt32BE(j.lme.ourId);d.writeUInt32BE(this.INITIAL_RXWINDOW_SIZE);d.writeUInt32BE(4294967295);for(var f=0;f<2;++f){if(h=="IPv6"){d.writeUInt32BE(3);d.write("::1")}else{d.writeUInt32BE(9);d.write("127.0.0.1")}d.writeUInt32BE(g)}this._LME.write(d.buffer);if(this._LME.sockets==undefined){this._LME.sockets={}}this._LME.sockets[j.lme.ourId]=j;j.pause()};this._LME.connect(b.GUIDS.LME,{noPipeline:0})}function parseHttp(c){var d=c.indexOf("\r\n\r\n");if((d==-1)||(c.length<(d+2))){return null}var b=require("http-headers")(c.substring(0,d),true);var a=parseInt(b["content-length"]);if(c.length>=a+d+4){return c.substring(d+4,d+4+a)}return null}function _lmsNotifyToCode(c){if((c==null)||(c.Body==null)||(c.Body.MessageID==null)){return null}var b=c.Body.MessageID;try{b+="-"+c.Body.MessageArguments[0]}catch(a){}return b}function _lmsNotifyToString(c){if((c==null)||(c.Body==null)||(c.Body.MessageID==null)){return null}var b=c.Body.MessageID;try{b+="-"+c.Body.MessageArguments[0]}catch(a){}if(lmsEvents[b]){return lmsEvents[b]}return null}var lmsEvents={iAMT0001:"System Defense Policy %1s triggered.",iAMT0002:"Agent Presence Agent %1s not started.",iAMT0003:"Agent Presence Agent %1s stopped.",iAMT0004:"Agent Presence Agent %1s running.",iAMT0005:"Agent Presence Agent %1s expired.",iAMT0006:"Agent Presence Agent %1s suspended.",iAMT0007:"Host software attempt to disable AMT Network link detected.",iAMT0008:"Host software attempt to disable AMT Network link detected -- Host Network link blocked.",iAMT0009:"AMT clock or FLASH wear-out protection disabled.",iAMT0010:"Intel(R) AMT Network Interface %1s heuristics defense slow threshold trespassed.",iAMT0011:"Intel(R) AMT Network Interface %1s heuristics defense fast threshold trespassed.",iAMT0012:"Intel(R) AMT Network Interface %1s heuristics defense factory defined threshold trespassed.",iAMT0013:"Intel(R) AMT Network Interface %1s heuristics defense Encounter timeout expired.",iAMT0014:"General certificate error.",iAMT0015:"Certificate expired.",iAMT0016:"No trusted root certificate.",iAMT0017:"Not configured to work with server certificate.",iAMT0018:"Certificate revoked.",iAMT0019:"RSA exponent too large.",iAMT0020:"RSA modulus too large.",iAMT0021:"Unsupported digest.",iAMT0022:"Distinguished name too long.",iAMT0023:"Key usage missing.",iAMT0024:"General SSL handshake error.",iAMT0025:"General 802.1x error.",iAMT0026:"AMT Diagnostic AlertEAC error - General NAC error.",iAMT0027:"AMT Diagnostic AlertEAC error - attempt to get a NAC posture while AMT NAC is disabled.",iAMT0028:"AMT Diagnostic AlertEAC error - attempt to get a posture of an unsupported type.",iAMT0029:"Audit log storage is 50% full.",iAMT0030:"Audit log storage is 75% full.",iAMT0031:"Audit log storage is 85% full.",iAMT0032:"Audit log storage is 95% full.",iAMT0033:"Audit log storage is full.",iAMT0034:"Firmware Update Event - Partial.",iAMT0035:"Firmware Update Event - Failure.",iAMT0036:"Remote connectivity initiated.",iAMT0037:"ME Presence event.","iAMT0038-0":"AMT is being unprovisioned using BIOS command.","iAMT0038-1":"AMT is being unprovisioned using Local MEI command.","iAMT0038-2":"AMT is being unprovisioned using Local WS-MAN/SOAP command.","iAMT0038-3":"AMT is being unprovisioned using Remote WS-MAN/SOAP command.",iAMT0039:"HW Asset Error.",iAMT0050:"User Notification Alert - General Notification.","iAMT0050-16":"User Notification Alert - Circuit Breaker notification (CB Drop TX filter hit.).","iAMT0050-17":"User Notification Alert - Circuit Breaker notification (CB Rate Limit TX filter hit.).","iAMT0050-18":"User Notification Alert - Circuit Breaker notification (CB Drop RX filter hit.).","iAMT0050-19":"User Notification Alert - Circuit Breaker notification (CB Rate Limit RX filter hit.).","iAMT0050-32":"User Notification Alert - EAC notification.","iAMT0050-48":"User Notification Alert - Remote diagnostics - (Remote Redirection session started - SOL).","iAMT0050-49":"User Notification Alert - Remote diagnostics - (Remote Redirection session stopped - SOL).","iAMT0050-50":"User Notification Alert - Remote diagnostics. (Remote Redirection session started - IDE-R).","iAMT0050-51":"User Notification Alert - Remote diagnostics. (Remote Redirection session stopped - IDE-R).","iAMT0050-66":"User Notification Alert - WLAN notification (Host profile mismatch - Management Interface ignored).","iAMT0050-67":"User Notification Alert - WLAN notification (Management device overrides host radio).","iAMT0050-68":"User Notification Alert - WLAN notification (Host profile security mismatch).","iAMT0050-69":"User Notification Alert - WLAN notification (Management device relinquishes control over host Radio).",iAMT0051:"User Notification Alert - SecIo event.","iAMT0051-0":"User Notification Alert - SecIo event semaphore at host.","iAMT0051-1":"User Notification Alert - semaphore at ME.","iAMT0051-2":"User Notification Alert - SecIo event - semaphore timeout.",iAMT0052:"User Notification Alert - KVM session event.","iAMT0052-0":"User Notification Alert - KVM session requested.","iAMT0052-1":"User Notification Alert - KVM session started.","iAMT0052-2":"User Notification Alert - KVM session stopped.","iAMT0052-3":"User Notification Alert - KVM data channel.",iAMT0053:"User Notification Alert - RCS notification.","iAMT0053-50":"User Notification Alert - RCS notification (HW button pressed. Connection initiated automatically).","iAMT0053-52":"User Notification Alert - RCS notification (HW button pressed. Connection wasn't initiated automatically).","iAMT0053-53":"User Notification Alert - RCS notification (Contracts updated).",iAMT0054:"User Notification Alert - WLAN notification. Wireless Profile sync enablement state changed.",iAMT0055:"User Notification Alert - Provisioning state change notification.","iAMT0055-0":"User Notification Alert - Provisioning state change notification - Pre-configuration.","iAMT0055-1":"User Notification Alert - Provisioning state change notification - In configuration.","iAMT0055-2":"User Notification Alert - Provisioning state change notification - Post-configuration.","iAMT0055-3":"User Notification Alert - Provisioning state change notification - Unprovision process has started.",iAMT0056:"User Notification Alert - System Defense change notification.",iAMT0057:"User Notification Alert - Network State change notification.",iAMT0058:"User Notification Alert - Remote Access change notification.","iAMT0058-1":"User Notification Alert - Remote Access change notification - tunnel is closed.",iAMT0059:"User Notification Alert - KVM enabled event.","iAMT0059-0":"User Notification Alert - KVM enabled event - KVM disabled.","iAMT0059-1":"User Notification Alert - KVM enabled event - KVM enabled (both from MEBx and PTNI).",iAMT0060:"User Notification Alert - SecIO configuration event.",iAMT0061:"ME FW reset occurred.",iAMT0062:"User Notification Alert - IpSyncEnabled event.","iAMT0062-0":"User Notification Alert - IpSyncEnabled event - IpSync disabled.","iAMT0062-1":"User Notification Alert - IpSyncEnabled event - IpSync enabled.",iAMT0063:"User Notification Alert - HTTP Proxy sync enabled event.","iAMT0063-0":"User Notification Alert - HTTP Proxy sync enabled event - HTTP Proxy Sync disabled.","iAMT0063-1":"User Notification Alert - HTTP Proxy sync enabled event - HTTP Proxy Sync enabled.",iAMT0064:"User Notification Alert - User Consent event.","iAMT0064-1":"User Notification Alert - User Consent event - User Consent granted.","iAMT0064-2":"User Notification Alert - User Consent event - User Consent ended.","iAMT0067-0":"Graceful Remote Control Operation - Shutdown.","iAMT0067-1":"Graceful Remote Control Operation - Reset.","iAMT0067-2":"Graceful Remote Control Operation - Hibernate.","iAMT0068-0":"Link Protection Notification - No link protection.","iAMT0068-1":"Link Protection Notification - Passive link protection.","iAMT0068-2":"Link Protection Notification - High link protection.","iAMT0069-0":"Local Time Sync Enablement Notification - Local Time Sync Disabled.","iAMT0069-1":"Local Time Sync Enablement Notification - Local Time Sync Enabled.",iAMT0070:"Host Reset Triggered by WD Expiration Notification.",PLAT0004:"The chassis %1s was opened.",PLAT0005:"The chassis %1s was closed.",PLAT0006:"The drive bay %1s was opened.",PLAT0007:"The drive bay %1s was closed.",PLAT0008:"The I/O card area %1s was opened.",PLAT0009:"The I/O card area %1s was closed.",PLAT0010:"The processor area %1s was opened.",PLAT0011:"The processor area %1s was closed.",PLAT0012:"The LAN %1s has been disconnected.",PLAT0013:"The LAN %1s has been connected.",PLAT0016:"The permission to insert package %1s has been granted.",PLAT0017:"The permission to insert package %1s has been removed.",PLAT0018:"The fan card area %1s is open.",PLAT0019:"The fan card area %1s is closed.",PLAT0022:"The computer system %1s has detected a secure mode violation.",PLAT0024:"The computer system %1s has detected a pre-boot user password violation.",PLAT0026:"The computer system %1s has detected a pre-boot setup password violation.",PLAT0028:"The computer system %1s has detected a network boot password violation.",PLAT0030:"The computer system %1s has detected a password violation.",PLAT0032:"The management controller %1s has detected an out-of-band password violation.",PLAT0034:"The processor %1s has been added.",PLAT0035:"The processor %1s has been removed.",PLAT0036:"An over-temperature condition has been detected on the processor %1s.",PLAT0037:"An over-temperature condition has been removed on the processor %1s.",PLAT0038:"The processor %1s is operating in a degraded State.",PLAT0039:"The processor %1s is no longer operating in a degraded State.",PLAT0040:"The processor %1s has failed.",PLAT0042:"The processor %1s has failed.",PLAT0044:"The processor %1s has failed.",PLAT0046:"The processor %1s has failed.",PLAT0048:"The processor %1s has failed.",PLAT0060:"The processor %1s has been enabled.",PLAT0061:"The processor %1s has been disabled.",PLAT0062:"The processor %1s has a configuration mismatch.",PLAT0064:"A terminator has been detected on the processor %1s.",PLAT0084:"The Power Supply %1s has been added.",PLAT0085:"The Power Supply %1s has been removed.",PLAT0086:"The Power Supply %1s has failed.",PLAT0088:"Failure predicted on power supply %1s.",PLAT0096:"The input to power supply %1s has been lost or fallen out of range.",PLAT0098:"The power supply %1s is operating in an input state that is out of range.",PLAT0099:"The power supply %1s has returned to a normal input state.",PLAT0100:"The power supply %1s has lost input.",PLAT0104:"The power supply %1s has a configuration mismatch.",PLAT0106:"Power supply %1s has been disabled.",PLAT0107:"Power supply %1s has been enabled.",PLAT0108:"Power supply %1s has been power cycled.",PLAT0110:"Power supply %1s has encountered an error during power down.",PLAT0112:"Power supply %1s has lost power.",PLAT0114:"Soft power control has failed for power supply %1s.",PLAT0116:"Power supply %1s has failed.",PLAT0118:"Failure predicted on power supply %1s.",PLAT0120:"Memory subsystem failure.",PLAT0122:"DIMM missing.",PLAT0124:"Memory error detected & corrected for DIMM %1s.",PLAT0128:"Memory DIMM %1s added.",PLAT0129:"Memory DIMM %1s removed.",PLAT0130:"Memory DIMM %1s enabled.",PLAT0131:"Memory DIMM %1s disabled.",PLAT0134:"Memory parity error for DIMM %1s.",PLAT0136:"Memory scrub failure for DIMM %1s.",PLAT0138:"Memory uncorrectable error detected for DIMM %1s.",PLAT0140:"Memory sparing initiated for DIMM %1s.",PLAT0141:"Memory sparing concluded for DIMM %1s.",PLAT0142:"Memory DIMM %1s Throttled.",PLAT0144:"Memory logging limit reached for DIMM %1s.",PLAT0145:"Memory logging limit removed for DIMM %1s.",PLAT0146:"An over-temperature condition has been detected on the Memory DIMM %1s.",PLAT0147:"An over-temperature condition has been removed on the Memory DIMM %1s.",PLAT0162:"The drive %1s has been added.",PLAT0163:"The drive %1s has been removed.",PLAT0164:"The drive %1s has been disabled due to a detected fault.",PLAT0167:"The drive %1s has been enabled.",PLAT0168:"Failure predicted on drive %1s.",PLAT0170:"Hot spare enabled for %1s.",PLAT0171:"Hot spare disabled for %1s.",PLAT0172:"Consistency check has begun for %1s.",PLAT0173:"Consistency check completed for %1s.",PLAT0174:"Array %1s is in critical condition.",PLAT0176:"Array %1s has failed.",PLAT0177:"Array %1s has been restored.",PLAT0178:"Rebuild in progress for array %1s.",PLAT0179:"Rebuild completed for array %1s.",PLAT0180:"Rebuild Aborted for array %1s.",PLAT0184:"The system %1s encountered a POST error.",PLAT0186:"The system %1s encountered a firmware hang.",PLAT0188:"The system %1s encountered firmware progress.",PLAT0192:"The log %1s has been disabled.",PLAT0193:"The log %1s has been enabled.",PLAT0194:"The log %1s has been disabled.",PLAT0195:"The log %1s has been enabled.",PLAT0196:"The log %1s has been disabled.",PLAT0198:"The log %1s has been enabled.",PLAT0200:"The log %1s has been cleared.",PLAT0202:"The log %1s is full.",PLAT0203:"The log %1s is no longer full.",PLAT0204:"The log %1s is almost full.",PLAT0208:"The log %1s has a configuration error.",PLAT0210:"The system %1s has been reconfigured.",PLAT0212:"The system %1s has encountered an OEM system boot event.",PLAT0214:"The system %1s has encountered an unknown system hardware fault.",PLAT0216:"The system %1s has generated an auxiliary log entry.",PLAT0218:"The system %1s has executed a PEF action.",PLAT0220:"The system %1s has synchronized the system clock.",PLAT0222:"A diagnostic interrupt has occurred on system %1s.",PLAT0224:"A bus timeout has occurred on system %1s.",PLAT0226:"An I/O channel check NMI has occurred on system %1s.",PLAT0228:"A software NMI has occurred on system %1s.",PLAT0230:"System %1s has recovered from an NMI.",PLAT0232:"A PCI PERR has occurred on system %1s.",PLAT0234:"A PCI SERR has occurred on system %1s.",PLAT0236:"An EISA fail safe timeout occurred on system %1s.",PLAT0238:"A correctable bus error has occurred on system %1s.",PLAT0240:"An uncorrectable bus error has occurred on system %1s.",PLAT0242:"A fatal NMI error has occurred on system %1s.",PLAT0244:"A fatal bus error has occurred on system %1s.",PLAT0246:"A bus on system %1s is operating in a degraded state.",PLAT0247:"A bus on system %1s is no longer operating in a degraded state.",PLAT0248:"The power button %1s has been pressed.",PLAT0249:"The power button %1s has been released.",PLAT0250:"The sleep button %1s has been pressed.",PLAT0251:"The sleep button %1s has been released.",PLAT0252:"The reset button %1s has been pressed.",PLAT0253:"The reset button %1s has been released.",PLAT0254:"The latch to %1s has been opened.",PLAT0255:"The latch to %1s has been closed.",PLAT0256:"The service request %1s has been enabled.",PLAT0257:"The service request %1s has been completed.",PLAT0258:"Power control of system %1s has failed.",PLAT0262:"The network port %1s has been connected.",PLAT0263:"The network port %1s has been disconnected.",PLAT0266:"The connector %1s has encountered a configuration error.",PLAT0267:"The connector %1s configuration error has been repaired.",PLAT0272:"Power on for system %1s.",PLAT0274:"Power cycle hard requested for system %1s.",PLAT0276:"Power cycle soft requested for system %1s.",PLAT0278:"PXE boot requested for system %1s.",PLAT0280:"Diagnostics boot requested for system %1s.",PLAT0282:"System restart requested for system %1s.",PLAT0284:"System restart begun for system %1s.",PLAT0286:"No bootable media available for system %1s.",PLAT0288:"Non-bootable media selected for system %1s.",PLAT0290:"PXE server not found for system %1s.",PLAT0292:"User timeout on boot for system %1s.",PLAT0296:"System %1s boot from floppy initiated.",PLAT0298:"System %1s boot from local drive initiated.",PLAT0300:"System %1s boot from PXE on network port initiated.",PLAT0302:"System %1s boot diagnostics initiated.",PLAT0304:"System %1s boot from CD initiated.",PLAT0306:"System %1s boot from ROM initiated.",PLAT0312:"System %1s boot initiated.",PLAT0320:"Critical stop during OS load on system %1s.",PLAT0322:"Run-time critical stop on system %1s.",PLAT0324:"OS graceful stop on system %1s.",PLAT0326:"OS graceful shutdown begun on system %1s.",PLAT0327:"OS graceful shutdown completed on system %1s.",PLAT0328:"Agent not responding on system %1s.",PLAT0329:"Agent has begun responding on system %1s.",PLAT0330:"Fault in slot on system %1s.",PLAT0331:"Fault condition removed on system %1s.",PLAT0332:"Identifying slot on system %1s.",PLAT0333:"Identify stopped on slot for system %1s.",PLAT0334:"Package installed in slot for system %1s.",PLAT0336:"Slot empty system %1s.",PLAT0338:"Slot in system %1s is ready for installation.",PLAT0340:"Slot in system %1s is ready for removal.",PLAT0342:"Power is off on slot of system %1s.",PLAT0344:"Power is on for slot of system %1s.",PLAT0346:"Removal requested for slot of system %1s.",PLAT0348:"Interlock activated on slot of system %1s.",PLAT0349:"Interlock de-asserted on slot of system %1s.",PLAT0350:"Slot disabled on system %1s.",PLAT0351:"Slot enabled on system %1s.",PLAT0352:"Slot of system %1s holds spare.",PLAT0353:"Slot of system %1s no longer holds spare.",PLAT0354:"Computer system %1s enabled.",PLAT0356:"Computer system %1s is in sleep - light mode.",PLAT0358:"Computer system %1s is in hibernate.",PLAT0360:"Computer system %1s is in standby.",PLAT0362:"Computer system %1s is in soft off mode.",PLAT0364:"Computer system %1s is in hard off mode.",PLAT0366:"Computer system %1s is sleeping.",PLAT0368:"Watchdog timer expired for %1s.",PLAT0370:"Reboot of system initiated by watchdog %1s.",PLAT0372:"Powering off system initiated by watchdog %1s.",PLAT0374:"Power cycle of system initiated by watchdog %1s.",PLAT0376:"Watchdog timer interrupt occurred for %1s.",PLAT0378:"A page alert has been generated for system %1s.",PLAT0380:"A LAN alert has been generated for system %1s.",PLAT0382:"An event trap has been generated for system %1s.",PLAT0384:"An SNMP trap has been generated for system %1s.",PLAT0390:"%1s detected as present.",PLAT0392:"%1s detected as absent.",PLAT0394:"%1s has been disabled.",PLAT0395:"%1s has been enabled.",PLAT0396:"Heartbeat lost for LAN %1s.",PLAT0397:"Heartbeat detected for LAN %1s.",PLAT0398:"Sensor %1s is unavailable or degraded on management system.",PLAT0399:"Sensor %1s has returned to normal on management system.",PLAT0400:"Controller %1s is unavailable or degraded on management system.",PLAT0401:"Controller %1s has returned to normal on management system.",PLAT0402:"Management system %1s is off-line.",PLAT0404:"Management system %1s is disabled.",PLAT0405:"Management system %1s is enabled.",PLAT0406:"Sensor %1s has failed on management system.",PLAT0408:"FRU %1s has failed on management system.",PLAT0424:"The battery %1s is critically low.",PLAT0427:"The battery %1s is no longer critically low.",PLAT0430:"The battery %1s has been removed from unit.",PLAT0431:"The battery %1s has been added.",PLAT0432:"The battery %1s has failed.",PLAT0434:"Session audit is deactivated on system %1s.",PLAT0435:"Session audit is activated on system %1s.",PLAT0436:"A hardware change occurred on system %1s.",PLAT0438:"A firmware or software change occurred on system %1s.",PLAT0440:"A hardware incompatibility was detected on system %1s.",PLAT0442:"A firmware or software incompatibility was detected on system %1s.",PLAT0444:"Invalid or unsupported hardware was detected on system %1s.",PLAT0446:"Invalid or unsupported firmware or software was detected on system %1s.",PLAT0448:"A successful hardware change was detected on system %1s.",PLAT0450:"A successful software or firmware change was detected on system %1s.",PLAT0464:"FRU %1s not installed on system.",PLAT0465:"FRU %1s installed on system.",PLAT0466:"Activation requested for FRU %1s on system.",PLAT0467:"FRU %1s on system is active.",PLAT0468:"Activation in progress for FRU %1s on system.",PLAT0470:"Deactivation request for FRU %1s on system.",PLAT0471:'FRU %1s on system is in standby or "hot spare" state.',PLAT0472:"Deactivation in progress for FRU %1s on system.",PLAT0474:"Communication lost with FRU %1s on system.",PLAT0476:"Numeric sensor %1s going low (lower non-critical).",PLAT0478:"Numeric sensor %1s going high (lower non-critical).",PLAT0480:"Numeric sensor %1s going low (lower critical).",PLAT0482:"Numeric sensor %1s going high (lower critical).",PLAT0484:"Numeric sensor %1s going low (lower non-recoverable).",PLAT0486:"Numeric sensor %1s going high (lower non-critical).",PLAT0488:"Numeric sensor %1s going low (upper non-critical).",PLAT0490:"Numeric sensor %1s going high (upper non-critical).",PLAT0492:"Numeric sensor %1s going low (upper critical).",PLAT0494:"Numeric sensor %1s going high (upper critical).",PLAT0496:"Numeric sensor %1s going low (upper non-recoverable).",PLAT0498:"Numeric sensor %1s going high (upper non-recoverable).",PLAT0500:"Sensor %1s has transitioned to idle.",PLAT0502:"Sensor %1s has transitioned to active.",PLAT0504:"Sensor %1s has transitioned to busy.",PLAT0508:"Sensor %1s has asserted.",PLAT0509:"Sensor %1s has de-asserted.",PLAT0510:"Sensor %1s is asserting predictive failure.",PLAT0511:"Sensor %1s is de-asserting predictive failure.",PLAT0512:"Sensor %1s has indicated limit exceeded.",PLAT0513:"Sensor %1s has indicated limit no longer exceeded.",PLAT0514:"Sensor %1s has indicated performance met.",PLAT0516:"Sensor %1s has indicated performance lags.",PLAT0518:"Sensor %1s has transitioned to normal state.",PLAT0520:"Sensor %1s has transitioned from normal to non-critical state.",PLAT0522:"Sensor %1s has transitioned to critical from a less severe state.",PLAT0524:"Sensor %1s has transitioned to non-recoverable from a less severe state.",PLAT0526:"Sensor %1s has transitioned to non-critical from a more severe state.",PLAT0528:"Sensor %1s has transitioned to critical from a non-recoverable state.",PLAT0530:"Sensor %1s has transitioned to non-recoverable.",PLAT0532:"Sensor %1s indicates a monitor state.",PLAT0534:"Sensor %1s has an informational state.",PLAT0536:"Device %1s has been added.",PLAT0537:"Device %1s has been removed from unit.",PLAT0538:"Device %1s has been enabled.",PLAT0539:"Device %1s has been disabled.",PLAT0540:"Sensor %1s has indicated a running state.",PLAT0544:"Sensor %1s has indicated a power off state.",PLAT0546:"Sensor %1s has indicated an on-line state.",PLAT0548:"Sensor %1s has indicated an off-line state.",PLAT0550:"Sensor %1s has indicated an off-duty state.",PLAT0552:"Sensor %1s has indicated a degraded state.",PLAT0554:"Sensor %1s has indicated a power save state.",PLAT0556:"Sensor %1s has indicated an install error.",PLAT0558:"Redundancy %1s has been lost.",PLAT0560:"Redundancy %1s has been reduced.",PLAT0561:"Redundancy %1s has been restored.",PLAT0562:"%1s has transitioned to a D0 power state.",PLAT0564:"%1s has transitioned to a D1 power state.",PLAT0566:"%1s has transitioned to a D2 power state.",PLAT0568:"%1s has transitioned to a D3 power state.",PLAT0720:"The System %1s encountered firmware progress - memory initialization entry.",PLAT0721:"The System %1s encountered firmware progress - memory initialization exit.",PLAT0722:"The System %1s encountered firmware progress - hard drive initialization entry.",PLAT0723:"The System %1s encountered firmware progress - hard drive initialization exit.",PLAT0724:"The System %1s encountered firmware progress - user authentication.",PLAT0728:"The System %1s encountered firmware progress - USR resource configuration entry.",PLAT0729:"The System %1s encountered firmware progress - USR resource configuration exit.",PLAT0730:"The System %1s encountered firmware progress - PCI recource configuration entry.",PLAT0731:"The System %1s encountered firmware progress - PCI recource configuration exit.",PLAT0732:"The System %1s encountered firmware progress - Option ROM initialization entry.",PLAT0733:"The System %1s encountered firmware progress - Option ROM initialization entry exit.",PLAT0734:"The System %1s encountered firmware progress -video initialization entry entry.",PLAT0735:"The System %1s encountered firmware progress - video initialization entry exit.",PLAT0736:"The System %1s encountered firmware progress - cache initialization entry.",PLAT0737:"The System %1s encountered firmware progress - cache initialization exit.",PLAT0738:"The System %1s encountered firmware progress - keyboard controller initialization entry.",PLAT0739:"The System %1s encountered firmware progress - keyboard controller initialization exit.",PLAT0740:"The System %1s encountered firmware progress - motherboard initialization entry.",PLAT0741:"The System %1s encountered firmware progress - motherboard initialization exit.",PLAT0742:"The System %1s encountered firmware progress - floppy disk initialization entry.",PLAT0743:"The System %1s encountered firmware progress - floppy disk initialization exit.",PLAT0744:"The System %1s encountered firmware progress - keyboard test entry.",PLAT0745:"The System %1s encountered firmware progress - keyboard test exit.",PLAT0746:"The System %1s encountered firmware progress - pointing device test entry.",PLAT0747:"The System %1s encountered firmware progress - pointing device test exit.",PLAT0750:"The System %1s encountered firmware progress - dock enable entry.",PLAT0751:"The System %1s encountered firmware progress - dock enable exit.",PLAT0752:"The System %1s encountered firmware progress - dock disable entry.",PLAT0753:"The System %1s encountered firmware progress - dock disable exit.",PLAT0760:"The System %1s encountered firmware progress - start OS boot process.",PLAT0762:"The System %1s encountered firmware progress - call OS wake vector.",PLAT0764:"The System %1s encountered firmware progress - unrecoverable keyboard failure.",PLAT0766:"The System %1s encountered firmware progress - no video device detected.",PLAT0768:"The System %1s encountered firmware progress - SMART alert detected on drive.",PLAT0770:"The System %1s encountered firmware progress - unrecoverable boot device failure.",PLAT0789:"Corrupt BIOS detected.",PLAT0790:"The System %1s encountered PCI configuration failure.",PLAT0791:"The System %1s encountered a video subsystem failure.",PLAT0792:"The System %1s encountered a storage subsystem failure.",PLAT0793:"The System %1s encountered a USB subsystem failure.",PLAT0794:"The System %1s has detected no memory in the system.",PLAT0795:"The System %1s encountered a motherboard failure.",PLAT0796:"The System %1s encountered a memory Regulator Voltage Bad.",PLAT0797:"%1s PCI reset is not deasserting.",PLAT0798:"%1s Non-Motherboard Regulator Failure.",PLAT0799:"%1s Power Supply Cable failure.",PLAT0800:"%1s Motherboard regulator failure.",PLAT0801:"%1s System component compatibility mismatch."};module.exports=lme_heci; \ No newline at end of file diff --git a/agents/modules_meshcmd_min/amt-mei.min.js b/agents/modules_meshcmd_min/amt-mei.min.js deleted file mode 100644 index 35b4455b..00000000 --- a/agents/modules_meshcmd_min/amt-mei.min.js +++ /dev/null @@ -1 +0,0 @@ -var Q=require("queue");function amt_heci(){var d=require("events").inherits(this);d.createEvent("error");var u=require("heci");this._ObjectID="pthi";this._rq=new Q();this._setupPTHI=function b(){this._amt=u.create();this._amt.BiosVersionLen=65;this._amt.UnicodeStringLen=20;this._amt.Parent=this;this._amt.on("error",function E(G){if(this.Parent._rq.isEmpty()){this.Parent.emit("error",G)}else{var I=this.Parent._rq.deQueue();var H=I.optional;var F=I.func;H.unshift({Status:-1});F.apply(this.Parent,H);if(!this.Parent._rq.isEmpty()){this.connect(u.GUIDS.AMT,{noPipeline:1})}}});this._amt.on("connect",function D(){this.on("data",function F(H){var I=this.Parent.getCommand(H);var K=this.Parent._rq.deQueue();var J=K.optional;var G=K.func;J.unshift(I);G.apply(this.Parent,J);if(this.Parent._rq.isEmpty()){this.Parent._amt.disconnect();this.Parent._amt=null}else{this.write(this.Parent._rq.peekQueue().send)}});this.write(this.Parent._rq.peekQueue().send)})};function A(D){var E=D.indexOf("\0");if(E>=0){return D.substring(0,E)}else{return D}}this.getCommand=function g(D){var E=D.length==0?(this._rq.peekQueue().cmd|8388608):D.readUInt32LE(4);var F={IsResponse:(E&8388608)==8388608?true:false,Command:(E&8388607),Status:D.length!=0?D.readUInt32LE(12):-1,Data:D.length!=0?D.slice(16):null};return(F)};this.sendCommand=function x(){if(arguments.length<3||typeof(arguments[0])!="number"||typeof(arguments[1])!="object"||typeof(arguments[2])!="function"){throw ("invalid parameters")}var D=[];for(var F=3;F0){M.BiosVersion=M.BiosVersion.substring(0,M.BiosVersion.indexOf("\0"))}K.unshift(M)}else{K.unshift(null)}H.apply(this,K)},D,F)};function C(F,E){if((E==null)&&(typeof(E)!="number")){return null}if(F==null){F=""}var G="";for(var D=0;D0){I.unshift(H.Data.slice(2,2+J).toString())}else{I.unshift(null)}}else{I.unshift(null)}G.apply(this,I)},D,F)};this.getHashHandles=function k(D){var F=[];for(var E=1;E0){this.getCertHashEntry(F.shift(),this._getHashEntrySink,E,G,D,F)}else{G.unshift(D);E.apply(this,G)}};this.getLocalSystemAccount=function m(D){var F=[];for(var E=1;E>24)&255)+"."+((J>>16)&255)+"."+((J>>8)&255)+"."+(J&255);N.unshift(M);K.apply(this,N)}else{N.unshift(null);K.apply(this,N)}},D,I)};this.unprovision=function B(G,D){var H=[];for(var F=2;F>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>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; \ No newline at end of file diff --git a/agents/modules_meshcmd_min/amt-script.min.js b/agents/modules_meshcmd_min/amt-script.min.js deleted file mode 100644 index 244ee297..00000000 --- a/agents/modules_meshcmd_min/amt-script.min.js +++ /dev/null @@ -1 +0,0 @@ -script_functionTable1=["nop","jump","set","print","dialog","getitem","substr","indexof","split","join","length","jsonparse","jsonstr","add","substract","parseint","wsbatchenum","wsput","wscreate","wsdelete","wsexec","scriptspeed","wssubscribe","wsunsubscribe","readchar","signwithdummyca"];script_functionTable2=["encodeuri","decodeuri","passwordcheck","atob","btoa","hex2str","str2hex","random","md5","maketoarray","readshort","readshortx","readint","readsint","readintx","shorttostr","shorttostrx","inttostr","inttostrx"];script_functionTableX2=[encodeURI,decodeURI,passwordcheck,atob,btoa,hex2rstr,rstr2hex,random,rstr_md5,MakeToArray,ReadShort,ReadShortX,ReadInt,ReadSInt,ReadIntX,ShortToStr,ShortToStrX,IntToStr,IntToStrX];function MakeToArray(a){if(!a||a==null||typeof a=="object"){return a}return[a]}function ReadShort(b,a){return(b[a]<<8)+b[a+1]}function ReadShortX(b,a){return(b[a+1]<<8)+b[a]}function ReadInt(b,a){return(b[a]*16777216)+(b[a+1]<<16)+(b[a+2]<<8)+b[a+3]}function ReadSInt(b,a){return(b[a]<<24)+(b[a+1]<<16)+(b[a+2]<<8)+b[a+3]}function ReadIntX(b,a){return(b[a+3]*16777216)+(b[a+2]<<16)+(b[a+1]<<8)+b[a]}function ShortToStr(a){return String.fromCharCode((a>>8)&255,a&255)}function ShortToStrX(a){return String.fromCharCode(a&255,(a>>8)&255)}function IntToStr(a){return String.fromCharCode((a>>24)&255,(a>>16)&255,(a>>8)&255,a&255)}function IntToStrX(a){return String.fromCharCode(a&255,(a>>8)&255,(a>>16)&255,(a>>24)&255)}function btoa(a){return Buffer.from(a).toString("base64")}function atob(b){var c=null;try{c=Buffer.from(b,"base64").toString()}catch(a){console.log(a)}return c}function passwordcheck(g){if(g.length<8){return false}var h=0,d=0,f=0,e=0;for(var b in g){var a=g.charCodeAt(b);if((a>64)&&(a<91)){h=1}else{if((a>96)&&(a<123)){d=1}else{if((a>47)&&(a<58)){f=1}else{e=1}}}}return((h+d+f+e)==4)}function hex2rstr(a){Buffer.from(a,"hex").toString()}function rstr2hex(a){Buffer.from(a).toString("hex")}function random(){return Math.floor(Math.random()*max)}function rstr_md5(a){return hex2rstr(hex_md5(a))}function getItem(b,c,d){for(var a in b){if(b[a][c]==d){return b[a]}}return null}var httpErrorTable={200:"OK",401:"Authentication Error",408:"Timeout Error",601:"WSMAN Parsing Error",602:"Unable to parse HTTP response header",603:"Unexpected HTTP enum response",604:"Unexpected HTTP pull response",998:"Invalid TLS certificate"};module.exports.setup=function(a,c){var b={startvars:c,onCompleted:null};if(a.length<6){console.error("Invalid script length");return null}if(ReadInt(a,0)!=612182341){console.error("Invalid binary script");return null}if(ReadShort(a,4)>1){console.error("Unsupported script version");return null}b.script=a.slice(6);b.reset=function(d){b.stop();b.ip=0;b.variables=c;b.state=1};b.start=function(d){b.stop();if(d==null){b.stepspeed=10}else{b.stepspeed=d}if(b.stepspeed>0){b.timer=setInterval(function(){b.step()},b.stepspeed)}};b.stop=function(){if(b.timer!=null){clearInterval(b.timer)}b.timer=null;b.stepspeed=0};b.getVar=function(d){if(d==undefined){return undefined}return b.getVarEx(d.split("."),b.variables)};b.getVarEx=function(f,g){try{if(f==undefined){return undefined}if(f.length==0){return g}return b.getVarEx(f.slice(1),g[f[0]])}catch(d){return null}};b.setVar=function(d,e){b.setVarEx(d.split("."),b.variables,e)};b.setVarEx=function(d,f,e){if(d.length==1){f[d[0]]=e}else{b.setVarEx(d.slice(1),f[d[0]],e)}};b.step=function(){if(b.state!=1){return}if(b.ip1){var r=l.split("{").pop().split("}").shift();l=l.replace("{"+r+"}",b.getVar(r))}if(k==1){b.variables["__"+p]=decodeURI(l);l="__"+p}h.push(l)}if(k==2||k==3){b.variables["__"+p]=ReadSInt(l,0);h.push("__"+p)}g+=(2+f)}b.ip+=n;var j=[];for(var p=0;p<10;p++){j.push(b.getVar(h[p]))}var q;try{if(m<10000){switch(m){case 0:break;case 1:if(j[2]){if((j[2]=="<"&&j[1]="&&j[1]>=j[3])||(j[2]==">"&&j[1]>j[3])){b.ip=j[0]}}else{b.ip=j[0]}break;case 2:if(h[1]==undefined){delete b.variables[h[0]]}else{b.setVar(h[0],j[1])}break;case 3:var s=b.toString(j[0]);if(s.indexOf("INFO: ")==0){s=s.substring(6)}if(s.indexOf("SUCCESS: ")==0){s=s.substring(9)}if(b.onConsole){b.onConsole(s,b)}else{console.log(s)}break;case 4:b.state=2;b.dialog=true;setDialogMode(11,j[0],j[2],b.xxStepDialogOk,j[1],b);break;case 5:for(var p in j[1]){if(j[1][p][j[2]]==j[3]){q=p}}break;case 6:q=j[1].substr(j[2],j[3]);break;case 7:q=j[1].indexOf(j[2]);break;case 8:q=j[1].split(j[2]);break;case 9:q=j[1].join(j[2]);break;case 10:if(j[1]==null){q=0}else{q=j[1].length}break;case 11:q=JSON.parse(j[1]);break;case 12:q=JSON.stringify(j[1]);break;case 13:q=(j[1]+j[2]);break;case 14:q=(j[1]-j[2]);break;case 15:q=parseInt(j[1]);break;case 16:b.state=2;b.amtstack.BatchEnum(j[0],j[1],b.xxWsmanReturn,b);break;case 17:b.state=2;b.amtstack.Put(j[0],j[1],b.xxWsmanReturn,b);break;case 18:b.state=2;b.amtstack.Create(j[0],j[1],b.xxWsmanReturn,b);break;case 19:b.state=2;b.amtstack.Delete(j[0],j[1],b.xxWsmanReturn,b);break;case 20:b.state=2;b.amtstack.Exec(j[0],j[1],j[2],b.xxWsmanReturn,b,0,j[3]);break;case 21:b.stepspeed=j[0];if(b.timer!=null){clearInterval(b.timer);b.timer=setInterval(function(){b.step()},b.stepspeed)}break;case 22:b.state=2;b.amtstack.Subscribe(j[0],j[1],j[2],b.xxWsmanReturn,b,0,j[3],j[4],j[5],j[6]);break;case 23:b.state=2;b.amtstack.UnSubscribe(j[0],b.xxWsmanReturn,b,0,j[1]);break;case 24:console.log(j[1],j[2],j[1].charCodeAt(j[2]));q=j[1].charCodeAt(j[2]);break;case 25:break;default:b.state=9;console.error("Script Error, unknown command: "+m)}}else{if(m<20000){q=script_functionTableX2[m-10000](j[1],j[2],j[3],j[4],j[5],j[6])}else{}}if(q!=undefined){b.setVar(h[0],q)}}catch(o){if(typeof o=="object"){o=o.message}b.setVar("_exception",o)}}if(b.state==1&&b.ip>=b.script.length){b.state=0;b.stop();if(b.onCompleted){b.onCompleted()}}if(b.onStep){b.onStep(b)}return b};b.xxStepDialogOk=function(d){b.variables.DialogSelect=d;b.state=1;b.dialog=false;if(b.onStep){b.onStep(b)}};b.xxWsmanReturn=function(f,d,e,g){b.setVar(d,e);b.setVar("wsman_result",g);b.setVar("wsman_result_str",((httpErrorTable[g])?(httpErrorTable[g]):("Error #"+g)));b.state=1;if(b.onStep){b.onStep(b)}};b.toString=function(d){if(typeof d=="object"){return JSON.stringify(d)}return d};b.reset();return b};module.exports.compile=function(o,l){var n="",q=o.split("\n"),h={},k=[],s=[];for(var d in q){var p=q[d];if(p.startsWith("##SWAP ")){var u=p.split(" ");if(u.length==3){s[u[1]]=u[2]}}if(p[0]=="#"||p.length==0){continue}for(var u in s){p=p.split(u).join(s[u])}var f=p.match(/"[^"]*"|[^\s"]+/g);if(f.length==0){continue}if(p[0]==":"){h[f[0].toUpperCase()]=n.length;continue}var c=script_functionTable1.indexOf(f[0].toLowerCase());if(c==-1){c=script_functionTable2.indexOf(f[0].toLowerCase());if(c>=0){c+=10000}}if(c==-1){if(l){l("Unabled to compile, unknown command: "+f[0])}return""}var b=ShortToStr(f.length-1);for(var e in f){if(e==0){continue}if(f[e][0]==":"){k.push([f[e],n.length+b.length+7]);b+=ShortToStr(5)+String.fromCharCode(3)+IntToStr(4294967295)}else{var a=parseInt(f[e]);if(a==f[e]){b+=ShortToStr(5)+String.fromCharCode(2)+IntToStr(a)}else{if(f[e][0]=='"'&&f[e][f[e].length-1]=='"'){b+=ShortToStr(f[e].length-1)+String.fromCharCode(1)+f[e].substring(1,f[e].length-1)}else{b+=ShortToStr(f[e].length+1)+String.fromCharCode(0)+f[e]}}}}b=ShortToStr(c)+ShortToStr(b.length+4)+b;n+=b}for(d in k){var g=k[d][0].toUpperCase(),m=k[d][1],t=h[g];if(t==undefined){if(l){l("Unabled to compile, unknown label: "+g)}return""}n=n.substr(0,m)+IntToStr(t)+n.substr(m+4)}return IntToStr(612182341)+ShortToStr(1)+n};module.exports.decompile=function(g,q){var t="",s=6,m=0,n={};if(q>=0){s=q}else{if(g.length<6){return"# Invalid script length"}var p=ReadInt(g,0);var w=ReadShort(g,4);if(p!=612182341){return"# Invalid binary script: "+p}if(w!=1){return"# Invalid script version"}}while(s=0)){t+=":label"+(s-6)+"\n"}for(var k=0;k=10000)&&(h<10000)){t+=script_functionTable2[h-10000]+d+"\n"}}s+=j;if(q>=0){return t}}var u=t.split("\n");t="";for(var k in u){var o=u[k];if(o[0]!=":"){t+=o+"\n"}else{if(n[o]){t+=o+"\n"}}}return t}; \ No newline at end of file diff --git a/agents/modules_meshcmd_min/amt-wsman-duk.min.js b/agents/modules_meshcmd_min/amt-wsman-duk.min.js deleted file mode 100644 index b12434af..00000000 --- a/agents/modules_meshcmd_min/amt-wsman-duk.min.js +++ /dev/null @@ -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.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; \ No newline at end of file diff --git a/agents/modules_meshcmd_min/amt-wsman.min.js b/agents/modules_meshcmd_min/amt-wsman.min.js deleted file mode 100644 index 5508d86f..00000000 --- a/agents/modules_meshcmd_min/amt-wsman.min.js +++ /dev/null @@ -1 +0,0 @@ -function WsmanStackCreateService(){var p={_ObjectID:"WSMAN"};p.NextMessageId=1;p.Address="/wsman";p.xmlParser=require("amt-xml");if(arguments.length==1&&typeof(arguments[0]=="object")){var e=arguments[0].transport;if(e){p.comm=new e(arguments[0])}}else{var e=arguments[0];if(e){p.comm=new e(arguments[1],arguments[2],arguments[3],arguments[4],arguments[5],arguments[6])}}p.PerformAjax=function q(t,r,v,u,s){if(s==null){s=""}p.comm.PerformAjax('
"+t,function(w,x,y){if(x!=200){r(p,null,{Header:{HttpError:x}},x,y);return}var z=p.xmlParser.ParseWsman(w);if(!z||z==null){r(p,null,{Header:{HttpError:x}},601,y)}else{r(p,z.Header.ResourceURI,z,200,y)}},v,u)};p.CancelAllQueries=function d(r){p.comm.CancelAllQueries(r)};p.GetNameFromUrl=function(r){var s=r.lastIndexOf("/");return(s==-1)?r:r.substring(s+1)};p.ExecSubscribe=function n(z,t,C,r,B,y,A,w,D,x){var u="",v="",w="";if(D!=null&&x!=null){u='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#UsernameToken'+D+''+x+"";v=''}if(w!=null){w=""+w+""}if(t=="PushWithAck"){t="dmtf.org/wbem/wsman/1/wsman/PushWithAck"}else{if(t=="Push"){t="xmlsoap.org/ws/2004/08/eventing/DeliveryModes/Push"}}var s="http://schemas.xmlsoap.org/ws/2004/08/eventing/Subscribe"+p.Address+""+z+""+(p.NextMessageId++)+"http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous"+c(A)+u+'
'+C+""+w+""+v+"";p.PerformAjax(s+"
",r,B,y,'xmlns:e="http://schemas.xmlsoap.org/ws/2004/08/eventing" xmlns:m="http://x.com"')};p.ExecUnSubscribe=function o(u,r,w,t,v){var s="http://schemas.xmlsoap.org/ws/2004/08/eventing/Unsubscribe"+p.Address+""+u+""+(p.NextMessageId++)+"http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous"+c(v)+"";p.PerformAjax(s+"",r,w,t,'xmlns:e="http://schemas.xmlsoap.org/ws/2004/08/eventing"')};p.ExecPut=function m(v,u,r,x,t,w){var s="http://schemas.xmlsoap.org/ws/2004/09/transfer/Put"+p.Address+""+v+""+(p.NextMessageId++)+"http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymousPT60.000S"+c(w)+""+b(v,u);p.PerformAjax(s+"",r,x,t)};p.ExecCreate=function f(x,w,r,z,v,y){var u=p.GetNameFromUrl(x);var s="http://schemas.xmlsoap.org/ws/2004/09/transfer/Create"+p.Address+""+x+""+(p.NextMessageId++)+"http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymousPT60S"+c(y)+"';for(var t in w){s+=""+w[t]+""}p.PerformAjax(s+"",r,z,v)};p.ExecDelete=function g(v,u,r,w,t){var s="http://schemas.xmlsoap.org/ws/2004/09/transfer/Delete"+p.Address+""+v+""+(p.NextMessageId++)+"http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymousPT60S"+c(u)+"";p.PerformAjax(s,r,w,t)};p.ExecGet=function i(t,r,u,s){p.PerformAjax("http://schemas.xmlsoap.org/ws/2004/09/transfer/Get"+p.Address+""+t+""+(p.NextMessageId++)+"http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymousPT60S",r,u,s)};p.ExecMethod=function j(y,v,r,t,A,w,z){var s="";for(var u in r){if(r[u]!=null){if(Array.isArray(r[u])){for(var B in r[u]){s+=""+r[u][B]+""}}else{s+=""+r[u]+""}}}p.ExecMethodXml(y,v,s,t,A,w,z)};p.ExecMethodXml=function k(v,t,r,s,x,u,w){p.PerformAjax(v+"/"+t+""+p.Address+""+v+""+(p.NextMessageId++)+"http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymousPT60S"+c(w)+"'+r+"",s,x,u)};p.ExecEnum=function h(t,r,u,s){p.PerformAjax("http://schemas.xmlsoap.org/ws/2004/09/enumeration/Enumerate"+p.Address+""+t+""+(p.NextMessageId++)+'http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymousPT60S',r,u,s)};p.ExecPull=function l(u,s,r,v,t){p.PerformAjax("http://schemas.xmlsoap.org/ws/2004/09/enumeration/Pull"+p.Address+""+u+""+(p.NextMessageId++)+'http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymousPT60S'+s+"99999999",r,v,t)};function b(w,u){if(!w||u==null){return""}var s=p.GetNameFromUrl(w);var v="';for(var t in u){if(!u.hasOwnProperty(t)||t.indexOf("__")===0||t.indexOf("@")===0){continue}if(u[t]==null||typeof u[t]==="function"){continue}if(typeof u[t]==="object"&&u[t]["ReferenceParameters"]){v+=""+u[t].Address+""+u[t]["ReferenceParameters"]["ResourceURI"]+"";var x=u[t]["ReferenceParameters"]["SelectorSet"]["Selector"];if(Array.isArray(x)){for(var r=0;r"+x[r]["Value"]+""}}else{v+=""+x.Value+""}v+=""}else{if(Array.isArray(u[t])){for(var r=0;r"+u[t][r].toString()+""}}else{v+=""+u[t].toString()+""}}}v+="";return v}function a(r){if(!r){return""}var t=" ";for(var s in r){if(!r.hasOwnProperty(s)||s.indexOf("@")!==0){continue}t+=s.substring(1)+'="'+r[s]+'" '}return t}function c(v){if(!v){return""}if(typeof v=="string"){return v}if(v.InstanceID){return''+v.InstanceID+""}var t="";for(var s in v){if(!v.hasOwnProperty(s)){continue}t+='';if(v[s]["ReferenceParameters"]){t+="";t+=""+v[s]["Address"]+""+v[s]["ReferenceParameters"]["ResourceURI"]+"";var u=v[s]["ReferenceParameters"]["SelectorSet"]["Selector"];if(Array.isArray(u)){for(var r=0;r"+u[r]["Value"]+""}}else{t+=""+u.Value+""}t+=""}else{t+=v[s]}t+=""}t+="";return t}return p}module.exports=WsmanStackCreateService; \ No newline at end of file diff --git a/agents/modules_meshcmd_min/amt-xml.min.js b/agents/modules_meshcmd_min/amt-xml.min.js deleted file mode 100644 index 821a1dd7..00000000 --- a/agents/modules_meshcmd_min/amt-xml.min.js +++ /dev/null @@ -1 +0,0 @@ -try{Object.defineProperty(Array.prototype,"peek",{value:function(){return(this.length>0?this[this.length-1]:undefined)}})}catch(e){}module.exports.ParseWsman=function(j){try{if(!j.childNodes){j=_turnToXml(j)}var g={Header:{}},d=j.getElementsByTagName("Header")[0],h;if(!d){d=j.getElementsByTagName("a:Header")[0]}if(!d){return null}for(var f=0;f0){h=a.childNodes[0].localName;if(h.indexOf("_OUTPUT")==h.length-7){h=h.substring(0,h.length-7)}g.Header.Method=h;g.Body=_ParseWsmanRec(a.childNodes[0])}return g}catch(c){console.error("Unable to parse XML: "+j,c);return null}};function _ParseWsmanRec(g){var c,h={};for(var d=0;d0)){b={Value:c};for(var f=0;f';for(var c in d){if(!d.hasOwnProperty(c)||c.indexOf("__")===0||c.indexOf("@")===0){continue}if(d[c]==null||typeof d[c]==="function"){continue}if(typeof d[c]==="object"&&d[c]["ReferenceParameters"]){f+=""+d[c].Address+""+d[c]["ReferenceParameters"]["ResourceURI"]+"";var h=d[c]["ReferenceParameters"]["SelectorSet"]["Selector"];if(Array.isArray(h)){for(var a=0;a"+h[a]["Value"]+""}}else{f+=""+h.Value+""}f+=""}else{if(Array.isArray(d[c])){for(var a=0;a"+d[c][a].toString()+""}}else{f+=""+d[c].toString()+""}}}f+="";return f}function _treeBuilder(){this.tree=[];this.push=function(a){this.tree.push(a)};this.pop=function(){var a=this.tree.pop();if(this.tree.length>0){var b=this.tree.peek();b.childNodes.push(a);b.childElementCount=b.childNodes.length}return(a)};this.peek=function(){return(this.tree.peek())};this.addNamespace=function(g,d){this.tree.peek().nsTable[g]=d;if(this.tree.peek().attributes.length>0){for(var c=0;c=0;--a){if(this.tree[a].nsTable[b]!=null){return(this.tree[a].nsTable[b])}}return null}}function _turnToXml(a){if(a==null){return null}return({childNodes:[_turnToXmlRec(a)],getElementsByTagName:_getElementsByTagName,getChildElementsByTagName:_getChildElementsByTagName,getElementsByTagNameNS:_getElementsByTagNameNS})}function _getElementsByTagNameNS(b,a){var c=[];_xmlTraverseAllRec(this.childNodes,function(d){if(d.localName==a&&(d.namespace==b||b=="*")){c.push(d)}});return c}function _getElementsByTagName(a){var b=[];_xmlTraverseAllRec(this.childNodes,function(c){if(c.localName==a){b.push(c)}});return b}function _getChildElementsByTagName(a){var c=[];if(this.childNodes!=null){for(var b in this.childNodes){if(this.childNodes[b].localName==a){c.push(this.childNodes[b])}}}return(c)}function _getChildElementsByTagNameNS(c,a){var d=[];if(this.childNodes!=null){for(var b in this.childNodes){if(this.childNodes[b].localName==a&&(c=="*"||this.childNodes[b].namespace==c)){d.push(this.childNodes[b])}}}return(d)}function _xmlTraverseAllRec(c,a){for(var b in c){a(c[b]);if(c[b].childNodes){_xmlTraverseAllRec(c[b].childNodes,a)}}}function _turnToXmlRec(v){var m=new _treeBuilder(),q=null,y=v.split("<"),t=[],h=null,g=null;for(var n in y){var z=y[n].split(">"),A=z[0].split(" "),l=A[0];if((l.length>0)&&(l[0]!="?")){if(l[0]!="/"){var a=[],r,s=l.split(" ")[0].split(":"),r=(s.length>1)?s[1]:s[0];Object.defineProperty(a,"get",{value:function(){if(arguments.length==1){for(var i in this){if(this[i].name==arguments[0]){return(this[i])}}}else{if(arguments.length==2){for(var i in this){if(this[i].name==arguments[1]&&(arguments[0]=="*"||this[i].namespace==arguments[0])){return(this[i])}}}else{throw ("attributes.get(): Invalid number of parameters")}}}});m.push({name:l,localName:r,getChildElementsByTagName:_getChildElementsByTagName,getElementsByTagNameNS:_getElementsByTagNameNS,getChildElementsByTagNameNS:_getChildElementsByTagNameNS,attributes:a,childNodes:[],nsTable:{}});if(A.length>0){var u=false;for(var o in A){if(A[o]=="/"){m.peek().namespace=m.peek().name==m.peek().localName?m.getNamespace("*"):m.getNamespace(m.peek().name.substring(0,m.peek().name.indexOf(":")));m.peek().textContent="";q=m.pop();u=true;break}var p=A[o].indexOf("=");if(p>0){var b=A[o].substring(0,p);var d=A[o].substring(p+2,A[o].length-1);var c=m.getNamespace("*");if(b=="xmlns"){m.addNamespace("*",d);c=d}else{if(b.startsWith("xmlns:")){m.addNamespace(b.substring(6),d)}else{var f=b.split(":");if(f.length==2){b=f[1];c=m.getNamespace(f[0])}}}var w={name:b,value:d};if(c!=null){w.namespace=c}m.peek().attributes.push(w)}}if(u){continue}}m.peek().namespace=m.peek().name==m.peek().localName?m.getNamespace("*"):m.getNamespace(m.peek().name.substring(0,m.peek().name.indexOf(":")));if(z[1]){m.peek().textContent=z[1]}}else{q=m.pop()}}}return q}; \ No newline at end of file diff --git a/agents/modules_meshcmd_min/amt.min.js b/agents/modules_meshcmd_min/amt.min.js deleted file mode 100644 index 2cbca422..00000000 --- a/agents/modules_meshcmd_min/amt.min.js +++ /dev/null @@ -1 +0,0 @@ -function AmtStackCreateService(R){var J=new Object();J._ObjectID="AMT";J.wsman=R;J.pfx=["http://intel.com/wbem/wscim/1/amt-schema/1/","http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/","http://intel.com/wbem/wscim/1/ips-schema/1/"];J.PendingEnums=[];J.PendingBatchOperations=0;J.ActiveEnumsCount=0;J.MaxActiveEnumsCount=1;J.onProcessChanged=null;var n=0;var m=0;J.GetPendingActions=function(){return(J.PendingEnums.length*2)+(J.ActiveEnumsCount)+J.wsman.comm.PendingAjax.length+J.wsman.comm.ActiveAjaxCount+J.PendingBatchOperations};function r(){var S=J.GetPendingActions();if(n=J.MaxActiveEnumsCount||J.PendingEnums.length==0){return}var T=J.PendingEnums.shift();J.Enum(T[0],T[1],T[2]);d(0)}J.BatchEnum=function(S,V,T,X,U,W){J.PendingBatchOperations+=(V.length*2);b(S,x(V),T,X,{},U,W);r()};function x(S){return JSON.parse(JSON.stringify(S))}function b(S,X,T,aa,Z,U,Y){J.PendingBatchOperations-=2;var W=X.shift(),V=J.Enum;if(W[0]=="*"){V=J.Get;W=W.substring(1)}V(W,function(ad,ab,ac,ae,af){af[2][ab]={response:(ac==null?null:ac.Body),responses:ac,status:ae};if(af[1].length==0||ae==401||(U!=true&&ae!=200&&ae!=400)){J.PendingBatchOperations-=(X.length*2);r();T.call(J,J,S,af[2],ae,aa)}else{r();b(S,X,T,aa,af[2],Y)}},[S,X,Z],Y);r()}J.BatchGet=function(S,U,T,W,V){h({name:S,names:U,callback:T,current:0,responses:{},tag:W,pri:V});r()};function h(S){if(S.names.length<=S.current){S.callback.call(J,J,S.name,S.responses,200,S.tag)}else{J.wsman.ExecGet(J.CompleteName(S.names[S.current]),function(V,U,T,W){g(S,T,W)},S.pri);S.current++}r()}function g(S,T,U){if(T==null||U!=200){S.callback.call(J,J,S.name,null,U,S.tag)}else{S.responses[T.Header.Method]=T;h(S)}}J.CompleteName=function(S){if(S.indexOf("AMT_")==0){return J.pfx[0]+S}if(S.indexOf("CIM_")==0){return J.pfx[1]+S}if(S.indexOf("IPS_")==0){return J.pfx[2]+S}};J.CompleteExecResponse=function(S){if(S&&S!=null&&S.Body&&(S.Body.ReturnValue!=undefined)){S.Body.ReturnValueStr=J.AmtStatusToStr(S.Body.ReturnValue)}return S};J.RequestPowerStateChange=function(T,S){J.CIM_PowerManagementService_RequestPowerStateChange(T,'
http://schemas.xmlsoap.org/ws/2004/08/addressing
http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ComputerSystemCIM_ComputerSystemManagedSystem',null,null,S)};J.SetBootConfigRole=function(T,S){J.CIM_BootService_SetBootConfigRole('
http://schemas.xmlsoap.org/ws/2004/08/addressing
http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_BootConfigSettingIntel(r) AMT: Boot Configuration 0',T,S)};J.CancelAllQueries=function(S){J.wsman.CancelAllQueries(S)};J.AMT_AgentPresenceWatchdog_RegisterAgent=function(S,V,T,U){J.Exec("AMT_AgentPresenceWatchdog","RegisterAgent",{},S,V,T,U)};J.AMT_AgentPresenceWatchdog_AssertPresence=function(V,S,W,T,U){J.Exec("AMT_AgentPresenceWatchdog","AssertPresence",{SequenceNumber:V},S,W,T,U)};J.AMT_AgentPresenceWatchdog_AssertShutdown=function(V,S,W,T,U){J.Exec("AMT_AgentPresenceWatchdog","AssertShutdown",{SequenceNumber:V},S,W,T,U)};J.AMT_AgentPresenceWatchdog_AddAction=function(X,W,V,T,S,U,aa,Y,Z){J.Exec("AMT_AgentPresenceWatchdog","AddAction",{OldState:X,NewState:W,EventOnTransition:V,ActionSd:T,ActionEac:S},U,aa,Y,Z)};J.AMT_AgentPresenceWatchdog_DeleteAllActions=function(S,V,T,U){J.Exec("AMT_AgentPresenceWatchdog","DeleteAllActions",{},S,V,T,U)};J.AMT_AgentPresenceWatchdogAction_GetActionEac=function(S){J.Exec("AMT_AgentPresenceWatchdogAction","GetActionEac",{},S)};J.AMT_AgentPresenceWatchdogVA_RegisterAgent=function(S){J.Exec("AMT_AgentPresenceWatchdogVA","RegisterAgent",{},S)};J.AMT_AgentPresenceWatchdogVA_AssertPresence=function(T,S){J.Exec("AMT_AgentPresenceWatchdogVA","AssertPresence",{SequenceNumber:T},S)};J.AMT_AgentPresenceWatchdogVA_AssertShutdown=function(T,S){J.Exec("AMT_AgentPresenceWatchdogVA","AssertShutdown",{SequenceNumber:T},S)};J.AMT_AgentPresenceWatchdogVA_AddAction=function(X,W,V,T,S,U){J.Exec("AMT_AgentPresenceWatchdogVA","AddAction",{OldState:X,NewState:W,EventOnTransition:V,ActionSd:T,ActionEac:S},U)};J.AMT_AgentPresenceWatchdogVA_DeleteAllActions=function(S,T){J.Exec("AMT_AgentPresenceWatchdogVA","DeleteAllActions",{_method_dummy:S},T)};J.AMT_AlarmClockService_AddAlarm=function s(S,T){var V=S.InstanceID;var X=S.ElementName;var Y=S.StartTime.Datetime;var W=S.Interval?S.Interval.Datetime:undefined;var U=S.DeleteOnCompletion;var Z=''+V+""+X+''+Y+""+((W!=undefined)?(''+W+""):"")+""+U+"";J.wsman.ExecMethodXml(J.CompleteName("AMT_AlarmClockService"),"AddAlarm",Z,T)};J.AMT_AuditLog_ClearLog=function(S){J.Exec("AMT_AuditLog","ClearLog",{},S)};J.AMT_AuditLog_RequestStateChange=function(T,U,S){J.Exec("AMT_AuditLog","RequestStateChange",{RequestedState:T,TimeoutPeriod:U},S)};J.AMT_AuditLog_ReadRecords=function(T,S,U){J.Exec("AMT_AuditLog","ReadRecords",{StartIndex:T},S,U)};J.AMT_AuditLog_SetAuditLock=function(V,T,U,S){J.Exec("AMT_AuditLog","SetAuditLock",{LockTimeoutInSeconds:V,Flag:T,Handle:U},S)};J.AMT_AuditLog_ExportAuditLogSignature=function(T,S){J.Exec("AMT_AuditLog","ExportAuditLogSignature",{SigningMechanism:T},S)};J.AMT_AuditLog_SetSigningKeyMaterial=function(W,V,U,T,S){J.Exec("AMT_AuditLog","SetSigningKeyMaterial",{SigningMechanismType:W,SigningKey:V,LengthOfCertificates:U,Certificates:T},S)};J.AMT_AuditPolicyRule_SetAuditPolicy=function(U,S,V,W,T){J.Exec("AMT_AuditPolicyRule","SetAuditPolicy",{Enable:U,AuditedAppID:S,EventID:V,PolicyType:W},T)};J.AMT_AuditPolicyRule_SetAuditPolicyBulk=function(U,S,V,W,T){J.Exec("AMT_AuditPolicyRule","SetAuditPolicyBulk",{Enable:U,AuditedAppID:S,EventID:V,PolicyType:W},T)};J.AMT_AuthorizationService_AddUserAclEntryEx=function(V,U,W,S,X,T){J.Exec("AMT_AuthorizationService","AddUserAclEntryEx",{DigestUsername:V,DigestPassword:U,KerberosUserSid:W,AccessPermission:S,Realms:X},T)};J.AMT_AuthorizationService_EnumerateUserAclEntries=function(T,S){J.Exec("AMT_AuthorizationService","EnumerateUserAclEntries",{StartIndex:T},S)};J.AMT_AuthorizationService_GetUserAclEntryEx=function(T,S,U){J.Exec("AMT_AuthorizationService","GetUserAclEntryEx",{Handle:T},S,U)};J.AMT_AuthorizationService_UpdateUserAclEntryEx=function(W,V,U,X,S,Y,T){J.Exec("AMT_AuthorizationService","UpdateUserAclEntryEx",{Handle:W,DigestUsername:V,DigestPassword:U,KerberosUserSid:X,AccessPermission:S,Realms:Y},T)};J.AMT_AuthorizationService_RemoveUserAclEntry=function(T,S){J.Exec("AMT_AuthorizationService","RemoveUserAclEntry",{Handle:T},S)};J.AMT_AuthorizationService_SetAdminAclEntryEx=function(U,T,S){J.Exec("AMT_AuthorizationService","SetAdminAclEntryEx",{Username:U,DigestPassword:T},S)};J.AMT_AuthorizationService_GetAdminAclEntry=function(S){J.Exec("AMT_AuthorizationService","GetAdminAclEntry",{},S)};J.AMT_AuthorizationService_GetAdminAclEntryStatus=function(S){J.Exec("AMT_AuthorizationService","GetAdminAclEntryStatus",{},S)};J.AMT_AuthorizationService_GetAdminNetAclEntryStatus=function(S){J.Exec("AMT_AuthorizationService","GetAdminNetAclEntryStatus",{},S)};J.AMT_AuthorizationService_SetAclEnabledState=function(U,T,S,V){J.Exec("AMT_AuthorizationService","SetAclEnabledState",{Handle:U,Enabled:T},S,V)};J.AMT_AuthorizationService_GetAclEnabledState=function(T,S,U){J.Exec("AMT_AuthorizationService","GetAclEnabledState",{Handle:T},S,U)};J.AMT_EndpointAccessControlService_RequestStateChange=function(T,U,S){J.Exec("AMT_EndpointAccessControlService","RequestStateChange",{RequestedState:T,TimeoutPeriod:U},S)};J.AMT_EndpointAccessControlService_GetPosture=function(T,S){J.Exec("AMT_EndpointAccessControlService","GetPosture",{PostureType:T},S)};J.AMT_EndpointAccessControlService_GetPostureHash=function(T,S){J.Exec("AMT_EndpointAccessControlService","GetPostureHash",{PostureType:T},S)};J.AMT_EndpointAccessControlService_UpdatePostureState=function(T,S){J.Exec("AMT_EndpointAccessControlService","UpdatePostureState",{UpdateType:T},S)};J.AMT_EndpointAccessControlService_GetEacOptions=function(S){J.Exec("AMT_EndpointAccessControlService","GetEacOptions",{},S)};J.AMT_EndpointAccessControlService_SetEacOptions=function(T,U,S){J.Exec("AMT_EndpointAccessControlService","SetEacOptions",{EacVendors:T,PostureHashAlgorithm:U},S)};J.AMT_EnvironmentDetectionSettingData_SetSystemDefensePolicy=function(T,S){J.Exec("AMT_EnvironmentDetectionSettingData","SetSystemDefensePolicy",{Policy:T},S)};J.AMT_EnvironmentDetectionSettingData_EnableVpnRouting=function(T,S){J.Exec("AMT_EnvironmentDetectionSettingData","EnableVpnRouting",{Enable:T},S)};J.AMT_EthernetPortSettings_SetLinkPreference=function(T,U,S){J.Exec("AMT_EthernetPortSettings","SetLinkPreference",{LinkPreference:T,Timeout:U},S)};J.AMT_HeuristicPacketFilterStatistics_ResetSelectedStats=function(T,S){J.Exec("AMT_HeuristicPacketFilterStatistics","ResetSelectedStats",{SelectedStatistics:T},S)};J.AMT_KerberosSettingData_GetCredentialCacheState=function(S){J.Exec("AMT_KerberosSettingData","GetCredentialCacheState",{},S)};J.AMT_KerberosSettingData_SetCredentialCacheState=function(T,S){J.Exec("AMT_KerberosSettingData","SetCredentialCacheState",{Enable:T},S)};J.AMT_MessageLog_CancelIteration=function(T,S){J.Exec("AMT_MessageLog","CancelIteration",{IterationIdentifier:T},S)};J.AMT_MessageLog_RequestStateChange=function(T,U,S){J.Exec("AMT_MessageLog","RequestStateChange",{RequestedState:T,TimeoutPeriod:U},S)};J.AMT_MessageLog_ClearLog=function(S){J.Exec("AMT_MessageLog","ClearLog",{},S)};J.AMT_MessageLog_GetRecords=function(T,U,S,V){J.Exec("AMT_MessageLog","GetRecords",{IterationIdentifier:T,MaxReadRecords:U},S,V)};J.AMT_MessageLog_GetRecord=function(T,U,S){J.Exec("AMT_MessageLog","GetRecord",{IterationIdentifier:T,PositionToNext:U},S)};J.AMT_MessageLog_PositionAtRecord=function(T,U,V,S){J.Exec("AMT_MessageLog","PositionAtRecord",{IterationIdentifier:T,MoveAbsolute:U,RecordNumber:V},S)};J.AMT_MessageLog_PositionToFirstRecord=function(S,T){J.Exec("AMT_MessageLog","PositionToFirstRecord",{},S,T)};J.AMT_MessageLog_FreezeLog=function(T,S){J.Exec("AMT_MessageLog","FreezeLog",{Freeze:T},S)};J.AMT_PublicKeyManagementService_AddCRL=function(U,T,S){J.Exec("AMT_PublicKeyManagementService","AddCRL",{Url:U,SerialNumbers:T},S)};J.AMT_PublicKeyManagementService_ResetCRLList=function(S,T){J.Exec("AMT_PublicKeyManagementService","ResetCRLList",{_method_dummy:S},T)};J.AMT_PublicKeyManagementService_AddCertificate=function(T,S,U){J.Exec("AMT_PublicKeyManagementService","AddCertificate",{CertificateBlob:T},S,U)};J.AMT_PublicKeyManagementService_AddTrustedRootCertificate=function(T,S){J.Exec("AMT_PublicKeyManagementService","AddTrustedRootCertificate",{CertificateBlob:T},S)};J.AMT_PublicKeyManagementService_AddKey=function(T,S){J.Exec("AMT_PublicKeyManagementService","AddKey",{KeyBlob:T},S)};J.AMT_PublicKeyManagementService_GeneratePKCS10Request=function(U,T,V,S){J.Exec("AMT_PublicKeyManagementService","GeneratePKCS10Request",{KeyPair:U,DNName:T,Usage:V},S)};J.AMT_PublicKeyManagementService_GeneratePKCS10RequestEx=function(T,V,U,S){J.Exec("AMT_PublicKeyManagementService","GeneratePKCS10RequestEx",{KeyPair:T,SigningAlgorithm:V,NullSignedCertificateRequest:U},S)};J.AMT_PublicKeyManagementService_GenerateKeyPair=function(T,U,S){J.Exec("AMT_PublicKeyManagementService","GenerateKeyPair",{KeyAlgorithm:T,KeyLength:U},S)};J.AMT_RedirectionService_RequestStateChange=function(T,S){J.Exec("AMT_RedirectionService","RequestStateChange",{RequestedState:T},S)};J.AMT_RedirectionService_TerminateSession=function(T,S){J.Exec("AMT_RedirectionService","TerminateSession",{SessionType:T},S)};J.AMT_RemoteAccessService_AddMpServer=function(S,X,Z,T,V,aa,Y,W,U){J.Exec("AMT_RemoteAccessService","AddMpServer",{AccessInfo:S,InfoFormat:X,Port:Z,AuthMethod:T,Certificate:V,Username:aa,Password:Y,CN:W},U)};J.AMT_RemoteAccessService_AddRemoteAccessPolicyRule=function(V,W,T,U,S){J.Exec("AMT_RemoteAccessService","AddRemoteAccessPolicyRule",{Trigger:V,TunnelLifeTime:W,ExtendedData:T,MpServer:U},S)};J.AMT_RemoteAccessService_CloseRemoteAccessConnection=function(S,T){J.Exec("AMT_RemoteAccessService","CloseRemoteAccessConnection",{_method_dummy:S},T)};J.AMT_SetupAndConfigurationService_CommitChanges=function(S,T,U){J.Exec("AMT_SetupAndConfigurationService","CommitChanges",{_method_dummy:S},T,U)};J.AMT_SetupAndConfigurationService_Unprovision=function(T,S){J.Exec("AMT_SetupAndConfigurationService","Unprovision",{ProvisioningMode:T},S)};J.AMT_SetupAndConfigurationService_PartialUnprovision=function(S,T){J.Exec("AMT_SetupAndConfigurationService","PartialUnprovision",{_method_dummy:S},T)};J.AMT_SetupAndConfigurationService_ResetFlashWearOutProtection=function(S,T){J.Exec("AMT_SetupAndConfigurationService","ResetFlashWearOutProtection",{_method_dummy:S},T)};J.AMT_SetupAndConfigurationService_ExtendProvisioningPeriod=function(T,S){J.Exec("AMT_SetupAndConfigurationService","ExtendProvisioningPeriod",{Duration:T},S)};J.AMT_SetupAndConfigurationService_SetMEBxPassword=function(T,S){J.Exec("AMT_SetupAndConfigurationService","SetMEBxPassword",{Password:T},S)};J.AMT_SetupAndConfigurationService_SetTLSPSK=function(T,U,S){J.Exec("AMT_SetupAndConfigurationService","SetTLSPSK",{PID:T,PPS:U},S)};J.AMT_SetupAndConfigurationService_GetProvisioningAuditRecord=function(S){J.Exec("AMT_SetupAndConfigurationService","GetProvisioningAuditRecord",{},S)};J.AMT_SetupAndConfigurationService_GetUuid=function(S){J.Exec("AMT_SetupAndConfigurationService","GetUuid",{},S)};J.AMT_SetupAndConfigurationService_GetUnprovisionBlockingComponents=function(S){J.Exec("AMT_SetupAndConfigurationService","GetUnprovisionBlockingComponents",{},S)};J.AMT_SetupAndConfigurationService_GetProvisioningAuditRecordV2=function(S){J.Exec("AMT_SetupAndConfigurationService","GetProvisioningAuditRecordV2",{},S)};J.AMT_SystemDefensePolicy_GetTimeout=function(S){J.Exec("AMT_SystemDefensePolicy","GetTimeout",{},S)};J.AMT_SystemDefensePolicy_SetTimeout=function(T,S){J.Exec("AMT_SystemDefensePolicy","SetTimeout",{Timeout:T},S)};J.AMT_SystemDefensePolicy_UpdateStatistics=function(T,V,S,X,U,W){J.Exec("AMT_SystemDefensePolicy","UpdateStatistics",{NetworkInterface:T,ResetOnRead:V},S,X,U,W)};J.AMT_SystemPowerScheme_SetPowerScheme=function(S,T,U){J.Exec("AMT_SystemPowerScheme","SetPowerScheme",{},S,U,0,{InstanceID:T})};J.AMT_TimeSynchronizationService_GetLowAccuracyTimeSynch=function(S,T){J.Exec("AMT_TimeSynchronizationService","GetLowAccuracyTimeSynch",{},S,T)};J.AMT_TimeSynchronizationService_SetHighAccuracyTimeSynch=function(T,V,W,S,U){J.Exec("AMT_TimeSynchronizationService","SetHighAccuracyTimeSynch",{Ta0:T,Tm1:V,Tm2:W},S,U)};J.AMT_TLSCredentialContext_Create=function t(T,U,S,V){J.Create("AMT_TLSCredentialContext",{ElementInContext:T,ElementProvidingContext:U},S,V)};J.AMT_UserInitiatedConnectionService_RequestStateChange=function(T,U,S){J.Exec("AMT_UserInitiatedConnectionService","RequestStateChange",{RequestedState:T,TimeoutPeriod:U},S)};J.AMT_WebUIService_RequestStateChange=function(T,V,S,U){J.Exec("AMT_WebUIService","RequestStateChange",{RequestedState:T,TimeoutPeriod:V},S,U)};J.AMT_WiFiPortConfigurationService_AddWiFiSettings=function(W,X,V,U,S,T){J.ExecWithXml("AMT_WiFiPortConfigurationService","AddWiFiSettings",{WiFiEndpoint:W,WiFiEndpointSettingsInput:X,IEEE8021xSettingsInput:V,ClientCredential:U,CACredential:S},T)};J.AMT_WiFiPortConfigurationService_UpdateWiFiSettings=function(W,X,V,U,S,T){J.ExecWithXml("AMT_WiFiPortConfigurationService","UpdateWiFiSettings",{WiFiEndpointSettings:W,WiFiEndpointSettingsInput:X,IEEE8021xSettingsInput:V,ClientCredential:U,CACredential:S},T)};J.AMT_WiFiPortConfigurationService_DeleteAllITProfiles=function(S,T){J.Exec("AMT_WiFiPortConfigurationService","DeleteAllITProfiles",{_method_dummy:S},T)};J.AMT_WiFiPortConfigurationService_DeleteAllUserProfiles=function(S,T){J.Exec("AMT_WiFiPortConfigurationService","DeleteAllUserProfiles",{_method_dummy:S},T)};J.CIM_Account_RequestStateChange=function(T,U,S){J.Exec("CIM_Account","RequestStateChange",{RequestedState:T,TimeoutPeriod:U},S)};J.CIM_AccountManagementService_CreateAccount=function(U,S,T){J.Exec("CIM_AccountManagementService","CreateAccount",{System:U,AccountTemplate:S},T)};J.CIM_BootConfigSetting_ChangeBootOrder=function(T,S){J.Exec("CIM_BootConfigSetting","ChangeBootOrder",{Source:T},S)};J.CIM_BootService_SetBootConfigRole=function(S,U,T){J.Exec("CIM_BootService","SetBootConfigRole",{BootConfigSetting:S,Role:U},T,0,1)};J.CIM_Card_ConnectorPower=function(T,U,S){J.Exec("CIM_Card","ConnectorPower",{Connector:T,PoweredOn:U},S)};J.CIM_Card_IsCompatible=function(T,S){J.Exec("CIM_Card","IsCompatible",{ElementToCheck:T},S)};J.CIM_Chassis_IsCompatible=function(T,S){J.Exec("CIM_Chassis","IsCompatible",{ElementToCheck:T},S)};J.CIM_Fan_SetSpeed=function(T,S){J.Exec("CIM_Fan","SetSpeed",{DesiredSpeed:T},S)};J.CIM_KVMRedirectionSAP_RequestStateChange=function(T,U,S){J.Exec("CIM_KVMRedirectionSAP","RequestStateChange",{RequestedState:T},S)};J.CIM_MediaAccessDevice_LockMedia=function(T,S){J.Exec("CIM_MediaAccessDevice","LockMedia",{Lock:T},S)};J.CIM_MediaAccessDevice_SetPowerState=function(T,U,S){J.Exec("CIM_MediaAccessDevice","SetPowerState",{PowerState:T,Time:U},S)};J.CIM_MediaAccessDevice_Reset=function(S){J.Exec("CIM_MediaAccessDevice","Reset",{},S)};J.CIM_MediaAccessDevice_EnableDevice=function(T,S){J.Exec("CIM_MediaAccessDevice","EnableDevice",{Enabled:T},S)};J.CIM_MediaAccessDevice_OnlineDevice=function(T,S){J.Exec("CIM_MediaAccessDevice","OnlineDevice",{Online:T},S)};J.CIM_MediaAccessDevice_QuiesceDevice=function(T,S){J.Exec("CIM_MediaAccessDevice","QuiesceDevice",{Quiesce:T},S)};J.CIM_MediaAccessDevice_SaveProperties=function(S){J.Exec("CIM_MediaAccessDevice","SaveProperties",{},S)};J.CIM_MediaAccessDevice_RestoreProperties=function(S){J.Exec("CIM_MediaAccessDevice","RestoreProperties",{},S)};J.CIM_MediaAccessDevice_RequestStateChange=function(T,U,S){J.Exec("CIM_MediaAccessDevice","RequestStateChange",{RequestedState:T,TimeoutPeriod:U},S)};J.CIM_PhysicalFrame_IsCompatible=function(T,S){J.Exec("CIM_PhysicalFrame","IsCompatible",{ElementToCheck:T},S)};J.CIM_PhysicalPackage_IsCompatible=function(T,S){J.Exec("CIM_PhysicalPackage","IsCompatible",{ElementToCheck:T},S)};J.CIM_PowerManagementService_RequestPowerStateChange=function(U,T,V,W,S){J.Exec("CIM_PowerManagementService","RequestPowerStateChange",{PowerState:U,ManagedElement:T,Time:V,TimeoutPeriod:W},S,0,1)};J.CIM_PowerSupply_SetPowerState=function(T,U,S){J.Exec("CIM_PowerSupply","SetPowerState",{PowerState:T,Time:U},S)};J.CIM_PowerSupply_Reset=function(S){J.Exec("CIM_PowerSupply","Reset",{},S)};J.CIM_PowerSupply_EnableDevice=function(T,S){J.Exec("CIM_PowerSupply","EnableDevice",{Enabled:T},S)};J.CIM_PowerSupply_OnlineDevice=function(T,S){J.Exec("CIM_PowerSupply","OnlineDevice",{Online:T},S)};J.CIM_PowerSupply_QuiesceDevice=function(T,S){J.Exec("CIM_PowerSupply","QuiesceDevice",{Quiesce:T},S)};J.CIM_PowerSupply_SaveProperties=function(S){J.Exec("CIM_PowerSupply","SaveProperties",{},S)};J.CIM_PowerSupply_RestoreProperties=function(S){J.Exec("CIM_PowerSupply","RestoreProperties",{},S)};J.CIM_PowerSupply_RequestStateChange=function(T,U,S){J.Exec("CIM_PowerSupply","RequestStateChange",{RequestedState:T,TimeoutPeriod:U},S)};J.CIM_Processor_SetPowerState=function(T,U,S){J.Exec("CIM_Processor","SetPowerState",{PowerState:T,Time:U},S)};J.CIM_Processor_Reset=function(S){J.Exec("CIM_Processor","Reset",{},S)};J.CIM_Processor_EnableDevice=function(T,S){J.Exec("CIM_Processor","EnableDevice",{Enabled:T},S)};J.CIM_Processor_OnlineDevice=function(T,S){J.Exec("CIM_Processor","OnlineDevice",{Online:T},S)};J.CIM_Processor_QuiesceDevice=function(T,S){J.Exec("CIM_Processor","QuiesceDevice",{Quiesce:T},S)};J.CIM_Processor_SaveProperties=function(S){J.Exec("CIM_Processor","SaveProperties",{},S)};J.CIM_Processor_RestoreProperties=function(S){J.Exec("CIM_Processor","RestoreProperties",{},S)};J.CIM_Processor_RequestStateChange=function(T,U,S){J.Exec("CIM_Processor","RequestStateChange",{RequestedState:T,TimeoutPeriod:U},S)};J.CIM_RecordLog_ClearLog=function(S){J.Exec("CIM_RecordLog","ClearLog",{},S)};J.CIM_RecordLog_RequestStateChange=function(T,U,S){J.Exec("CIM_RecordLog","RequestStateChange",{RequestedState:T,TimeoutPeriod:U},S)};J.CIM_RedirectionService_RequestStateChange=function(T,U,S){J.Exec("CIM_RedirectionService","RequestStateChange",{RequestedState:T,TimeoutPeriod:U},S)};J.CIM_Sensor_SetPowerState=function(T,U,S){J.Exec("CIM_Sensor","SetPowerState",{PowerState:T,Time:U},S)};J.CIM_Sensor_Reset=function(S){J.Exec("CIM_Sensor","Reset",{},S)};J.CIM_Sensor_EnableDevice=function(T,S){J.Exec("CIM_Sensor","EnableDevice",{Enabled:T},S)};J.CIM_Sensor_OnlineDevice=function(T,S){J.Exec("CIM_Sensor","OnlineDevice",{Online:T},S)};J.CIM_Sensor_QuiesceDevice=function(T,S){J.Exec("CIM_Sensor","QuiesceDevice",{Quiesce:T},S)};J.CIM_Sensor_SaveProperties=function(S){J.Exec("CIM_Sensor","SaveProperties",{},S)};J.CIM_Sensor_RestoreProperties=function(S){J.Exec("CIM_Sensor","RestoreProperties",{},S)};J.CIM_Sensor_RequestStateChange=function(T,U,S){J.Exec("CIM_Sensor","RequestStateChange",{RequestedState:T,TimeoutPeriod:U},S)};J.CIM_StatisticalData_ResetSelectedStats=function(T,S){J.Exec("CIM_StatisticalData","ResetSelectedStats",{SelectedStatistics:T},S)};J.CIM_Watchdog_KeepAlive=function(S){J.Exec("CIM_Watchdog","KeepAlive",{},S)};J.CIM_Watchdog_SetPowerState=function(T,U,S){J.Exec("CIM_Watchdog","SetPowerState",{PowerState:T,Time:U},S)};J.CIM_Watchdog_Reset=function(S){J.Exec("CIM_Watchdog","Reset",{},S)};J.CIM_Watchdog_EnableDevice=function(T,S){J.Exec("CIM_Watchdog","EnableDevice",{Enabled:T},S)};J.CIM_Watchdog_OnlineDevice=function(T,S){J.Exec("CIM_Watchdog","OnlineDevice",{Online:T},S)};J.CIM_Watchdog_QuiesceDevice=function(T,S){J.Exec("CIM_Watchdog","QuiesceDevice",{Quiesce:T},S)};J.CIM_Watchdog_SaveProperties=function(S){J.Exec("CIM_Watchdog","SaveProperties",{},S)};J.CIM_Watchdog_RestoreProperties=function(S){J.Exec("CIM_Watchdog","RestoreProperties",{},S)};J.CIM_Watchdog_RequestStateChange=function(T,U,S){J.Exec("CIM_Watchdog","RequestStateChange",{RequestedState:T,TimeoutPeriod:U},S)};J.CIM_WiFiPort_SetPowerState=function(T,U,S){J.Exec("CIM_WiFiPort","SetPowerState",{PowerState:T,Time:U},S)};J.CIM_WiFiPort_Reset=function(S){J.Exec("CIM_WiFiPort","Reset",{},S)};J.CIM_WiFiPort_EnableDevice=function(T,S){J.Exec("CIM_WiFiPort","EnableDevice",{Enabled:T},S)};J.CIM_WiFiPort_OnlineDevice=function(T,S){J.Exec("CIM_WiFiPort","OnlineDevice",{Online:T},S)};J.CIM_WiFiPort_QuiesceDevice=function(T,S){J.Exec("CIM_WiFiPort","QuiesceDevice",{Quiesce:T},S)};J.CIM_WiFiPort_SaveProperties=function(S){J.Exec("CIM_WiFiPort","SaveProperties",{},S)};J.CIM_WiFiPort_RestoreProperties=function(S){J.Exec("CIM_WiFiPort","RestoreProperties",{},S)};J.CIM_WiFiPort_RequestStateChange=function(T,U,S){J.Exec("CIM_WiFiPort","RequestStateChange",{RequestedState:T,TimeoutPeriod:U},S)};J.IPS_HostBasedSetupService_Setup=function(W,X,V,T,Y,U,S){J.Exec("IPS_HostBasedSetupService","Setup",{NetAdminPassEncryptionType:W,NetworkAdminPassword:X,McNonce:V,Certificate:T,SigningAlgorithm:Y,DigitalSignature:U},S)};J.IPS_HostBasedSetupService_AddNextCertInChain=function(V,T,U,S){J.Exec("IPS_HostBasedSetupService","AddNextCertInChain",{NextCertificate:V,IsLeafCertificate:T,IsRootCertificate:U},S)};J.IPS_HostBasedSetupService_AdminSetup=function(V,W,U,X,T,S){J.Exec("IPS_HostBasedSetupService","AdminSetup",{NetAdminPassEncryptionType:V,NetworkAdminPassword:W,McNonce:U,SigningAlgorithm:X,DigitalSignature:T},S)};J.IPS_HostBasedSetupService_UpgradeClientToAdmin=function(U,V,T,S){J.Exec("IPS_HostBasedSetupService","UpgradeClientToAdmin",{McNonce:U,SigningAlgorithm:V,DigitalSignature:T},S)};J.IPS_HostBasedSetupService_DisableClientControlMode=function(S,T){J.Exec("IPS_HostBasedSetupService","DisableClientControlMode",{_method_dummy:S},T)};J.IPS_KVMRedirectionSettingData_TerminateSession=function(S){J.Exec("IPS_KVMRedirectionSettingData","TerminateSession",{},S)};J.IPS_KVMRedirectionSettingData_DataChannelRead=function(S){J.Exec("IPS_KVMRedirectionSettingData","DataChannelRead",{},S)};J.IPS_KVMRedirectionSettingData_DataChannelWrite=function(T,S){J.Exec("IPS_KVMRedirectionSettingData","DataChannelWrite",{DataMessage:T},S)};J.IPS_OptInService_StartOptIn=function(S){J.Exec("IPS_OptInService","StartOptIn",{},S)};J.IPS_OptInService_CancelOptIn=function(S){J.Exec("IPS_OptInService","CancelOptIn",{},S)};J.IPS_OptInService_SendOptInCode=function(T,S){J.Exec("IPS_OptInService","SendOptInCode",{OptInCode:T},S)};J.IPS_OptInService_StartService=function(S){J.Exec("IPS_OptInService","StartService",{},S)};J.IPS_OptInService_StopService=function(S){J.Exec("IPS_OptInService","StopService",{},S)};J.IPS_OptInService_RequestStateChange=function(T,U,S){J.Exec("IPS_OptInService","RequestStateChange",{RequestedState:T,TimeoutPeriod:U},S)};J.IPS_ProvisioningRecordLog_RequestStateChange=function(T,U,S){J.Exec("IPS_ProvisioningRecordLog","RequestStateChange",{RequestedState:T,TimeoutPeriod:U},S)};J.IPS_ProvisioningRecordLog_ClearLog=function(S,T){J.Exec("IPS_ProvisioningRecordLog","ClearLog",{_method_dummy:S},T)};J.IPS_SecIOService_RequestStateChange=function(T,U,S){J.Exec("IPS_SecIOService","RequestStateChange",{RequestedState:T,TimeoutPeriod:U},S)};J.AmtStatusToStr=function(S){if(J.AmtStatusCodes[S]){return J.AmtStatusCodes[S]}else{return"UNKNOWN_ERROR"}};J.AmtStatusCodes={0:"SUCCESS",1:"INTERNAL_ERROR",2:"NOT_READY",3:"INVALID_PT_MODE",4:"INVALID_MESSAGE_LENGTH",5:"TABLE_FINGERPRINT_NOT_AVAILABLE",6:"INTEGRITY_CHECK_FAILED",7:"UNSUPPORTED_ISVS_VERSION",8:"APPLICATION_NOT_REGISTERED",9:"INVALID_REGISTRATION_DATA",10:"APPLICATION_DOES_NOT_EXIST",11:"NOT_ENOUGH_STORAGE",12:"INVALID_NAME",13:"BLOCK_DOES_NOT_EXIST",14:"INVALID_BYTE_OFFSET",15:"INVALID_BYTE_COUNT",16:"NOT_PERMITTED",17:"NOT_OWNER",18:"BLOCK_LOCKED_BY_OTHER",19:"BLOCK_NOT_LOCKED",20:"INVALID_GROUP_PERMISSIONS",21:"GROUP_DOES_NOT_EXIST",22:"INVALID_MEMBER_COUNT",23:"MAX_LIMIT_REACHED",24:"INVALID_AUTH_TYPE",25:"AUTHENTICATION_FAILED",26:"INVALID_DHCP_MODE",27:"INVALID_IP_ADDRESS",28:"INVALID_DOMAIN_NAME",29:"UNSUPPORTED_VERSION",30:"REQUEST_UNEXPECTED",31:"INVALID_TABLE_TYPE",32:"INVALID_PROVISIONING_STATE",33:"UNSUPPORTED_OBJECT",34:"INVALID_TIME",35:"INVALID_INDEX",36:"INVALID_PARAMETER",37:"INVALID_NETMASK",38:"FLASH_WRITE_LIMIT_EXCEEDED",39:"INVALID_IMAGE_LENGTH",40:"INVALID_IMAGE_SIGNATURE",41:"PROPOSE_ANOTHER_VERSION",42:"INVALID_PID_FORMAT",43:"INVALID_PPS_FORMAT",44:"BIST_COMMAND_BLOCKED",45:"CONNECTION_FAILED",46:"CONNECTION_TOO_MANY",47:"RNG_GENERATION_IN_PROGRESS",48:"RNG_NOT_READY",49:"CERTIFICATE_NOT_READY",1024:"DISABLED_BY_POLICY",2048:"NETWORK_IF_ERROR_BASE",2049:"UNSUPPORTED_OEM_NUMBER",2050:"UNSUPPORTED_BOOT_OPTION",2051:"INVALID_COMMAND",2052:"INVALID_SPECIAL_COMMAND",2053:"INVALID_HANDLE",2054:"INVALID_PASSWORD",2055:"INVALID_REALM",2056:"STORAGE_ACL_ENTRY_IN_USE",2057:"DATA_MISSING",2058:"DUPLICATE",2059:"EVENTLOG_FROZEN",2060:"PKI_MISSING_KEYS",2061:"PKI_GENERATING_KEYS",2062:"INVALID_KEY",2063:"INVALID_CERT",2064:"CERT_KEY_NOT_MATCH",2065:"MAX_KERB_DOMAIN_REACHED",2066:"UNSUPPORTED",2067:"INVALID_PRIORITY",2068:"NOT_FOUND",2069:"INVALID_CREDENTIALS",2070:"INVALID_PASSPHRASE",2072:"NO_ASSOCIATION",2075:"AUDIT_FAIL",2076:"BLOCKING_COMPONENT",2081:"USER_CONSENT_REQUIRED",4096:"APP_INTERNAL_ERROR",4097:"NOT_INITIALIZED",4098:"LIB_VERSION_UNSUPPORTED",4099:"INVALID_PARAM",4100:"RESOURCES",4101:"HARDWARE_ACCESS_ERROR",4102:"REQUESTOR_NOT_REGISTERED",4103:"NETWORK_ERROR",4104:"PARAM_BUFFER_TOO_SHORT",4105:"COM_NOT_INITIALIZED_IN_THREAD",4106:"URL_REQUIRED"};J.GetMessageLog=function(S,T){J.AMT_MessageLog_PositionToFirstRecord(k,[S,T,[]])};function k(U,S,T,V,W){if(V!=200||T.Body.ReturnValue!="0"){W[0](J,null,W[2],V);return}J.AMT_MessageLog_GetRecords(T.Body.IterationIdentifier,390,l,W)}function l(Z,W,Y,aa,ac){if(aa!=200||Y.Body.ReturnValue!="0"){ac[0](J,null,ac[2],aa);return}var U,V,ae,T,S=ac[2],ab=new Date(),ad,X=Y.Body.RecordArray;if(typeof X==="string"){Y.Body.RecordArray=[Y.Body.RecordArray]}for(U in X){T=Buffer.from(X[U],"base64");if(T!=null){ad=M(T,0);if((ad>0)&&(ad<4294967295)){ae={DeviceAddress:T[4],EventSensorType:T[5],EventType:T[6],EventOffset:T[7],EventSourceType:T[8],EventSeverity:T[9],SensorNumber:T[10],Entity:T[11],EntityInstance:T[12],EventData:[],Time:new Date((ad+(ab.getTimezoneOffset()*60))*1000)};for(V=13;V<21;V++){ae.EventData.push(T[V])}ae.EntityStr=o[ae.Entity];ae.Desc=j(ae.EventSensorType,ae.EventOffset,ae.EventData,ae.Entity);if(!ae.EntityStr){ae.EntityStr="Unknown"}S.push(ae)}}}if(Y.Body.NoMoreRecords!=true){J.AMT_MessageLog_GetRecords(Y.Body.IterationIdentifier,390,l,[ac[0],S,ac[2]])}else{ac[0](J,S,ac[2])}}var f="Platform firmware (e.g. BIOS)|SMI handler|ISV system management software|Alert ASIC|IPMI|BIOS vendor|System board set vendor|System integrator|Third party add-in|OSV|NIC|System management card".split("|");var p="Unspecified.|No system memory is physically installed in the system.|No usable system memory, all installed memory has experienced an unrecoverable failure.|Unrecoverable hard-disk/ATAPI/IDE device failure.|Unrecoverable system-board failure.|Unrecoverable diskette subsystem failure.|Unrecoverable hard-disk controller failure.|Unrecoverable PS/2 or USB keyboard failure.|Removable boot media not found.|Unrecoverable video controller failure.|No video device detected.|Firmware (BIOS) ROM corruption detected.|CPU voltage mismatch (processors that share same supply have mismatched voltage requirements)|CPU speed matching failure".split("|");var q="Unspecified.|Memory initialization.|Starting hard-disk initialization and test|Secondary processor(s) initialization|User authentication|User-initiated system setup|USB resource configuration|PCI resource configuration|Option ROM initialization|Video initialization|Cache initialization|SM Bus initialization|Keyboard controller initialization|Embedded controller/management controller initialization|Docking station attachment|Enabling docking station|Docking station ejection|Disabling docking station|Calling operating system wake-up vector|Starting operating system boot process|Baseboard or motherboard initialization|reserved|Floppy initialization|Keyboard test|Pointing device test|Primary processor initialization".split("|");var o="Unspecified|Other|Unknown|Processor|Disk|Peripheral|System management module|System board|Memory module|Processor module|Power supply|Add in card|Front panel board|Back panel board|Power system board|Drive backplane|System internal expansion board|Other system board|Processor board|Power unit|Power module|Power management board|Chassis back panel board|System chassis|Sub chassis|Other chassis board|Disk drive bay|Peripheral bay|Device bay|Fan cooling|Cooling unit|Cable interconnect|Memory device|System management software|BIOS|Intel(r) ME|System bus|Group|Intel(r) ME|External environment|Battery|Processing blade|Connectivity switch|Processor/memory module|I/O module|Processor I/O module|Management controller firmware|IPMI channel|PCI bus|PCI express bus|SCSI bus|SATA/SAS bus|Processor front side bus".split("|");J.RealmNames="||Redirection|PT Administration|Hardware Asset|Remote Control|Storage|Event Manager|Storage Admin|Agent Presence Local|Agent Presence Remote|Circuit Breaker|Network Time|General Information|Firmware Update|EIT|LocalUN|Endpoint Access Control|Endpoint Access Control Admin|Event Log Reader|Audit Log|ACL Realm|||Local System".split("|");J.WatchdogCurrentStates={1:"Not Started",2:"Stopped",4:"Running",8:"Expired",16:"Suspended"};function j(V,U,T,S){if(V==15){if(T[0]==235){return"Invalid Data"}if(U==0){return p[T[1]]}return q[T[1]]}if(V==18&&T[0]==170){return"Agent watchdog "+char2hex(T[4])+char2hex(T[3])+char2hex(T[2])+char2hex(T[1])+"-"+char2hex(T[6])+char2hex(T[5])+"-... changed to "+J.WatchdogCurrentStates[T[7]]}if(V==6){return"Authentication failed "+(T[1]+(T[2]<<8))+" times. The system may be under attack."}if(V==30){return"No bootable media"}if(V==32){return"Operating system lockup or power interrupt"}if(V==35){return"System boot failure"}if(V==37){return"System firmware started (at least one CPU is properly executing)."}return"Unknown Sensor Type #"+V}var a={16:"Security Admin",17:"RCO",18:"Redirection Manager",19:"Firmware Update Manager",20:"Security Audit Log",21:"Network Time",22:"Network Administration",23:"Storage Administration",24:"Event Manager",25:"Circuit Breaker Manager",26:"Agent Presence Manager",27:"Wireless Configuration",28:"EAC",29:"KVM",30:"User Opt-In Events",32:"Screen Blanking",33:"Watchdog Events",1600:"Provisioning Started",1601:"Provisioning Completed",1602:"ACL Entry Added",1603:"ACL Entry Modified",1604:"ACL Entry Removed",1605:"ACL Access with Invalid Credentials",1606:"ACL Entry State",1607:"TLS State Changed",1608:"TLS Server Certificate Set",1609:"TLS Server Certificate Remove",1610:"TLS Trusted Root Certificate Added",1611:"TLS Trusted Root Certificate Removed",1612:"TLS Preshared Key Set",1613:"Kerberos Settings Modified",1614:"Kerberos Master Key Modified",1615:"Flash Wear out Counters Reset",1616:"Power Package Modified",1617:"Set Realm Authentication Mode",1618:"Upgrade Client to Admin Control Mode",1619:"Unprovisioning Started",1700:"Performed Power Up",1701:"Performed Power Down",1702:"Performed Power Cycle",1703:"Performed Reset",1704:"Set Boot Options",1800:"IDER Session Opened",1801:"IDER Session Closed",1802:"IDER Enabled",1803:"IDER Disabled",1804:"SoL Session Opened",1805:"SoL Session Closed",1806:"SoL Enabled",1807:"SoL Disabled",1808:"KVM Session Started",1809:"KVM Session Ended",1810:"KVM Enabled",1811:"KVM Disabled",1812:"VNC Password Failed 3 Times",1900:"Firmware Updated",1901:"Firmware Update Failed",2000:"Security Audit Log Cleared",2001:"Security Audit Policy Modified",2002:"Security Audit Log Disabled",2003:"Security Audit Log Enabled",2004:"Security Audit Log Exported",2005:"Security Audit Log Recovered",2100:"Intel(R) ME Time Set",2200:"TCPIP Parameters Set",2201:"Host Name Set",2202:"Domain Name Set",2203:"VLAN Parameters Set",2204:"Link Policy Set",2205:"IPv6 Parameters Set",2300:"Global Storage Attributes Set",2301:"Storage EACL Modified",2302:"Storage FPACL Modified",2303:"Storage Write Operation",2400:"Alert Subscribed",2401:"Alert Unsubscribed",2402:"Event Log Cleared",2403:"Event Log Frozen",2500:"CB Filter Added",2501:"CB Filter Removed",2502:"CB Policy Added",2503:"CB Policy Removed",2504:"CB Default Policy Set",2505:"CB Heuristics Option Set",2506:"CB Heuristics State Cleared",2600:"Agent Watchdog Added",2601:"Agent Watchdog Removed",2602:"Agent Watchdog Action Set",2700:"Wireless Profile Added",2701:"Wireless Profile Removed",2702:"Wireless Profile Updated",2800:"EAC Posture Signer SET",2801:"EAC Enabled",2802:"EAC Disabled",2803:"EAC Posture State",2804:"EAC Set Options",2900:"KVM Opt-in Enabled",2901:"KVM Opt-in Disabled",2902:"KVM Password Changed",2903:"KVM Consent Succeeded",2904:"KVM Consent Failed",3000:"Opt-In Policy Change",3001:"Send Consent Code Event",3002:"Start Opt-In Blocked Event"};J.GetAuditLogExtendedDataStr=function(T,S){if((T==1602||T==1604)&&S[0]==0){return w(S).splice(2,2+S[1]).toString()}if(T==1603){if(S[1]==0){return w(S).splice(3).toString()}return null}if(T==1605){return["Invalid ME access","Invalid MEBx access"][S[0]]}if(T==1606){var U=["Disabled","Enabled"][S[0]];if(S[1]==0){U+=", "+S[3]}return U}if(T==1607){return"Remote "+["NoAuth","ServerAuth","MutualAuth"][S[0]]+", Local "+["NoAuth","ServerAuth","MutualAuth"][S[1]]}if(T==1617){return J.RealmNames[L(S,0)]+", "+["NoAuth","Auth","Disabled"][S[4]]}if(T==1619){return["BIOS","MEBx","Local MEI","Local WSMAN","Remote WSAMN"][S[0]]}if(T==1900){return"From "+N(S,0)+"."+N(S,2)+"."+N(S,4)+"."+N(S,6)+" to "+N(S,8)+"."+N(S,10)+"."+N(S,12)+"."+N(S,14)}if(T==2100){var V=new Date();V.setTime(L(S,0)*1000+(new Date().getTimezoneOffset()*60000));return V.toLocaleString()}if(T==3000){return"From "+["None","KVM","All"][S[0]]+" to "+["None","KVM","All"][S[1]]}if(T==3001){return["Success","Failed 3 times"][S[0]]}return null};J.GetAuditLog=function(S){J.AMT_AuditLog_ReadRecords(1,i,[S,[]])};function I(S){if(!S||S==null||typeof S=="object"){return S}return[S]}function N(T,S){return(T[S]<<8)+T[S+1]}function L(T,S){return(T[S]*16777216)+(T[S+1]<<16)+(T[S+2]<<8)+T[S+3]}function M(T,S){return(T[S+3]*16777216)+(T[S+2]<<16)+(T[S+1]<<8)+T[S]}function v(S){return Buffer.from(S).toString("base64")}function u(T){var U=null;try{U=Buffer.from(T,"base64").toString()}catch(S){console.log(S)}return U}function w(S){var U=[];for(var T in S){U.push(S[T])}return U}function i(ac,X,ab,ad,af){if(ad!=200){af[0](J,[],ad);return}var Z,W,S,T,ai,aa=af[1],ae=new Date(),ag;if(ab.Body.RecordsReturned>0){ab.Body.EventRecords=I(ab.Body.EventRecords);for(W in ab.Body.EventRecords){S=null;try{T=u(ab.Body.EventRecords[W]);S=Buffer.from(T)}catch(U){console.log(U+" "+ab.Body.EventRecords[W])}ai={AuditAppID:N(S,0),EventID:N(S,2),InitiatorType:S[4]};ai.AuditApp=a[ai.AuditAppID];ai.Event=a[(ai.AuditAppID*100)+ai.EventID];if(!ai.Event){ai.Event="#"+ai.EventID}if(ai.InitiatorType==0){var ah=S[5];ai.Initiator=S.slice(6,6+ah).toString();Z=6+ah}if(ai.InitiatorType==1){ai.KerberosUserInDomain=L(S,5);var ah=S[9];ai.Initiator=G(S.slice(10,10+ah));Z=10+ah}if(ai.InitiatorType==2){ai.Initiator="Local";Z=5}if(ai.InitiatorType==3){ai.Initiator="KVM Default Port";Z=5}ag=L(S,Z);ai.Time=new Date((ag+(ae.getTimezoneOffset()*60))*1000);Z+=4;ai.MCLocationType=S[Z++];var Y=S[Z++];ai.NetAddress=S.slice(Z,Z+Y).toString();Z+=Y;var V=S[Z++];ai.Ex=S.slice(Z,Z+V);ai.ExStr=J.GetAuditLogExtendedDataStr((ai.AuditAppID*100)+ai.EventID,ai.Ex);aa.push(ai)}}if(ab.Body.TotalRecordCount>aa.length){J.AMT_AuditLog_ReadRecords(aa.length+1,i,[af[0],aa])}else{af[0](J,aa,ad)}}function C(U){if(U===undefined||U===null){return null}var V="";for(var T in U){var S=U[T];if(!S){continue}if(S.__parameterType==="reference"){V+=O(T,S)}else{V+=H(T,S)}}return V}function H(V,U){if(U===undefined||U===null){return null}var T=!!U.__namespace;var Z=T?"";for(var X in U){if(!U.hasOwnProperty(X)||X.indexOf("__")===0){continue}if(typeof U[X]==="function"||Array.isArray(U[X])){continue}if(typeof U[X]==="object"){console.error("only convert one level down...")}else{Y+=Z+X+">"+U[X].toString()+S+X+">"}}Y+="";return Y}function O(T,S){if(S===undefined||S===null){return null}var U="/wsman"+S.__resourceUri+"";for(var V in S){if(!S.hasOwnProperty(V)||V.indexOf("__")===0){continue}if(typeof S[V]==="function"||typeof S[V]==="object"||Array.isArray(S[V])){continue}U+=''+S[V].toString()+""}U+="";return U}function G(U){var T="S-"+U.charCodeAt(0)+"-"+U.charCodeAt(7);for(var S=2;S<(U.length/4);S++){T+="-"+M(U,S*4)}return T}function F(V){if(!V||V==null){return null}var U=V.split("-");if(U.length<4||(U[0]!="s"&&U[0]!="S")){return null}for(var S=1;S0&&t[u]){s.push(t[u])}}if(h>0){if(s[o.PID]){r[s[o.PID]]={pid:o.PID,user:s[o.USER],cmd:s[o.COMMAND]}}}}if(this.callback){this.args.unshift(r);this.callback.apply(this.parent,this.args)}});l.stdout.on("data",function(h){this.parent.ps+=h.toString()});break;case"darwin":var m=require("promise");var l=new m(function(i,h){this._res=i;this._rej=h});l.pm=this;l.callback=d;l.args=[];for(var f=1;f0){r[p[o].substring(0,q).trim()]={pid:p[o].substring(0,q).trim(),cmd:p[o].substring(h)}}}this.promise._res(r)});l.then(function(h){this.args.unshift(h);this.callback.apply(this.pm,this.args)});break}};this.getProcessInfo=function c(g){switch(process.platform){default:throw ("getProcessInfo() not supported for "+process.platform);break;case"linux":var h=require("fs").readFileSync("/proc/"+g+"/status");var e={};var f=h.toString().split("\n");for(var d in f){var j=f[d].split(":");if(j.length>1){j[1]=j[1].trim()}e[j[0]]=j[1]}return(e);break}}}module.exports=new processManager(); \ No newline at end of file diff --git a/agents/modules_meshcmd_min/service-host.min.js b/agents/modules_meshcmd_min/service-host.min.js deleted file mode 100644 index b3a0287a..00000000 --- a/agents/modules_meshcmd_min/service-host.min.js +++ /dev/null @@ -1 +0,0 @@ -var SERVICE_WIN32=16|32;var SERVICE_STATE={STOPPED:1,SERVICE_START_PENDING:2,SERVICE_STOP_PENDING:3,RUNNING:4};var SERVICE_ACCEPT={SERVICE_ACCEPT_STOP:1,SERVICE_ACCEPT_SHUTDOWN:4,SERVICE_ACCEPT_POWEREVENT:64,SERVICE_ACCEPT_SESSIONCHANGE:128};var SERVICE_CONTROL={SERVICE_CONTROL_SHUTDOWN:5,SERVICE_CONTROL_STOP:1,SERVICE_CONTROL_POWEREVENT:13,SERVICE_CONTROL_SESSIONCHANGE:14};var SESSION_CHANGE_TYPE={WTS_CONSOLE_CONNECT:1,WTS_CONSOLE_DISCONNECT:2,WTS_REMOTE_CONNECT:3,WTS_REMOTE_DISCONNECT:4,WTS_SESSION_LOGON:5,WTS_SESSION_LOGOFF:6,WTS_SESSION_LOCK:7,WTS_SESSION_UNLOCK:8,WTS_SESSION_REMOTE_CONTROL:9,WTS_SESSION_CREATE:10,WTS_SESSION_TERMINATE:11};var NO_ERROR=0;var serviceManager=require("service-manager");function serviceHost(e){this._ObjectID="service-host";var a=require("events").inherits(this);a.createEvent("serviceStart");a.createEvent("serviceStop");a.createEvent("normalStart");a.createEvent("session");a.createEvent("powerStateChange");if(process.platform=="win32"){this.GM=require("_GenericMarshal");this.Advapi=this.GM.CreateNativeProxy("Advapi32.dll");this.Advapi.CreateMethod({method:"StartServiceCtrlDispatcherA",threadDispatch:1});this.Advapi.CreateMethod("RegisterServiceCtrlHandlerExA");this.Advapi.CreateMethod("SetServiceStatus");this.Kernel32=this.GM.CreateNativeProxy("Kernel32.dll");this.Kernel32.CreateMethod("GetLastError");this.Ole32=this.GM.CreateNativeProxy("Ole32.dll");this.Ole32.CreateMethod("CoInitializeEx");this.Ole32.CreateMethod("CoUninitialize");this._ServiceName=this.GM.CreateVariable(typeof(e)=="string"?e:e.name);this._ServiceMain=this.GM.GetGenericGlobalCallback(2);this._ServiceMain.Parent=this;this._ServiceMain.GM=this.GM;this._ServiceMain.on("GlobalCallback",function b(f,g){this.Parent._ServiceStatus=this.GM.CreateVariable(28);this.Parent._ServiceStatus.toBuffer().writeUInt32LE(SERVICE_WIN32);this.Parent._ServiceStatus.toBuffer().writeUInt32LE(SERVICE_STATE.SERVICE_STOPPED,4);this.Parent._ServiceStatusHandle=this.Parent.Advapi.RegisterServiceCtrlHandlerExA(this.Parent._ServiceName,this.Parent._ServiceControlHandler,this.Parent.GM.StashObject(this.Parent._ServiceControlHandler));if(this.Parent._ServiceStatusHandle.Val==0){process.exit(1)}this.Parent._ServiceStatus.toBuffer().writeUInt32LE(SERVICE_STATE.SERVICE_START_PENDING,4);this.Parent.Advapi.SetServiceStatus(this.Parent._ServiceStatusHandle,this.Parent._ServiceStatus);this.Parent._ServiceStatus.toBuffer().writeUInt32LE(SERVICE_STATE.RUNNING,4);this.Parent._ServiceStatus.toBuffer().writeUInt32LE(SERVICE_ACCEPT.SERVICE_ACCEPT_STOP|SERVICE_ACCEPT.SERVICE_ACCEPT_POWEREVENT|SERVICE_ACCEPT.SERVICE_ACCEPT_SESSIONCHANGE,8);this.Parent.Advapi.SetServiceStatus(this.Parent._ServiceStatusHandle,this.Parent._ServiceStatus);this.Parent.Ole32.CoInitializeEx(0,2);this.Parent.on("~",function h(){var j=require("_GenericMarshal");var i=j.CreateNativeProxy("Advapi32.dll");i.CreateMethod("SetServiceStatus");Kernel32=this.GM.CreateNativeProxy("Kernel32.dll");Kernel32.CreateMethod("GetLastError");var k=j.CreateVariable(28);k.toBuffer().writeUInt32LE(SERVICE_WIN32);k.toBuffer().writeUInt32LE(1,4);k.toBuffer().writeUInt32LE(0,8);i.SetServiceStatus(this._ServiceStatusHandle,k);this.Ole32.CoUninitialize()});this.Parent.emit("serviceStart")});this._ServiceControlHandler=this.GM.GetGenericGlobalCallback(4);this._ServiceControlHandler.Parent=this;this._ServiceControlHandler.GM=this.GM;this._ServiceControlHandler.on("GlobalCallback",function c(f,i,h,g){var k=this.Parent.GM.UnstashObject(g);if(k!=null&&k==this){switch(f.Val){case SERVICE_CONTROL.SERVICE_CONTROL_SHUTDOWN:case SERVICE_CONTROL.SERVICE_CONTROL_STOP:this.Parent.emit("serviceStop");return;case SERVICE_CONTROL.SERVICE_CONTROL_SESSIONCHANGE:var l=h.Deref(4,4).toBuffer().readUInt32LE();switch(i.Val){case SESSION_CHANGE_TYPE.WTS_SESSION_LOGON:case SESSION_CHANGE_TYPE.WTS_SESSION_LOGOFF:require("user-sessions").emit("changed");break}break;default:break}this.Parent.Advapi.SetServiceStatus(this.Parent._ServiceStatusHandle,this.Parent._ServiceStatus)}})}if(e){this._ServiceOptions=typeof(e)=="object"?e:{name:e}}else{throw ("Must specify either ServiceName or Options")}if(!this._ServiceOptions.servicePath){this._ServiceOptions.servicePath=process.execPath}this.run=function d(){var r=0;for(var h=0;hStandardOutPath\n"+r.stdout+""):"");var i=(r.startType=="AUTO_START"?"":"");var s=" ProgramArguments\n";s+=" \n";s+=(" /usr/local/mesh_services/"+r.name+"/"+r.name+"\n");if(r.parameters){for(var p in r.parameters){s+=(" "+r.parameters[p]+"\n")}}s+=" \n";var t='\n';t+='\n';t+='\n';t+=" \n";t+=" Label\n";t+=(" "+r.name+"\n");t+=(s+"\n");t+=" WorkingDirectory\n";t+=(" /usr/local/mesh_services/"+r.name+"\n");t+=(y+"\n");t+=" RunAtLoad\n";t+=(i+"\n");t+=" \n";t+="";if(!require("fs").existsSync("/usr/local/mesh_services")){require("fs").mkdirSync("/usr/local/mesh_services")}if(!require("fs").existsSync("/Library/LaunchDaemons/"+r.name+".plist")){if(!require("fs").existsSync("/usr/local/mesh_services/"+r.name)){require("fs").mkdirSync("/usr/local/mesh_services/"+r.name)}if(r.binary){require("fs").writeFileSync("/usr/local/mesh_services/"+r.name+"/"+r.name,r.binary)}else{require("fs").copyFileSync(r.servicePath,"/usr/local/mesh_services/"+r.name+"/"+r.name)}require("fs").writeFileSync("/Library/LaunchDaemons/"+r.name+".plist",t);var q=require("fs").statSync("/usr/local/mesh_services/"+r.name+"/"+r.name).mode;q|=(require("fs").CHMOD_MODES.S_IXUSR|require("fs").CHMOD_MODES.S_IXGRP);require("fs").chmodSync("/usr/local/mesh_services/"+r.name+"/"+r.name,q)}else{throw ("Service: "+r.name+" already exists")}}};this.uninstallService=function f(i){if(!this.isAdmin()){throw ("Uninstalling a service, requires admin")}if(typeof(i)=="object"){i=i.name}if(process.platform=="win32"){var j=this.getService(i);if(j.status.state==undefined||j.status.state=="STOPPED"){if(this.proxy.DeleteService(j._service)==0){throw ("Uninstall Service for: "+i+", failed with error: "+this.proxy2.GetLastError())}else{try{require("fs").unlinkSync(this.getServiceFolder()+"\\"+i+".exe")}catch(h){}}}else{throw ("Cannot uninstall service: "+i+", because it is: "+j.status.state)}}else{if(process.platform=="linux"){switch(this.getServiceType()){case"init":this._update=require("child_process").execFile("/bin/sh",["sh"],{type:require("child_process").SpawnTypes.TERM});this._update.stdout.on("data",function(k){});this._update.stdin.write("service "+i+" stop\n");this._update.stdin.write("update-rc.d -f "+i+" remove\n");this._update.stdin.write("exit\n");this._update.waitExit();try{require("fs").unlinkSync("/etc/init.d/"+i);console.log(i+" uninstalled")}catch(h){console.log(i+" could not be uninstalled",h)}break;case"systemd":this._update=require("child_process").execFile("/bin/sh",["sh"],{type:require("child_process").SpawnTypes.TERM});this._update.stdout.on("data",function(k){});this._update.stdin.write("systemctl stop "+i+".service\n");this._update.stdin.write("systemctl disable "+i+".service\n");this._update.stdin.write("exit\n");this._update.waitExit();try{require("fs").unlinkSync("/usr/local/mesh/"+i);require("fs").unlinkSync("/lib/systemd/system/"+i+".service");console.log(i+" uninstalled")}catch(h){console.log(i+" could not be uninstalled",h)}break;default:break}}else{if(process.platform=="darwin"){if(require("fs").existsSync("/Library/LaunchDaemons/"+i+".plist")){var g=require("child_process").execFile("/bin/sh",["sh"]);g.stdout.on("data",function(k){});g.stdin.write("launchctl stop "+i+"\n");g.stdin.write("launchctl unload /Library/LaunchDaemons/"+i+".plist\n");g.stdin.write("exit\n");g.waitExit();try{require("fs").unlinkSync("/usr/local/mesh_services/"+i+"/"+i);require("fs").unlinkSync("/Library/LaunchDaemons/"+i+".plist")}catch(h){throw ("Error uninstalling service: "+i+" => "+h)}try{require("fs").rmdirSync("/usr/local/mesh_services/"+i)}catch(h){}}else{throw ("Service: "+i+" does not exist")}}}}};if(process.platform=="linux"){this.getServiceType=function c(){return(require("process-manager").getProcessInfo(1).Name)}}}module.exports=serviceManager; \ No newline at end of file diff --git a/agents/modules_meshcmd_min/smbios.min.js b/agents/modules_meshcmd_min/smbios.min.js deleted file mode 100644 index 451b12c3..00000000 --- a/agents/modules_meshcmd_min/smbios.min.js +++ /dev/null @@ -1 +0,0 @@ -try{Object.defineProperty(Array.prototype,"peek",{value:function(){return(this.length>0?this[this.length-1]:undefined)}})}catch(e){}try{Object.defineProperty(String.prototype,"replaceAll",{value:function replaceAll(b,a){return(this.split(b).join(a))}})}catch(e){}var RSMB=1381190978;var memoryLocation={1:"Other",2:"Unknown",3:"System Board",4:"ISA",5:"EISA",6:"PCI",7:"MCA",8:"PCMCIA",9:"Proprietary",10:"NuBus",160:"PC-98/C20",161:"PC-98/C24",162:"PC-98/E",163:"PC-98/LB"};var wakeReason=["Reserved","Other","Unknown","APM Timer","Modem Ring","LAN","Power Switch","PCI","AC Power"];function zeroLeftPad(c,b){if((b==null)&&(typeof(b)!="number")){return null}if(c==null){c=""}var d="";for(var a=0;a1){var r=v[1].split("\x0A\x0A")[0].split("\x0A");var s=[];for(var t in r){var u=r[t].trim().replaceAll(" ","").replaceAll("\x09","");if(!(u[0]=='"')){s.push(u)}}p.write(Buffer.from(s.join(""),"hex"));p.write(Buffer.from("00","hex"))}else{p.write(Buffer.from("0000","hex"))}}var q=p.buffer;q.ms=p;return(q)}}this._parse=function b(o){var n={};var m;var l=0;var o;var s=0;while(o&&l0){var n=l[4].pop();var o=n[20]&64;var s=n[20]&7;if(o){var m={_ObjectID:"SMBiosTables.processorInfo"};m.Processor=q[n[1]];m.MaxSpeed=n.readUInt16LE(16)+" Mhz";if(n[31]){m.Cores=n[31]}if(n[33]){m.Threads=n[33]}m.Populated=1;m.Status=t[s];m.Socket=n._strings[n[0]-1];m.Manufacturer=n._strings[n[3]-1];m.Version=n._strings[n[12]-1];r.push(m)}}return(r)};this.memoryInfo=function f(k){if(!k){throw ("no data")}var n={_ObjectID:"SMBiosTables.memoryInfo"};if(k[16]){var l=k[16].peek();n.location=memoryLocation[l[0]];if((n.maxCapacityKb=l.readUInt32LE(3))==2147483648){n.maxCapacityKb="A really big number"}}return(n)};this.systemInfo=function i(k){if(!k){throw ("no data")}var l={_ObjectID:"SMBiosTables.systemInfo"};if(k[1]){var m=k[1].peek();var n=m.slice(4,20);l.uuid=[zeroLeftPad(n.readUInt32LE(0).toString(16),8),zeroLeftPad(n.readUInt16LE(4).toString(16),4),zeroLeftPad(n.readUInt16LE(6).toString(16),4),zeroLeftPad(n.readUInt16BE(8).toString(16),4),zeroLeftPad(n.slice(10).toString("hex").toLowerCase(),12)].join("-");l.wakeReason=wakeReason[m[20]]}return(l)};this.systemSlots=function j(k){if(!k){throw ("no data")}var l=[];if(k[9]){while(k[9].length>0){var m=k[9].pop();l.push({name:m._strings[m[0]-1]})}}return(l)};this.amtInfo=function c(l){if(!l){throw ("no data")}var n={AMT:false};if(l[130]&&l[130].peek().slice(0,4).toString()=="$AMT"){var k=l[130].peek();n.AMT=k[4]?true:false;if(n.AMT){n.enabled=k[5]?true:false;n.storageRedirection=k[6]?true:false;n.serialOverLan=k[7]?true:false;n.kvm=k[14]?true:false;if(l[131].peek()&&l[131].peek().slice(52,56).toString()=="vPro"){var o=l[131].peek();if(o[0]&4){n.TXT=(o[0]&8)?true:false}if(o[0]&16){n.VMX=(o[0]&32)?true:false}n.MEBX=o.readUInt16LE(10).toString()+"."+o.readUInt16LE(8).toString()+"."+o.readUInt16LE(6).toString()+"."+o.readUInt16LE(4).toString();var m=o.slice(20,32);n.ManagementEngine=m.readUInt16LE(6).toString()+"."+m.readUInt16LE(4).toString()+"."+m.readUInt16LE(2).toString()+"."+m.readUInt16LE(0).toString()}}}return(n)};this.smTableTypes={0:"BIOS information",1:"System information",2:"Baseboard (or Module) information",4:"Processor information",5:"memory controller information",6:"Memory module information",7:"Cache information",8:"Port connector information",9:"System slots",10:"On board devices information",11:"OEM strings",12:"System configuration options",13:"BIOS language information",14:"Group associations",15:"System event log",16:"Physical memory array",17:"Memory device",18:"32bit memory error information",19:"Memory array mapped address",20:"Memory device mapped address",21:"Built-in pointing device",22:"Portable battery",23:"System reset",24:"Hardware security",25:"System power controls",26:"Voltage probe",27:"Cooling device",28:"Temperature probe",29:"Electrical current probe",30:"Out-of-band remote access",31:"Boot integrity services (BIS) entry point",32:"System boot information",33:"64bit memory error information",34:"Management device",35:"Management device component",36:"Management device threshold data",37:"Memory channel",38:"IPMI device information",39:"System power supply",40:"Additional information",41:"Onboard devices extended information",42:"Management controller host interface",126:"Inactive",127:"End-of-table"}}module.exports=new SMBiosTables(); \ No newline at end of file diff --git a/agents/modules_meshcmd_min/user-sessions.min.js b/agents/modules_meshcmd_min/user-sessions.min.js deleted file mode 100644 index a059a1fc..00000000 --- a/agents/modules_meshcmd_min/user-sessions.min.js +++ /dev/null @@ -1 +0,0 @@ -var NOTIFY_FOR_THIS_SESSION=0;var NOTIFY_FOR_ALL_SESSIONS=1;var WM_WTSSESSION_CHANGE=689;var WM_POWERBROADCAST=536;var PBT_POWERSETTINGCHANGE=32787;var PBT_APMSUSPEND=4;var PBT_APMRESUMESUSPEND=7;var PBT_APMRESUMEAUTOMATIC=18;var PBT_APMPOWERSTATUSCHANGE=10;var WTS_CONSOLE_CONNECT=(1);var WTS_CONSOLE_DISCONNECT=(2);var WTS_REMOTE_CONNECT=(3);var WTS_REMOTE_DISCONNECT=(4);var WTS_SESSION_LOGON=(5);var WTS_SESSION_LOGOFF=(6);var WTS_SESSION_LOCK=(7);var WTS_SESSION_UNLOCK=(8);var WTS_SESSION_REMOTE_CONTROL=(9);var WTS_SESSION_CREATE=(10);var WTS_SESSION_TERMINATE=(11);var GUID_ACDC_POWER_SOURCE;var GUID_BATTERY_PERCENTAGE_REMAINING;var GUID_CONSOLE_DISPLAY_STATE;function UserSessions(){this._ObjectID="user-sessions";require("events").EventEmitter.call(this,true).createEvent("changed").createEvent("locked").createEvent("unlocked");this.enumerateUsers=function h(){var s=require("promise");var r=new s(function(t,p){this.__resolver=t;this.__rejector=p});r.__handler=function o(p){r.__resolver(p)};try{this.Current(r.__handler)}catch(q){r.__rejector(q)}r.parent=this;return(r)};if(process.platform=="win32"){this._serviceHooked=false;this._marshal=require("_GenericMarshal");this._kernel32=this._marshal.CreateNativeProxy("Kernel32.dll");this._kernel32.CreateMethod("GetLastError");try{this._wts=this._marshal.CreateNativeProxy("Wtsapi32.dll");this._wts.CreateMethod("WTSEnumerateSessionsA");this._wts.CreateMethod("WTSQuerySessionInformationA");this._wts.CreateMethod("WTSRegisterSessionNotification");this._wts.CreateMethod("WTSUnRegisterSessionNotification");this._wts.CreateMethod("WTSFreeMemory")}catch(i){}this._advapi=this._marshal.CreateNativeProxy("Advapi32.dll");this._advapi.CreateMethod("AllocateAndInitializeSid");this._advapi.CreateMethod("CheckTokenMembership");this._advapi.CreateMethod("FreeSid");this._user32=this._marshal.CreateNativeProxy("user32.dll");this._user32.CreateMethod({method:"RegisterPowerSettingNotification",threadDispatch:1});this._user32.CreateMethod("UnregisterPowerSettingNotification");this._rpcrt=this._marshal.CreateNativeProxy("Rpcrt4.dll");this._rpcrt.CreateMethod("UuidFromStringA");this._rpcrt.StringToUUID=function n(o){var p=n.us._marshal.CreateVariable(16);if(n.us._rpcrt.UuidFromStringA(n.us._marshal.CreateVariable(o),p).Val==0){return(p)}else{throw ("Could not convert string to UUID")}};this._rpcrt.StringToUUID.us=this;GUID_ACDC_POWER_SOURCE=this._rpcrt.StringToUUID("5d3e9a59-e9D5-4b00-a6bd-ff34ff516548");GUID_BATTERY_PERCENTAGE_REMAINING=this._rpcrt.StringToUUID("a7ad8041-b45a-4cae-87a3-eecbb468a9e1");GUID_CONSOLE_DISPLAY_STATE=this._rpcrt.StringToUUID("6fe69556-704a-47a0-8f24-c28d936fda47");this.SessionStates=["Active","Connected","ConnectQuery","Shadow","Disconnected","Idle","Listening","Reset","Down","Init"];this.InfoClass={WTSInitialProgram:0,WTSApplicationName:1,WTSWorkingDirectory:2,WTSOEMId:3,WTSSessionId:4,WTSUserName:5,WTSWinStationName:6,WTSDomainName:7,WTSConnectState:8,WTSClientBuildNumber:9,WTSClientName:10,WTSClientDirectory:11,WTSClientProductId:12,WTSClientHardwareId:13,WTSClientAddress:14,WTSClientDisplay:15,WTSClientProtocolType:16,WTSIdleTime:17,WTSLogonTime:18,WTSIncomingBytes:19,WTSOutgoingBytes:20,WTSIncomingFrames:21,WTSOutgoingFrames:22,WTSClientInfo:23,WTSSessionInfo:24,WTSSessionInfoEx:25,WTSConfigInfo:26,WTSValidationInfo:27,WTSSessionAddressV4:28,WTSIsRemoteSession:29};this.isRoot=function k(){var r=this._marshal.CreateVariable(6);r.toBuffer().writeInt8(5,5);var p=this._marshal.CreatePointer();var o=false;if(this._advapi.AllocateAndInitializeSid(r,2,32,544,0,0,0,0,0,0,p).Val!=0){var q=this._marshal.CreateInteger();if(this._advapi.CheckTokenMembership(0,p.Deref(),q).Val!=0){if(q.toBuffer().readUInt32LE()!=0){o=true}}this._advapi.FreeSid(p.Deref())}return o};this.getSessionAttribute=function j(s,o){var p=this._marshal.CreatePointer();var q=this._marshal.CreateVariable(4);if(this._wts.WTSQuerySessionInformationA(0,s,o,p,q).Val==0){throw ("Error calling WTSQuerySessionInformation: "+this._kernel32.GetLastError.Val)}var r=p.Deref().String;this._wts.WTSFreeMemory(p.Deref());return(r)};this.Current=function f(o){var u={};var t=this._marshal.CreatePointer();var p=this._marshal.CreateVariable(4);if(this._wts.WTSEnumerateSessionsA(0,0,1,t,p).Val==0){throw ("Error calling WTSEnumerateSessionsA: "+this._kernel32.GetLastError().Val)}for(var q=0;q= 0) {printf \"%s:%s\\n\", $1, $3}' /etc/passwd\nexit\n");o.waitExit();var p=o.stdout.str.split("\n");var r={},s;for(var q in p){s=p[q].split(":");if(s[0]){r[s[0]]=s[1]}}return(r)};this._uids=function c(){var o=require("child_process").execFile("/bin/sh",["sh"]);o.stdout.str="";o.stdout.on("data",function(t){this.str+=t.toString()});o.stdin.write("awk -F: '($3 >= 0) {printf \"%s:%s\\n\", $1, $3}' /etc/passwd\nexit\n");o.waitExit();var p=o.stdout.str.split("\n");var r={},s;for(var q in p){s=p[q].split(":");if(s[0]){r[s[1]]=s[0]}}return(r)};this.Self=function m(){var q=require("promise");var o=new q(function(r,p){this.__resolver=r;this.__rejector=p;this.__child=require("child_process").execFile("/usr/bin/id",["id","-u"]);this.__child.promise=this;this.__child.stdout._txt="";this.__child.stdout.on("data",function(s){this._txt+=s.toString()});this.__child.on("exit",function(s){try{parseInt(this.stdout._txt)}catch(t){this.promise.__rejector("invalid uid");return}var u=parseInt(this.stdout._txt);this.promise.__resolver(u)})});return(o)};this.Current=function f(o){var p={};p._ObjectID="UserSession";Object.defineProperty(p,"_callback",{value:o});Object.defineProperty(p,"_child",{value:require("child_process").execFile("/usr/bin/last",["last","-f","/var/run/utmp"])});p._child.Parent=p;p._child._txt="";p._child.on("exit",function(q){var u=this._txt.split("\n");var A=[];var D={};for(var t in u){if(u[t]){var B=getTokens(u[t]);var z={Username:B[0],SessionId:B[1]};if(B[3].includes("still logged in")){z.State="Active"}else{z.LastActive=B[3]}A.push(z)}}A.pop();var C={};var y=[];for(var t in A){if(A[t].Username!="reboot"){D[A[t].SessionId]=A[t];if(C[A[t].Username]==null){C[A[t].Username]=-1}}}try{require("promise")}catch(r){Object.defineProperty(D,"Active",{value:showActiveOnly(D)});if(this.Parent._callback){this.Parent._callback.call(this.Parent,D)}return}var x=require("promise");for(var v in C){var w=new x(function(E,s){this.__username=v;this.__resolver=E;this.__rejector=s;this.__child=require("child_process").execFile("/usr/bin/id",["id","-u",v]);this.__child.promise=this;this.__child.stdout._txt="";this.__child.stdout.on("data",function(F){this._txt+=F.toString()});this.__child.on("exit",function(F){try{parseInt(this.stdout._txt)}catch(G){this.promise.__rejector("invalid uid");return}var H=parseInt(this.stdout._txt);this.promise.__resolver(H)})});y.push(w)}x.all(y).then(function(E){var F={};for(var s in E){F[E[s].__username]=E[s]._internal.completedArgs[0]}for(var s in D){D[s].uid=F[D[s].Username]}Object.defineProperty(D,"Active",{value:showActiveOnly(D)});if(p._callback){p._callback.call(p,D)}},function(s){Object.defineProperty(D,"Active",{value:showActiveOnly(D)});if(p._callback){p._callback.call(p,D)}})});p._child.stdout.Parent=p._child;p._child.stdout.on("data",function(q){this.Parent._txt+=q.toString()});return(p)};this._recheckLoggedInUsers=function a(){this.enumerateUsers().then(function(o){if(o.Active.length>0){if(this.parent._linux_lock_watcher!=null&&this.parent._linux_lock_watcher.uid!=o.Active[0].uid){delete this.parent._linux_lock_watcher}this.parent._linux_lock_watcher=new g(process.env.XDG_CURRENT_DESKTOP=="Unity"?"com.ubuntu.Upstart0_6":"org.gnome.ScreenSaver",o.Active[0].uid);this.parent._linux_lock_watcher.user_session=this.parent;this.parent._linux_lock_watcher.on("signal",function(r){var q=this.user_session.enumerateUsers();q.signalData=r.data[0];q.then(function(p){switch(this.signalData){case true:case"desktop-lock":this.parent.emit("locked",p.Active[0]);break;case false:case"desktop-unlock":this.parent.emit("unlocked",p.Active[0]);break}})})}else{if(this.parent._linux_lock_watcher!=null){delete this.parent._linux_lock_watcher}}})};this.on("changed",this._recheckLoggedInUsers);this._recheckLoggedInUsers()}else{if(process.platform=="darwin"){this._users=function(){var o=require("child_process").execFile("/usr/bin/dscl",["dscl",".","list","/Users","UniqueID"]);o.stdout.str="";o.stdout.on("data",function(t){this.str+=t.toString()});o.stdin.write("exit\n");o.waitExit();var q=o.stdout.str.split("\n");var r,p;var s={};for(p=0;p0;++r){if(!u[s[r].split(" ")[0]]){try{u[s[r].split(" ")[0]]={Username:s[r].split(" ")[0],State:s[r].split("still logged in").length>1?"Active":"Inactive",uid:t.uid[s[r].split(" ")[0]]}}catch(q){}}else{if(u[s[r].split(" ")[0]].State!="Active"&&s[r].split("still logged in").length>1){u[s[r].split(" ")[0]].State="Active"}}}Object.defineProperty(u,"Active",{value:showActiveOnly(u)});if(o){o.call(this,u)}}}}}if(process.platform=="linux"||process.platform=="darwin"){this._self=function b(){var o=require("child_process").execFile("/usr/bin/id",["id","-u"]);o.stdout.str="";o.stdout.on("data",function(p){this.str+=p.toString()});o.waitExit();return(parseInt(o.stdout.str))};this.isRoot=function k(){return(this._self()==0)};this.consoleUid=function e(){var o=process.platform=="darwin"?"console":((process.env.DISPLAY)?process.env.DISPLAY:":0");var p=require("child_process").execFile("/bin/sh",["sh"]);p.stdout.str="";p.stdout.on("data",function(u){this.str+=u.toString()});p.stdin.write("who\nexit\n");p.waitExit();var s=p.stdout.str.split("\n");var t,q,r;for(q in s){t=s[q].split(" ");for(r=1;r0){return(parseInt(this._users()[t[0]]))}}}throw ("nobody logged into console")}}}function showActiveOnly(c){var b=[];var e={};var f=[];var d;for(var a in c){if(c[a].State=="Active"){b.push(c[a]);d=(c[a].Domain?(c[a].Domain+"\\"):"")+c[a].Username;if(!e[d]){e[d]=d}}}for(var a in e){f.push(a)}Object.defineProperty(b,"usernames",{value:f});return(b)}function getTokens(d){var a=[];var b;a.push(d.substring(0,(b=d.indexOf(" "))));while(d[++b]==" "){}a.push(d.substring(b,(b=d.substring(b).indexOf(" ")+b)));while(d[++b]==" "){}a.push(d.substring(b,(b=d.substring(b).indexOf(" ")+b)));while(d[++b]==" "){}var c=d.substring(b).trim();a.push(c);return(a)}module.exports=new UserSessions(); \ No newline at end of file diff --git a/agents/modules_meshcore/amt-manage.js b/agents/modules_meshcore/amt-manage.js new file mode 100644 index 00000000..375019f6 --- /dev/null +++ b/agents/modules_meshcore/amt-manage.js @@ -0,0 +1,536 @@ +/* +Copyright 2018-2019 Intel Corporation + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +/** +* @fileoverview Intel(r) AMT Management +* @author Ylian Saint-Hilaire +* @version v0.1.0 +*/ + +/** + * Construct a AmtStackCreateService object, this ia the main Intel AMT communication stack. + * @constructor + */ +function AmtManager(agent, db, isdebug) { + var sendConsole = function (msg) { agent.SendCommand({ "action": "msg", "type": "console", "value": msg }); } + var debug = function (msg) { if (isdebug) { sendConsole('amt-manager: ' + msg); } } + var amtMei = null, amtMeiState = 0; + var amtLms = null, amtLmsState = 0; + var amtGetVersionResult = null; + var oswsstack = null; + var osamtstack = null; + var amtpolicy = null; + var obj = this; + obj.state = 0; + obj.lmsstate = 0; + obj.onStateChange = null; + obj.setDebug = function (x) { isdebug = x; } + + // Set current Intel AMT activation policy + obj.setPolicy = function (policy) { + if (JSON.stringify(amtpolicy) != JSON.stringify(policy)) { + amtpolicy = policy; + //debug('AMT policy set: ' + JSON.stringify(policy)); + obj.applyPolicy(); + } + } + + // Try to load up the MEI module + var rebindToMeiRetrys = 0; + obj.reset = function () { + ++rebindToMeiRetrys; + amtMei = null, amtMeiState = 0, amtLms = null, amtLmsState = 0, obj.state = 0, obj.lmsstate = 0; + //debug('Binding to MEI'); + try { + var amtMeiLib = require('amt-mei'); + amtMei = new amtMeiLib(); + amtMei.on('error', function (e) { debug('MEI error'); amtMei = null; amtMeiState = -1; obj.state = -1; obj.onStateChange(amtMeiState); }); + amtMei.getVersion(function (result) { + if (result == null) { + amtMeiState = -1; + obj.state = -1; + if (obj.onStateChange != null) { obj.onStateChange(amtMeiState); } + if (rebindToMeiRetrys < 10) { setTimeout(obj.reset, 10000); } + } else { + amtGetVersionResult = result; + amtMeiState = 2; + obj.state = 2; + rebindToMeiRetrys = 0; + if (obj.onStateChange != null) { obj.onStateChange(amtMeiState); } + //debug('MEI binded'); + obj.lmsreset(); + } + }); + } catch (ex) { debug('MEI exception: ' + ex); amtMei = null; amtMeiState = -1; obj.state = -1; } + } + + // Get Intel AMT information using MEI + var amtMeiTmpState = null; + obj.getAmtInfo = function(func) { + if ((amtMei == null) || (amtMeiState < 2)) { if (func != null) { func(null); } return; } + try { + amtMeiTmpState = { Flags: 0 }; // Flags: 1=EHBC, 2=CCM, 4=ACM + amtMei.getProtocolVersion(function (result) { if (result != null) { amtMeiTmpState.MeiVersion = result; } }); + amtMei.getVersion(function (result) { if (result) { amtMeiTmpState.Versions = {}; for (var version in result.Versions) { amtMeiTmpState.Versions[result.Versions[version].Description] = result.Versions[version].Version; } } }); + amtMei.getProvisioningMode(function (result) { if (result) { amtMeiTmpState.ProvisioningMode = result.mode; } }); + amtMei.getProvisioningState(function (result) { if (result) { amtMeiTmpState.ProvisioningState = result.state; } }); + amtMei.getEHBCState(function (result) { if ((result != null) && (result.EHBC == true)) { amtMeiTmpState.Flags += 1; } }); + amtMei.getControlMode(function (result) { if (result != null) { if (result.controlMode == 1) { amtMeiTmpState.Flags += 2; } if (result.controlMode == 2) { amtMeiTmpState.Flags += 4; } } }); + //amtMei.getMACAddresses(function (result) { if (result) { amtMeiTmpState.mac = result; } }); + amtMei.getLanInterfaceSettings(0, function (result) { if (result) { amtMeiTmpState.net0 = result; } }); + amtMei.getLanInterfaceSettings(1, function (result) { if (result) { amtMeiTmpState.net1 = result; } }); + amtMei.getUuid(function (result) { if ((result != null) && (result.uuid != null)) { amtMeiTmpState.UUID = result.uuid; } }); + amtMei.getDnsSuffix(function (result) { if (result != null) { amtMeiTmpState.dns = result; } if (func != null) { func(amtMeiTmpState); } }); + } catch (e) { if (func != null) { func(null); } return; } + } + + // Called on MicroLMS Intel AMT user notification + var handleAmtNotification = function(notifyMsg) { + if ((notifyMsg == null) || (notifyMsg.Body == null) || (notifyMsg.Body.MessageID == null) || (notifyMsg.Body.MessageArguments == null)) return null; + var amtMessage = notifyMsg.Body.MessageID, amtMessageArg = notifyMsg.Body.MessageArguments[0], notify = null; + + switch (amtMessage) { + case 'iAMT0050': { if (amtMessageArg == '48') { notify = 'Intel® AMT Serial-over-LAN connected'; } else if (amtMessageArg == '49') { notify = 'Intel® AMT Serial-over-LAN disconnected'; } break; } // SOL + case 'iAMT0052': { if (amtMessageArg == '1') { notify = 'Intel® AMT KVM connected'; } else if (amtMessageArg == '2') { notify = 'Intel® AMT KVM disconnected'; } break; } // KVM + default: { break; } + } + + // Sent to the entire group, no sessionid or userid specified. + if (notify != null) { agent.SendCommand({ "action": "msg", "type": "notify", "value": notify, "tag": "general" }); } + } + + // Launch LMS + obj.lmsreset = function () { + //debug('Binding to LMS'); + var amtLms = null, amtLmsState = 0; + obj.lmsstate = 0; + try { + var lme_heci = require('amt-lme'); + amtLmsState = 1; + obj.lmsstate = 1; + amtLms = new lme_heci(); + amtLms.on('error', function (e) { amtLmsState = 0; obj.lmsstate = 0; amtLms = null; debug('LMS error'); setupMeiOsAdmin(1); }); + amtLms.on('connect', function () { amtLmsState = 2; obj.lmsstate = 2; debug('LMS connected'); setupMeiOsAdmin(2); }); + //amtLms.on('bind', function (map) { }); + amtLms.on('notify', function (data, options, str, code) { + //debug('LMS notify'); + if (code == 'iAMT0052-3') { + kvmGetData(); + } else { + //if (str != null) { debug('Intel AMT LMS: ' + str); } + handleAmtNotification(data); + } + }); + } catch (e) { amtLmsState = -1; obj.lmsstate = -1; amtLms = null; } + } + + + // + // KVM Data Channel + // + + var setupMeiOsAdmin = function (state) { + //debug('Setup MEI OS Admin'); + if ((amtMei == null) || (amtMeiState < 2) || (amtGetVersionResult == null)) { return; } // If there is no MEI, don't bother with obj. + amtMei.getLocalSystemAccount(function (x) { + if (x == null) return; + //debug('getLocalSystemAccount ' + JSON.stringify(x)); + var transport = require('amt-wsman-duk'); + var wsman = require('amt-wsman'); + var amt = require('amt'); + oswsstack = new wsman(transport, '127.0.0.1', 16992, x.user, x.pass, false); + osamtstack = new amt(oswsstack); + //if (func) { func(state); } + + // We got the $$OsAdmin account setup. + amtMeiState = 3; + obj.state = 3; + if (obj.onStateChange != null) { obj.onStateChange(amtMeiState); } + obj.applyPolicy(); + + //var AllWsman = "CIM_SoftwareIdentity,IPS_SecIOService,IPS_ScreenSettingData,IPS_ProvisioningRecordLog,IPS_HostBasedSetupService,IPS_HostIPSettings,IPS_IPv6PortSettings".split(','); + //osamtstack.BatchEnum(null, AllWsman, startLmsWsmanResponse, null, true); + //************************************* + // Setup KVM data channel if this is Intel AMT 12 or above + var amtver = null; + try { for (var i in amtGetVersionResult.Versions) { if (amtGetVersionResult.Versions[i].Description == 'AMT') amtver = parseInt(amtGetVersionResult.Versions[i].Version.split('.')[0]); } } catch (e) { } + if ((amtver != null) && (amtver >= 12)) { + debug('KVM data channel setup'); + kvmGetData('skip'); // Clear any previous data, this is a dummy read to about handling old data. + obj.kvmTempTimer = setInterval(function () { kvmGetData(); }, 2000); // Start polling for KVM data. + kvmSetData(JSON.stringify({ action: 'restart', ver: 1 })); // Send a restart command to advise the console if present that MicroLMS just started. + } + }); + } + + var kvmGetData = function (tag) { + osamtstack.IPS_KVMRedirectionSettingData_DataChannelRead(obj.kvmDataGetResponse, tag); + } + + var kvmDataGetResponse = function (stack, name, response, status, tag) { + if ((tag != 'skip') && (status == 200) && (response.Body.ReturnValue == 0)) { + var val = null; + try { val = Buffer.from(response.Body.DataMessage, 'base64').toString(); } catch (e) { return } + if (val != null) { obj.kvmProcessData(response.Body.RealmsBitmap, response.Body.MessageId, val); } + } + } + + var webRtcDesktop = null; + var kvmProcessData = function (realms, messageId, val) { + var data = null; + try { data = JSON.parse(val) } catch (e) { } + if ((data != null) && (data.action)) { + if (data.action == 'present') { kvmSetData(JSON.stringify({ action: 'present', ver: 1, platform: process.platform })); } + if (data.action == 'offer') { + webRtcDesktop = {}; + var rtc = require('ILibWebRTC'); + webRtcDesktop.webrtc = rtc.createConnection(); + webRtcDesktop.webrtc.on('connected', function () { }); + webRtcDesktop.webrtc.on('disconnected', function () { obj.webRtcCleanUp(); }); + webRtcDesktop.webrtc.on('dataChannel', function (rtcchannel) { + webRtcDesktop.rtcchannel = rtcchannel; + webRtcDesktop.kvm = mesh.getRemoteDesktopStream(); + webRtcDesktop.kvm.pipe(webRtcDesktop.rtcchannel, { dataTypeSkip: 1, end: false }); + webRtcDesktop.rtcchannel.on('end', function () { obj.webRtcCleanUp(); }); + webRtcDesktop.rtcchannel.on('data', function (x) { obj.kvmCtrlData(this, x); }); + webRtcDesktop.rtcchannel.pipe(webRtcDesktop.kvm, { dataTypeSkip: 1, end: false }); + //webRtcDesktop.kvm.on('end', function () { debug('WebRTC DataChannel closed2'); obj.webRtcCleanUp(); }); + //webRtcDesktop.rtcchannel.on('data', function (data) { debug('WebRTC data: ' + data); }); + }); + kvmSetData(JSON.stringify({ action: 'answer', ver: 1, sdp: webRtcDesktop.webrtc.setOffer(data.sdp) })); + } + } + } + + // Process KVM control channel data + var kvmCtrlData = function (channel, cmd) { + if (cmd.length > 0 && cmd.charCodeAt(0) != 123) { + // This is upload data + if (obj.fileupload != null) { + cmd = Buffer.from(cmd, 'base64'); + var header = cmd.readUInt32BE(0); + if ((header == 0x01000000) || (header == 0x01000001)) { + fs.writeSync(obj.fileupload.fp, cmd.slice(4)); + channel.write({ action: 'upload', sub: 'ack', reqid: obj.fileupload.reqid }); + if (header == 0x01000001) { fs.closeSync(obj.fileupload.fp); obj.fileupload = null; } // Close the file + } + } + return; + } + debug('KVM Ctrl Data: ' + cmd); + //sendConsoleText('KVM Ctrl Data: ' + cmd); + + try { cmd = JSON.parse(cmd); } catch (ex) { debug('Invalid JSON: ' + cmd); return; } + if ((cmd.path != null) && (process.platform != 'win32') && (cmd.path[0] != '/')) { cmd.path = '/' + cmd.path; } // Add '/' to paths on non-windows + switch (cmd.action) { + case 'ping': { + // This is a keep alive + channel.write({ action: 'pong' }); + break; + } + case 'lock': { + // Lock the current user out of the desktop + if (process.platform == 'win32') { var child = require('child_process'); child.execFile(process.env['windir'] + '\\system32\\cmd.exe', ['/c', 'RunDll32.exe user32.dll,LockWorkStation'], { type: 1 }); } + break; + } + case 'ls': { + /* + // Close the watcher if required + var samepath = ((obj.httprequest.watcher != undefined) && (cmd.path == obj.httprequest.watcher.path)); + if ((obj.httprequest.watcher != undefined) && (samepath == false)) { + //console.log('Closing watcher: ' + obj.httprequest.watcher.path); + //obj.httprequest.watcher.close(); // TODO: This line causes the agent to crash!!!! + delete obj.httprequest.watcher; + } + */ + + // Send the folder content to the browser + var response = getDirectoryInfo(cmd.path); + if (cmd.reqid != undefined) { response.reqid = cmd.reqid; } + channel.write(response); + + /* + // Start the directory watcher + if ((cmd.path != '') && (samepath == false)) { + var watcher = fs.watch(cmd.path, onFileWatcher); + watcher.tunnel = obj.httprequest; + watcher.path = cmd.path; + obj.httprequest.watcher = watcher; + //console.log('Starting watcher: ' + obj.httprequest.watcher.path); + } + */ + break; + } + case 'mkdir': { + // Create a new empty folder + fs.mkdirSync(cmd.path); + break; + } + case 'rm': { + // Remove many files or folders + for (var i in cmd.delfiles) { + var fullpath = path.join(cmd.path, cmd.delfiles[i]); + try { fs.unlinkSync(fullpath); } catch (e) { debug(e); } + } + break; + } + case 'rename': { + // Rename a file or folder + try { fs.renameSync(path.join(cmd.path, cmd.oldname), path.join(cmd.path, cmd.newname)); } catch (e) { debug(e); } + break; + } + case 'download': { + // Download a file, to browser + var sendNextBlock = 0; + if (cmd.sub == 'start') { // Setup the download + if (obj.filedownload != null) { channel.write({ action: 'download', sub: 'cancel', id: obj.filedownload.id }); delete obj.filedownload; } + obj.filedownload = { id: cmd.id, path: cmd.path, ptr: 0 } + try { obj.filedownload.f = fs.openSync(obj.filedownload.path, 'rbN'); } catch (e) { channel.write({ action: 'download', sub: 'cancel', id: obj.filedownload.id }); delete obj.filedownload; } + if (obj.filedownload) { channel.write({ action: 'download', sub: 'start', id: cmd.id }); } + } else if ((obj.filedownload != null) && (cmd.id == obj.filedownload.id)) { // Download commands + if (cmd.sub == 'startack') { sendNextBlock = 8; } else if (cmd.sub == 'stop') { delete obj.filedownload; } else if (cmd.sub == 'ack') { sendNextBlock = 1; } + } + // Send the next download block(s) + while (sendNextBlock > 0) { + sendNextBlock--; + var buf = Buffer.alloc(4096); + var len = fs.readSync(obj.filedownload.f, buf, 4, 4092, null); + obj.filedownload.ptr += len; + if (len < 4092) { buf.writeInt32BE(0x01000001, 0); fs.closeSync(obj.filedownload.f); delete obj.filedownload; sendNextBlock = 0; } else { buf.writeInt32BE(0x01000000, 0); } + channel.write(buf.slice(0, len + 4).toString('base64')); // Write as Base64 + } + break; + } + case 'upload': { + // Upload a file, from browser + if (cmd.sub == 'start') { // Start the upload + if (obj.fileupload != null) { fs.closeSync(obj.fileupload.fp); } + if (!cmd.path || !cmd.name) break; + obj.fileupload = { reqid: cmd.reqid }; + var filepath = path.join(cmd.path, cmd.name); + try { obj.fileupload.fp = fs.openSync(filepath, 'wbN'); } catch (e) { } + if (obj.fileupload.fp) { channel.write({ action: 'upload', sub: 'start', reqid: obj.fileupload.reqid }); } else { obj.fileupload = null; channel.write({ action: 'upload', sub: 'error', reqid: obj.fileupload.reqid }); } + } + else if (cmd.sub == 'cancel') { // Stop the upload + if (obj.fileupload != null) { fs.closeSync(obj.fileupload.fp); obj.fileupload = null; } + } + break; + } + case 'copy': { + // Copy a bunch of files from scpath to dspath + for (var i in cmd.names) { + var sc = path.join(cmd.scpath, cmd.names[i]), ds = path.join(cmd.dspath, cmd.names[i]); + if (sc != ds) { try { fs.copyFileSync(sc, ds); } catch (e) { } } + } + break; + } + case 'move': { + // Move a bunch of files from scpath to dspath + for (var i in cmd.names) { + var sc = path.join(cmd.scpath, cmd.names[i]), ds = path.join(cmd.dspath, cmd.names[i]); + if (sc != ds) { try { fs.copyFileSync(sc, ds); fs.unlinkSync(sc); } catch (e) { } } + } + break; + } + default: { + debug('Invalid KVM command: ' + cmd); + break; + } + } + } + + var webRtcCleanUp = function () { + debug('webRtcCleanUp'); + if (webRtcDesktop == null) return; + if (webRtcDesktop.rtcchannel) { + try { webRtcDesktop.rtcchannel.close(); } catch (e) { } + try { webRtcDesktop.rtcchannel.removeAllListeners('data'); } catch (e) { } + try { webRtcDesktop.rtcchannel.removeAllListeners('end'); } catch (e) { } + delete webRtcDesktop.rtcchannel; + } + if (webRtcDesktop.webrtc) { + try { webRtcDesktop.webrtc.close(); } catch (e) { } + try { webRtcDesktop.webrtc.removeAllListeners('connected'); } catch (e) { } + try { webRtcDesktop.webrtc.removeAllListeners('disconnected'); } catch (e) { } + try { webRtcDesktop.webrtc.removeAllListeners('dataChannel'); } catch (e) { } + delete webRtcDesktop.webrtc; + } + if (webRtcDesktop.kvm) { + try { webRtcDesktop.kvm.end(); } catch (e) { } + delete webRtcDesktop.kvm; + } + webRtcDesktop = null; + } + + var kvmSetData = function (x) { + osamtstack.IPS_KVMRedirectionSettingData_DataChannelWrite(Buffer.from(x).toString('base64'), function () { }); + } + + // Delete a directory with a files and directories within it + var deleteFolderRecursive = function(path, rec) { + if (fs.existsSync(path)) { + if (rec == true) { + fs.readdirSync(obj.path.join(path, '*')).forEach(function (file, index) { + var curPath = obj.path.join(path, file); + if (fs.statSync(curPath).isDirectory()) { // recurse + deleteFolderRecursive(curPath, true); + } else { // delete file + fs.unlinkSync(curPath); + } + }); + } + fs.unlinkSync(path); + } + }; + + // Polyfill path.join + var path = { + join: function () { + var x = []; + for (var i in arguments) { + var w = arguments[i]; + if (w != null) { + while (w.endsWith('/') || w.endsWith('\\')) { w = w.substring(0, w.length - 1); } + if (i != 0) { while (w.startsWith('/') || w.startsWith('\\')) { w = w.substring(1); } } + x.push(w); + } + } + if (x.length == 0) return '/'; + return x.join('/'); + } + }; + + function md5hex(str) { return require('MD5Stream').create().syncHash(str).toString('hex'); } + + // + // Deactivate Intel AMT CCM + // + + // When called, this will use MEI to deactivate Intel AMT when it's in CCM mode. Simply calls "unprovision" on MEI and checks the return code. + obj.deactivateCCM = function() { + amtMei.unprovision(1, function (status) { + if (status == 0) { + debug('Success deactivating Intel AMT CCM.'); + agent.SendCommand({ "action": "coreinfo", "intelamt": { "state": 0, "flags": 0 } }); + applyPolicyTimer = setTimeout(obj.applyPolicy, 8000); + } else { + debug('Intel AMT CCM deactivation error: ' + status); + } + }); + } + + // + // Activate Intel AMT to CCM + // + + function makePass(length) { + var text = "", possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; + for (var i = 0; i < length; i++) { text += possible.charAt(Math.floor(Math.random() * possible.length)); } + return text; + } + + obj.activeToCCM = function (adminpass) { + if ((adminpass == null) || (adminpass == '')) { adminpass = 'P@0s' + makePass(23); } + intelAmtAdminPass = adminpass; + //debug('Trying to get local account info...'); + amtMei.getLocalSystemAccount(function (x) { + if ((x != null) && x.user && x.pass) { + //debug('Intel AMT local account info: User=' + x.user + ', Pass=' + x.pass + '.'); + var transport = require('amt-wsman-duk'); + var wsman = require('amt-wsman'); + var amt = require('amt'); + oswsstack = new wsman(transport, '127.0.0.1', 16992, x.user, x.pass, false); + osamtstack = new amt(oswsstack); + //debug('Trying to get Intel AMT activation information...'); + osamtstack.BatchEnum(null, ['*AMT_GeneralSettings', '*IPS_HostBasedSetupService'], activeToCCMEx2, adminpass); + } else { + debug('Unable to get $$OsAdmin password.'); + } + }); + } + + var activeToCCMEx2 = function(stack, name, responses, status, adminpass) { + if (status != 200) { debug('Failed to fetch activation information, status ' + status); } + else if (responses['IPS_HostBasedSetupService'].response['AllowedControlModes'].length != 2) { debug('Client control mode activation not allowed'); } + else { stack.IPS_HostBasedSetupService_Setup(2, md5hex('admin:' + responses['AMT_GeneralSettings'].response['DigestRealm'] + ':' + adminpass).substring(0, 32), null, null, null, null, activeToCCMEx3); } + } + + var activeToCCMEx3 = function(stack, name, responses, status) { + if (status != 200) { debug('Failed to activate, status ' + status); } + else if (responses.Body.ReturnValue != 0) { debug('Client control mode activation failed: ' + responses.Body.ReturnValueStr); } + else { + debug('Intel AMT CCM activation success.'); + db.Put('amtCCMPass', intelAmtAdminPass); + agent.SendCommand({ "action": "coreinfo", "intelamt": { "state": 2, "flags": 2, "user": "admin", "pass": intelAmtAdminPass } }); + } + applyPolicyTimer = setTimeout(obj.applyPolicy, 8000); + } + + obj.start = function () { + // Try to load Intel AMT policy + var amtPolicy = null; + try { amtPolicy = JSON.parse(db.Get('amtPolicy')); } catch (ex) { debug('Exception loading amtPolicy'); } + //if (amtPolicy == null) { debug('no amtPolicy'); } else { debug('Loaded amtPolicy: ' + JSON.stringify(amtPolicy)); } + try { intelAmtAdminPass = db.Get('amtCCMPass'); } catch (ex) { } + if (typeof intelAmtAdminPass != 'string') { intelAmtAdminPass = null; } + obj.reset(); + } + + // Apply Intel AMT policy + var intelAmtAdminPass, wsstack, amtstack, applyPolicyTimer; + obj.applyPolicy = function () { + applyPolicyTimer = null; + if ((amtMeiState != 3) || (typeof amtpolicy != 'object') || (typeof amtpolicy.type != 'number') || (amtpolicy.type == 0)) return; + if ((amtpolicy.password != null) && (amtpolicy.password != '')) { intelAmtAdminPass = amtpolicy.password; } + obj.getAmtInfo(function (meinfo) { + if ((amtpolicy.type == 1) && (meinfo.ProvisioningState == 2)) { + // CCM Deactivation Policy. + wsstack = null; + amtstack = null; + obj.deactivateCCM(); + } else if ((amtpolicy.type == 2) && (meinfo.ProvisioningState == 0)) { + // CCM Activation Policy + wsstack = null; + amtstack = null; + if ((amtpolicy.password == null) || (amtpolicy.password == '')) { intelAmtAdminPass = null; } + obj.activeToCCM(intelAmtAdminPass); + } else if ((amtpolicy.type == 2) && (meinfo.ProvisioningState == 2) && (intelAmtAdminPass != null)) { + // Perform password test + var transport = require('amt-wsman-duk'); + var wsman = require('amt-wsman'); + var amt = require('amt'); + wsstack = new wsman(transport, '127.0.0.1', 16992, 'admin', intelAmtAdminPass, false); + amtstack = new amt(wsstack); + try { amtstack.BatchEnum(null, ['*AMT_GeneralSettings', '*IPS_HostBasedSetupService'], wsmanPassTestResponse); } catch (ex) { debug(ex); } + } else { + // Other possible cases... + } + }); + } + + var wsmanPassTestResponse = function (stack, name, responses, status) { + if (status != 200) { + if (amtpolicy.badpass == 1) { obj.deactivateCCM(); } // Something went wrong, reactivate. + } else { + // Success, make sure + debug('SUCCESS!'); + // TODO: Check Intel AMT Features need to be enabled & if Intel AMT CIRA needs to be setup + } + } + +} + +module.exports = AmtManager; diff --git a/agents/modules_meshcore/amt-mei.js b/agents/modules_meshcore/amt-mei.js index e2cec413..00e6714a 100644 --- a/agents/modules_meshcore/amt-mei.js +++ b/agents/modules_meshcore/amt-mei.js @@ -20,6 +20,7 @@ function amt_heci() { emitterUtils.createEvent('error'); var heci = require('heci'); + var sendConsole = function (msg) { require('MeshAgent').SendCommand({ "action": "msg", "type": "console", "value": msg }); } this._ObjectID = "pthi"; this._rq = new Q(); diff --git a/agents/modules_meshcore_min/amt-lme.min.js b/agents/modules_meshcore_min/amt-lme.min.js deleted file mode 100644 index 6e19dfe3..00000000 --- a/agents/modules_meshcore_min/amt-lme.min.js +++ /dev/null @@ -1 +0,0 @@ -var MemoryStream=require("MemoryStream");var lme_id=0;var lme_port_offset=0;var xmlParser=require("amt-xml");var APF_DISCONNECT=1;var APF_SERVICE_REQUEST=5;var APF_SERVICE_ACCEPT=6;var APF_USERAUTH_REQUEST=50;var APF_USERAUTH_FAILURE=51;var APF_USERAUTH_SUCCESS=52;var APF_GLOBAL_REQUEST=80;var APF_REQUEST_SUCCESS=81;var APF_REQUEST_FAILURE=82;var APF_CHANNEL_OPEN=90;var APF_CHANNEL_OPEN_CONFIRMATION=91;var APF_CHANNEL_OPEN_FAILURE=92;var APF_CHANNEL_WINDOW_ADJUST=93;var APF_CHANNEL_DATA=94;var APF_CHANNEL_CLOSE=97;var APF_PROTOCOLVERSION=192;function lme_object(){this.ourId=++lme_id;this.amtId=-1;this.LME_CHANNEL_STATUS="LME_CS_FREE";this.txWindow=0;this.rxWindow=0;this.localPort=0;this.errorCount=0}function stream_bufferedWrite(){var a=require("events").inherits(this);this.buffer=[];this._readCheckImmediate=undefined;this._ObjectID="bufferedWriteStream";a.createEvent("close");a.createEvent("drain");a.createEvent("error");a.createEvent("finish");a.createEvent("pipe");a.createEvent("unpipe");a.createEvent("readable");this.isEmpty=function(){return(this.buffer.length==0)};this.isWaiting=function(){return(this._readCheckImmediate==undefined)};this.write=function(c){for(var b in arguments){if(typeof(arguments[b])=="function"){this.once("drain",arguments[b]);break}}var d=Buffer.alloc(c.length);c.copy(d);this.buffer.push({offset:0,data:d});this.emit("readable");return(this.buffer.length==0?true:false)};this.read=function(){var f=arguments.length==0?undefined:arguments[0];var b=0;var d=[];while((f==undefined||b0){var c=this.buffer[0].data.length-this.buffer[0].offset;var e=this.buffer[0].offset;if(c>(f-b)){d.push(this.buffer[0].data.slice(e,e+f-b));this.buffer[0].offset+=(f-b);b+=(f-b)}else{d.push(this.buffer[0].data.slice(e));b+=c;this.buffer.shift()}}this._readCheckImmediate=setImmediate(function(g){g._readCheckImmediate=undefined;if(g.buffer.length==0){g.emit("drain")}else{g.emit("readable")}},this);return(Buffer.concat(d))}}function lme_heci(c){var a=require("events").inherits(this);a.createEvent("error");a.createEvent("connect");a.createEvent("notify");a.createEvent("bind");if((c!=null)&&(c.debug==true)){lme_port_offset=-100}var b=require("heci");this.INITIAL_RXWINDOW_SIZE=4096;this._ObjectID="lme";this._LME=b.create();this._LME._binded={};this._LME.LMS=this;this._LME.on("error",function(d){this.LMS.emit("error",d)});this._LME.on("connect",function(){this.on("data",function(k){var l=k.readUInt8(0);switch(l){default:console.log("Unhandled LME Command "+l+", "+k.length+" byte(s).");break;case APF_SERVICE_REQUEST:var A=k.readUInt32BE(1);var z=k.slice(5,A+5);if(z=="pfwd@amt.intel.com"||z=="auth@amt.intel.com"){var G=Buffer.alloc(5+A);G.writeUInt8(6,0);G.writeUInt32BE(A,1);G.write(z.toString(),5);this.write(G)}else{}break;case APF_GLOBAL_REQUEST:var A=k.readUInt32BE(1);var z=k.slice(5,A+5).toString();switch(z){case"tcpip-forward":var w=k.readUInt32BE(A+6);var H=k.readUInt32BE(A+10+w);if(this[z]==undefined){this[z]={}}if(this[z][H]!=null){for(var t in this.sockets){var h=this.sockets[t];if(h.localPort==H){this.sockets[t].end();delete this.sockets[t]}}}if(this[z][H]==null){this[z][H]=require("net").createServer();this[z][H].HECI=this;try{if(lme_port_offset==0){this[z][H].listen({port:H,host:"127.0.0.1"})}else{this[z][H].listen({port:(H+lme_port_offset)})}}catch(p){console.log("Binding error, LMS port "+(H+lme_port_offset)+": "+p)}this[z][H].on("connection",function(e){this.HECI.LMS.bindDuplexStream(e,e.remoteFamily,e.localPort-lme_port_offset)});this._binded[H]=true;this.LMS.emit("bind",this._binded)}var G=Buffer.alloc(5);G.writeUInt8(81,0);G.writeUInt32BE(H,1);this.write(G);break;case"cancel-tcpip-forward":var G=Buffer.alloc(1);G.writeUInt8(APF_REQUEST_SUCCESS,0);this.write(G);break;case"udp-send-to@amt.intel.com":var G=Buffer.alloc(1);G.writeUInt8(APF_REQUEST_FAILURE,0);this.write(G);break;default:break}break;case APF_CHANNEL_OPEN_CONFIRMATION:var J=k.readUInt32BE(1);var N=k.readUInt32BE(5);var O=k.readUInt32BE(9);if(this.sockets[J]!=undefined){this.sockets[J].lme.amtId=N;this.sockets[J].lme.rxWindow=O;this.sockets[J].lme.txWindow=O;this.sockets[J].lme.LME_CHANNEL_STATUS="LME_CS_CONNECTED";this.sockets[J].bufferedStream=new stream_bufferedWrite();this.sockets[J].bufferedStream.socket=this.sockets[J];this.sockets[J].bufferedStream.on("readable",function(){if(this.socket.lme.txWindow>0){var e=this.read(this.socket.lme.txWindow);var i=Buffer.alloc(9+e.length);i.writeUInt8(APF_CHANNEL_DATA,0);i.writeUInt32BE(this.socket.lme.amtId,1);i.writeUInt32BE(e.length,5);e.copy(i,9);this.socket.lme.txWindow-=e.length;this.socket.HECI.write(i)}});this.sockets[J].bufferedStream.on("drain",function(){this.socket.resume()});this.sockets[J].on("data",function(e){if(!this.bufferedStream.write(e)){this.pause()}});this.sockets[J].on("end",function(){var e=Buffer.alloc(5);e.writeUInt8(APF_CHANNEL_CLOSE,0);e.writeUInt32BE(this.lme.amtId,1);this.HECI.write(e)});this.sockets[J].resume()}break;case APF_PROTOCOLVERSION:var x=k.readUInt32BE(1);var y=k.readUInt32BE(5);var L=k.readUInt32BE(9);var G=Buffer.alloc(93);G.writeUInt8(192,0);G.writeUInt32BE(1,1);G.writeUInt32BE(0,5);G.writeUInt32BE(L,9);this.write(G);break;case APF_CHANNEL_WINDOW_ADJUST:var K=k.readUInt32BE(1);var g=k.readUInt32BE(5);if(this.sockets[K]!=undefined){this.sockets[K].lme.txWindow+=g;if(!this.sockets[K].bufferedStream.isEmpty()&&this.sockets[K].bufferedStream.isWaiting()){this.sockets[K].bufferedStream.emit("readable")}}else{console.log("Unknown Recipient ID/"+K+" for APF_CHANNEL_WINDOW_ADJUST")}break;case APF_CHANNEL_DATA:var K=k.readUInt32BE(1);var n=k.readUInt32BE(5);var m=k.slice(9,9+n);if((this.sockets!=null)&&(this.sockets[K]!=undefined)){this.sockets[K].pendingBytes.push(m.length);this.sockets[K].write(m,function(){var i=this.pendingBytes.shift();var e=Buffer.alloc(9);e.writeUInt8(APF_CHANNEL_WINDOW_ADJUST,0);e.writeUInt32BE(this.lme.amtId,1);e.writeUInt32BE(i,5);this.HECI.write(e)})}else{if((this.insockets!=null)&&(this.insockets[K]!=undefined)){var h=this.insockets[K];if(h.data==null){h.data=m.toString()}else{h.data+=m.toString()}h.rxWindow+=n;var s=parseHttp(h.data);if((s!=null)||(h.data.length>=8000)){var B=null;try{B=xmlParser.ParseWsman(s)}catch(o){}if(B!=null){this.LMS.emit("notify",B,h.options,_lmsNotifyToString(B),_lmsNotifyToCode(B))}var f=Buffer.alloc(5);f.writeUInt8(APF_CHANNEL_CLOSE,0);f.writeUInt32BE(d,1);this.write(f)}else{if(h.rxWindow>6000){var f=Buffer.alloc(9);f.writeUInt8(APF_CHANNEL_WINDOW_ADJUST,0);f.writeUInt32BE(h.amtId,1);f.writeUInt32BE(h.rxWindow,5);this.write(f);h.rxWindow=0}}}else{console.log("Unknown Recipient ID/"+K+" for APF_CHANNEL_DATA")}}break;case APF_CHANNEL_OPEN_FAILURE:var K=k.readUInt32BE(1);var M=k.readUInt32BE(5);if((this.sockets!=null)&&(this.sockets[K]!=undefined)){this.sockets[K].end();delete this.sockets[K]}else{if((this.insockets!=null)&&(this.insockets[K]!=undefined)){delete this.insockets[K]}else{console.log("Unknown Recipient ID/"+K+" for APF_CHANNEL_OPEN_FAILURE")}}break;case APF_CHANNEL_CLOSE:var K=k.readUInt32BE(1);if((this.sockets!=null)&&(this.sockets[K]!=undefined)){this.sockets[K].end();var d=this.sockets[K].lme.amtId;var f=Buffer.alloc(5);delete this.sockets[K];f.writeUInt8(APF_CHANNEL_CLOSE,0);f.writeUInt32BE(d,1);this.write(f)}else{if((this.insockets!=null)&&(this.insockets[K]!=undefined)){delete this.insockets[K]}else{console.log("Unknown Recipient ID/"+K+" for APF_CHANNEL_CLOSE")}}break;case APF_CHANNEL_OPEN:var A=k.readUInt32BE(1);var z=k.slice(5,A+5).toString();var j=k.readUInt32BE(A+5);var u=k.readUInt32BE(A+9);var r=k.readUInt32BE(A+17);var q=k.slice(A+21,A+21+r).toString();var I=k.readUInt32BE(A+21+r);var D=k.readUInt32BE(A+25+r);var C=k.slice(A+29+r,A+29+r+D).toString();var E=k.readUInt32BE(A+29+r+D);if(this.insockets==null){this.insockets={}}var F=++lme_id;var v=new lme_object();v.ourId=F;v.amtId=j;v.txWindow=u;v.rxWindow=0;v.options={target:q,targetPort:I,source:C,sourcePort:E};this.insockets[F]=v;var f=Buffer.alloc(17);f.writeUInt8(APF_CHANNEL_OPEN_CONFIRMATION,0);f.writeUInt32BE(j,1);f.writeUInt32BE(F,5);f.writeUInt32BE(4000,9);f.writeUInt32BE(4294967295,13);this.write(f);break}});this.LMS.emit("connect");this.resume()});this.bindDuplexStream=function(e,h,g){var j=e;j.pendingBytes=[];j.HECI=this._LME;j.LMS=this;j.lme=new lme_object();j.lme.Socket=j;j.localPort=g;var d=new MemoryStream();d.writeUInt8(90);d.writeUInt32BE(15);d.write("forwarded-tcpip");d.writeUInt32BE(j.lme.ourId);d.writeUInt32BE(this.INITIAL_RXWINDOW_SIZE);d.writeUInt32BE(4294967295);for(var f=0;f<2;++f){if(h=="IPv6"){d.writeUInt32BE(3);d.write("::1")}else{d.writeUInt32BE(9);d.write("127.0.0.1")}d.writeUInt32BE(g)}this._LME.write(d.buffer);if(this._LME.sockets==undefined){this._LME.sockets={}}this._LME.sockets[j.lme.ourId]=j;j.pause()};this._LME.connect(b.GUIDS.LME,{noPipeline:0})}function parseHttp(c){var d=c.indexOf("\r\n\r\n");if((d==-1)||(c.length<(d+2))){return null}var b=require("http-headers")(c.substring(0,d),true);var a=parseInt(b["content-length"]);if(c.length>=a+d+4){return c.substring(d+4,d+4+a)}return null}function _lmsNotifyToCode(c){if((c==null)||(c.Body==null)||(c.Body.MessageID==null)){return null}var b=c.Body.MessageID;try{b+="-"+c.Body.MessageArguments[0]}catch(a){}return b}function _lmsNotifyToString(c){if((c==null)||(c.Body==null)||(c.Body.MessageID==null)){return null}var b=c.Body.MessageID;try{b+="-"+c.Body.MessageArguments[0]}catch(a){}if(lmsEvents[b]){return lmsEvents[b]}return null}var lmsEvents={iAMT0001:"System Defense Policy %1s triggered.",iAMT0002:"Agent Presence Agent %1s not started.",iAMT0003:"Agent Presence Agent %1s stopped.",iAMT0004:"Agent Presence Agent %1s running.",iAMT0005:"Agent Presence Agent %1s expired.",iAMT0006:"Agent Presence Agent %1s suspended.",iAMT0007:"Host software attempt to disable AMT Network link detected.",iAMT0008:"Host software attempt to disable AMT Network link detected -- Host Network link blocked.",iAMT0009:"AMT clock or FLASH wear-out protection disabled.",iAMT0010:"Intel(R) AMT Network Interface %1s heuristics defense slow threshold trespassed.",iAMT0011:"Intel(R) AMT Network Interface %1s heuristics defense fast threshold trespassed.",iAMT0012:"Intel(R) AMT Network Interface %1s heuristics defense factory defined threshold trespassed.",iAMT0013:"Intel(R) AMT Network Interface %1s heuristics defense Encounter timeout expired.",iAMT0014:"General certificate error.",iAMT0015:"Certificate expired.",iAMT0016:"No trusted root certificate.",iAMT0017:"Not configured to work with server certificate.",iAMT0018:"Certificate revoked.",iAMT0019:"RSA exponent too large.",iAMT0020:"RSA modulus too large.",iAMT0021:"Unsupported digest.",iAMT0022:"Distinguished name too long.",iAMT0023:"Key usage missing.",iAMT0024:"General SSL handshake error.",iAMT0025:"General 802.1x error.",iAMT0026:"AMT Diagnostic AlertEAC error - General NAC error.",iAMT0027:"AMT Diagnostic AlertEAC error - attempt to get a NAC posture while AMT NAC is disabled.",iAMT0028:"AMT Diagnostic AlertEAC error - attempt to get a posture of an unsupported type.",iAMT0029:"Audit log storage is 50% full.",iAMT0030:"Audit log storage is 75% full.",iAMT0031:"Audit log storage is 85% full.",iAMT0032:"Audit log storage is 95% full.",iAMT0033:"Audit log storage is full.",iAMT0034:"Firmware Update Event - Partial.",iAMT0035:"Firmware Update Event - Failure.",iAMT0036:"Remote connectivity initiated.",iAMT0037:"ME Presence event.","iAMT0038-0":"AMT is being unprovisioned using BIOS command.","iAMT0038-1":"AMT is being unprovisioned using Local MEI command.","iAMT0038-2":"AMT is being unprovisioned using Local WS-MAN/SOAP command.","iAMT0038-3":"AMT is being unprovisioned using Remote WS-MAN/SOAP command.",iAMT0039:"HW Asset Error.",iAMT0050:"User Notification Alert - General Notification.","iAMT0050-16":"User Notification Alert - Circuit Breaker notification (CB Drop TX filter hit.).","iAMT0050-17":"User Notification Alert - Circuit Breaker notification (CB Rate Limit TX filter hit.).","iAMT0050-18":"User Notification Alert - Circuit Breaker notification (CB Drop RX filter hit.).","iAMT0050-19":"User Notification Alert - Circuit Breaker notification (CB Rate Limit RX filter hit.).","iAMT0050-32":"User Notification Alert - EAC notification.","iAMT0050-48":"User Notification Alert - Remote diagnostics - (Remote Redirection session started - SOL).","iAMT0050-49":"User Notification Alert - Remote diagnostics - (Remote Redirection session stopped - SOL).","iAMT0050-50":"User Notification Alert - Remote diagnostics. (Remote Redirection session started - IDE-R).","iAMT0050-51":"User Notification Alert - Remote diagnostics. (Remote Redirection session stopped - IDE-R).","iAMT0050-66":"User Notification Alert - WLAN notification (Host profile mismatch - Management Interface ignored).","iAMT0050-67":"User Notification Alert - WLAN notification (Management device overrides host radio).","iAMT0050-68":"User Notification Alert - WLAN notification (Host profile security mismatch).","iAMT0050-69":"User Notification Alert - WLAN notification (Management device relinquishes control over host Radio).",iAMT0051:"User Notification Alert - SecIo event.","iAMT0051-0":"User Notification Alert - SecIo event semaphore at host.","iAMT0051-1":"User Notification Alert - semaphore at ME.","iAMT0051-2":"User Notification Alert - SecIo event - semaphore timeout.",iAMT0052:"User Notification Alert - KVM session event.","iAMT0052-0":"User Notification Alert - KVM session requested.","iAMT0052-1":"User Notification Alert - KVM session started.","iAMT0052-2":"User Notification Alert - KVM session stopped.","iAMT0052-3":"User Notification Alert - KVM data channel.",iAMT0053:"User Notification Alert - RCS notification.","iAMT0053-50":"User Notification Alert - RCS notification (HW button pressed. Connection initiated automatically).","iAMT0053-52":"User Notification Alert - RCS notification (HW button pressed. Connection wasn't initiated automatically).","iAMT0053-53":"User Notification Alert - RCS notification (Contracts updated).",iAMT0054:"User Notification Alert - WLAN notification. Wireless Profile sync enablement state changed.",iAMT0055:"User Notification Alert - Provisioning state change notification.","iAMT0055-0":"User Notification Alert - Provisioning state change notification - Pre-configuration.","iAMT0055-1":"User Notification Alert - Provisioning state change notification - In configuration.","iAMT0055-2":"User Notification Alert - Provisioning state change notification - Post-configuration.","iAMT0055-3":"User Notification Alert - Provisioning state change notification - Unprovision process has started.",iAMT0056:"User Notification Alert - System Defense change notification.",iAMT0057:"User Notification Alert - Network State change notification.",iAMT0058:"User Notification Alert - Remote Access change notification.","iAMT0058-1":"User Notification Alert - Remote Access change notification - tunnel is closed.",iAMT0059:"User Notification Alert - KVM enabled event.","iAMT0059-0":"User Notification Alert - KVM enabled event - KVM disabled.","iAMT0059-1":"User Notification Alert - KVM enabled event - KVM enabled (both from MEBx and PTNI).",iAMT0060:"User Notification Alert - SecIO configuration event.",iAMT0061:"ME FW reset occurred.",iAMT0062:"User Notification Alert - IpSyncEnabled event.","iAMT0062-0":"User Notification Alert - IpSyncEnabled event - IpSync disabled.","iAMT0062-1":"User Notification Alert - IpSyncEnabled event - IpSync enabled.",iAMT0063:"User Notification Alert - HTTP Proxy sync enabled event.","iAMT0063-0":"User Notification Alert - HTTP Proxy sync enabled event - HTTP Proxy Sync disabled.","iAMT0063-1":"User Notification Alert - HTTP Proxy sync enabled event - HTTP Proxy Sync enabled.",iAMT0064:"User Notification Alert - User Consent event.","iAMT0064-1":"User Notification Alert - User Consent event - User Consent granted.","iAMT0064-2":"User Notification Alert - User Consent event - User Consent ended.","iAMT0067-0":"Graceful Remote Control Operation - Shutdown.","iAMT0067-1":"Graceful Remote Control Operation - Reset.","iAMT0067-2":"Graceful Remote Control Operation - Hibernate.","iAMT0068-0":"Link Protection Notification - No link protection.","iAMT0068-1":"Link Protection Notification - Passive link protection.","iAMT0068-2":"Link Protection Notification - High link protection.","iAMT0069-0":"Local Time Sync Enablement Notification - Local Time Sync Disabled.","iAMT0069-1":"Local Time Sync Enablement Notification - Local Time Sync Enabled.",iAMT0070:"Host Reset Triggered by WD Expiration Notification.",PLAT0004:"The chassis %1s was opened.",PLAT0005:"The chassis %1s was closed.",PLAT0006:"The drive bay %1s was opened.",PLAT0007:"The drive bay %1s was closed.",PLAT0008:"The I/O card area %1s was opened.",PLAT0009:"The I/O card area %1s was closed.",PLAT0010:"The processor area %1s was opened.",PLAT0011:"The processor area %1s was closed.",PLAT0012:"The LAN %1s has been disconnected.",PLAT0013:"The LAN %1s has been connected.",PLAT0016:"The permission to insert package %1s has been granted.",PLAT0017:"The permission to insert package %1s has been removed.",PLAT0018:"The fan card area %1s is open.",PLAT0019:"The fan card area %1s is closed.",PLAT0022:"The computer system %1s has detected a secure mode violation.",PLAT0024:"The computer system %1s has detected a pre-boot user password violation.",PLAT0026:"The computer system %1s has detected a pre-boot setup password violation.",PLAT0028:"The computer system %1s has detected a network boot password violation.",PLAT0030:"The computer system %1s has detected a password violation.",PLAT0032:"The management controller %1s has detected an out-of-band password violation.",PLAT0034:"The processor %1s has been added.",PLAT0035:"The processor %1s has been removed.",PLAT0036:"An over-temperature condition has been detected on the processor %1s.",PLAT0037:"An over-temperature condition has been removed on the processor %1s.",PLAT0038:"The processor %1s is operating in a degraded State.",PLAT0039:"The processor %1s is no longer operating in a degraded State.",PLAT0040:"The processor %1s has failed.",PLAT0042:"The processor %1s has failed.",PLAT0044:"The processor %1s has failed.",PLAT0046:"The processor %1s has failed.",PLAT0048:"The processor %1s has failed.",PLAT0060:"The processor %1s has been enabled.",PLAT0061:"The processor %1s has been disabled.",PLAT0062:"The processor %1s has a configuration mismatch.",PLAT0064:"A terminator has been detected on the processor %1s.",PLAT0084:"The Power Supply %1s has been added.",PLAT0085:"The Power Supply %1s has been removed.",PLAT0086:"The Power Supply %1s has failed.",PLAT0088:"Failure predicted on power supply %1s.",PLAT0096:"The input to power supply %1s has been lost or fallen out of range.",PLAT0098:"The power supply %1s is operating in an input state that is out of range.",PLAT0099:"The power supply %1s has returned to a normal input state.",PLAT0100:"The power supply %1s has lost input.",PLAT0104:"The power supply %1s has a configuration mismatch.",PLAT0106:"Power supply %1s has been disabled.",PLAT0107:"Power supply %1s has been enabled.",PLAT0108:"Power supply %1s has been power cycled.",PLAT0110:"Power supply %1s has encountered an error during power down.",PLAT0112:"Power supply %1s has lost power.",PLAT0114:"Soft power control has failed for power supply %1s.",PLAT0116:"Power supply %1s has failed.",PLAT0118:"Failure predicted on power supply %1s.",PLAT0120:"Memory subsystem failure.",PLAT0122:"DIMM missing.",PLAT0124:"Memory error detected & corrected for DIMM %1s.",PLAT0128:"Memory DIMM %1s added.",PLAT0129:"Memory DIMM %1s removed.",PLAT0130:"Memory DIMM %1s enabled.",PLAT0131:"Memory DIMM %1s disabled.",PLAT0134:"Memory parity error for DIMM %1s.",PLAT0136:"Memory scrub failure for DIMM %1s.",PLAT0138:"Memory uncorrectable error detected for DIMM %1s.",PLAT0140:"Memory sparing initiated for DIMM %1s.",PLAT0141:"Memory sparing concluded for DIMM %1s.",PLAT0142:"Memory DIMM %1s Throttled.",PLAT0144:"Memory logging limit reached for DIMM %1s.",PLAT0145:"Memory logging limit removed for DIMM %1s.",PLAT0146:"An over-temperature condition has been detected on the Memory DIMM %1s.",PLAT0147:"An over-temperature condition has been removed on the Memory DIMM %1s.",PLAT0162:"The drive %1s has been added.",PLAT0163:"The drive %1s has been removed.",PLAT0164:"The drive %1s has been disabled due to a detected fault.",PLAT0167:"The drive %1s has been enabled.",PLAT0168:"Failure predicted on drive %1s.",PLAT0170:"Hot spare enabled for %1s.",PLAT0171:"Hot spare disabled for %1s.",PLAT0172:"Consistency check has begun for %1s.",PLAT0173:"Consistency check completed for %1s.",PLAT0174:"Array %1s is in critical condition.",PLAT0176:"Array %1s has failed.",PLAT0177:"Array %1s has been restored.",PLAT0178:"Rebuild in progress for array %1s.",PLAT0179:"Rebuild completed for array %1s.",PLAT0180:"Rebuild Aborted for array %1s.",PLAT0184:"The system %1s encountered a POST error.",PLAT0186:"The system %1s encountered a firmware hang.",PLAT0188:"The system %1s encountered firmware progress.",PLAT0192:"The log %1s has been disabled.",PLAT0193:"The log %1s has been enabled.",PLAT0194:"The log %1s has been disabled.",PLAT0195:"The log %1s has been enabled.",PLAT0196:"The log %1s has been disabled.",PLAT0198:"The log %1s has been enabled.",PLAT0200:"The log %1s has been cleared.",PLAT0202:"The log %1s is full.",PLAT0203:"The log %1s is no longer full.",PLAT0204:"The log %1s is almost full.",PLAT0208:"The log %1s has a configuration error.",PLAT0210:"The system %1s has been reconfigured.",PLAT0212:"The system %1s has encountered an OEM system boot event.",PLAT0214:"The system %1s has encountered an unknown system hardware fault.",PLAT0216:"The system %1s has generated an auxiliary log entry.",PLAT0218:"The system %1s has executed a PEF action.",PLAT0220:"The system %1s has synchronized the system clock.",PLAT0222:"A diagnostic interrupt has occurred on system %1s.",PLAT0224:"A bus timeout has occurred on system %1s.",PLAT0226:"An I/O channel check NMI has occurred on system %1s.",PLAT0228:"A software NMI has occurred on system %1s.",PLAT0230:"System %1s has recovered from an NMI.",PLAT0232:"A PCI PERR has occurred on system %1s.",PLAT0234:"A PCI SERR has occurred on system %1s.",PLAT0236:"An EISA fail safe timeout occurred on system %1s.",PLAT0238:"A correctable bus error has occurred on system %1s.",PLAT0240:"An uncorrectable bus error has occurred on system %1s.",PLAT0242:"A fatal NMI error has occurred on system %1s.",PLAT0244:"A fatal bus error has occurred on system %1s.",PLAT0246:"A bus on system %1s is operating in a degraded state.",PLAT0247:"A bus on system %1s is no longer operating in a degraded state.",PLAT0248:"The power button %1s has been pressed.",PLAT0249:"The power button %1s has been released.",PLAT0250:"The sleep button %1s has been pressed.",PLAT0251:"The sleep button %1s has been released.",PLAT0252:"The reset button %1s has been pressed.",PLAT0253:"The reset button %1s has been released.",PLAT0254:"The latch to %1s has been opened.",PLAT0255:"The latch to %1s has been closed.",PLAT0256:"The service request %1s has been enabled.",PLAT0257:"The service request %1s has been completed.",PLAT0258:"Power control of system %1s has failed.",PLAT0262:"The network port %1s has been connected.",PLAT0263:"The network port %1s has been disconnected.",PLAT0266:"The connector %1s has encountered a configuration error.",PLAT0267:"The connector %1s configuration error has been repaired.",PLAT0272:"Power on for system %1s.",PLAT0274:"Power cycle hard requested for system %1s.",PLAT0276:"Power cycle soft requested for system %1s.",PLAT0278:"PXE boot requested for system %1s.",PLAT0280:"Diagnostics boot requested for system %1s.",PLAT0282:"System restart requested for system %1s.",PLAT0284:"System restart begun for system %1s.",PLAT0286:"No bootable media available for system %1s.",PLAT0288:"Non-bootable media selected for system %1s.",PLAT0290:"PXE server not found for system %1s.",PLAT0292:"User timeout on boot for system %1s.",PLAT0296:"System %1s boot from floppy initiated.",PLAT0298:"System %1s boot from local drive initiated.",PLAT0300:"System %1s boot from PXE on network port initiated.",PLAT0302:"System %1s boot diagnostics initiated.",PLAT0304:"System %1s boot from CD initiated.",PLAT0306:"System %1s boot from ROM initiated.",PLAT0312:"System %1s boot initiated.",PLAT0320:"Critical stop during OS load on system %1s.",PLAT0322:"Run-time critical stop on system %1s.",PLAT0324:"OS graceful stop on system %1s.",PLAT0326:"OS graceful shutdown begun on system %1s.",PLAT0327:"OS graceful shutdown completed on system %1s.",PLAT0328:"Agent not responding on system %1s.",PLAT0329:"Agent has begun responding on system %1s.",PLAT0330:"Fault in slot on system %1s.",PLAT0331:"Fault condition removed on system %1s.",PLAT0332:"Identifying slot on system %1s.",PLAT0333:"Identify stopped on slot for system %1s.",PLAT0334:"Package installed in slot for system %1s.",PLAT0336:"Slot empty system %1s.",PLAT0338:"Slot in system %1s is ready for installation.",PLAT0340:"Slot in system %1s is ready for removal.",PLAT0342:"Power is off on slot of system %1s.",PLAT0344:"Power is on for slot of system %1s.",PLAT0346:"Removal requested for slot of system %1s.",PLAT0348:"Interlock activated on slot of system %1s.",PLAT0349:"Interlock de-asserted on slot of system %1s.",PLAT0350:"Slot disabled on system %1s.",PLAT0351:"Slot enabled on system %1s.",PLAT0352:"Slot of system %1s holds spare.",PLAT0353:"Slot of system %1s no longer holds spare.",PLAT0354:"Computer system %1s enabled.",PLAT0356:"Computer system %1s is in sleep - light mode.",PLAT0358:"Computer system %1s is in hibernate.",PLAT0360:"Computer system %1s is in standby.",PLAT0362:"Computer system %1s is in soft off mode.",PLAT0364:"Computer system %1s is in hard off mode.",PLAT0366:"Computer system %1s is sleeping.",PLAT0368:"Watchdog timer expired for %1s.",PLAT0370:"Reboot of system initiated by watchdog %1s.",PLAT0372:"Powering off system initiated by watchdog %1s.",PLAT0374:"Power cycle of system initiated by watchdog %1s.",PLAT0376:"Watchdog timer interrupt occurred for %1s.",PLAT0378:"A page alert has been generated for system %1s.",PLAT0380:"A LAN alert has been generated for system %1s.",PLAT0382:"An event trap has been generated for system %1s.",PLAT0384:"An SNMP trap has been generated for system %1s.",PLAT0390:"%1s detected as present.",PLAT0392:"%1s detected as absent.",PLAT0394:"%1s has been disabled.",PLAT0395:"%1s has been enabled.",PLAT0396:"Heartbeat lost for LAN %1s.",PLAT0397:"Heartbeat detected for LAN %1s.",PLAT0398:"Sensor %1s is unavailable or degraded on management system.",PLAT0399:"Sensor %1s has returned to normal on management system.",PLAT0400:"Controller %1s is unavailable or degraded on management system.",PLAT0401:"Controller %1s has returned to normal on management system.",PLAT0402:"Management system %1s is off-line.",PLAT0404:"Management system %1s is disabled.",PLAT0405:"Management system %1s is enabled.",PLAT0406:"Sensor %1s has failed on management system.",PLAT0408:"FRU %1s has failed on management system.",PLAT0424:"The battery %1s is critically low.",PLAT0427:"The battery %1s is no longer critically low.",PLAT0430:"The battery %1s has been removed from unit.",PLAT0431:"The battery %1s has been added.",PLAT0432:"The battery %1s has failed.",PLAT0434:"Session audit is deactivated on system %1s.",PLAT0435:"Session audit is activated on system %1s.",PLAT0436:"A hardware change occurred on system %1s.",PLAT0438:"A firmware or software change occurred on system %1s.",PLAT0440:"A hardware incompatibility was detected on system %1s.",PLAT0442:"A firmware or software incompatibility was detected on system %1s.",PLAT0444:"Invalid or unsupported hardware was detected on system %1s.",PLAT0446:"Invalid or unsupported firmware or software was detected on system %1s.",PLAT0448:"A successful hardware change was detected on system %1s.",PLAT0450:"A successful software or firmware change was detected on system %1s.",PLAT0464:"FRU %1s not installed on system.",PLAT0465:"FRU %1s installed on system.",PLAT0466:"Activation requested for FRU %1s on system.",PLAT0467:"FRU %1s on system is active.",PLAT0468:"Activation in progress for FRU %1s on system.",PLAT0470:"Deactivation request for FRU %1s on system.",PLAT0471:'FRU %1s on system is in standby or "hot spare" state.',PLAT0472:"Deactivation in progress for FRU %1s on system.",PLAT0474:"Communication lost with FRU %1s on system.",PLAT0476:"Numeric sensor %1s going low (lower non-critical).",PLAT0478:"Numeric sensor %1s going high (lower non-critical).",PLAT0480:"Numeric sensor %1s going low (lower critical).",PLAT0482:"Numeric sensor %1s going high (lower critical).",PLAT0484:"Numeric sensor %1s going low (lower non-recoverable).",PLAT0486:"Numeric sensor %1s going high (lower non-critical).",PLAT0488:"Numeric sensor %1s going low (upper non-critical).",PLAT0490:"Numeric sensor %1s going high (upper non-critical).",PLAT0492:"Numeric sensor %1s going low (upper critical).",PLAT0494:"Numeric sensor %1s going high (upper critical).",PLAT0496:"Numeric sensor %1s going low (upper non-recoverable).",PLAT0498:"Numeric sensor %1s going high (upper non-recoverable).",PLAT0500:"Sensor %1s has transitioned to idle.",PLAT0502:"Sensor %1s has transitioned to active.",PLAT0504:"Sensor %1s has transitioned to busy.",PLAT0508:"Sensor %1s has asserted.",PLAT0509:"Sensor %1s has de-asserted.",PLAT0510:"Sensor %1s is asserting predictive failure.",PLAT0511:"Sensor %1s is de-asserting predictive failure.",PLAT0512:"Sensor %1s has indicated limit exceeded.",PLAT0513:"Sensor %1s has indicated limit no longer exceeded.",PLAT0514:"Sensor %1s has indicated performance met.",PLAT0516:"Sensor %1s has indicated performance lags.",PLAT0518:"Sensor %1s has transitioned to normal state.",PLAT0520:"Sensor %1s has transitioned from normal to non-critical state.",PLAT0522:"Sensor %1s has transitioned to critical from a less severe state.",PLAT0524:"Sensor %1s has transitioned to non-recoverable from a less severe state.",PLAT0526:"Sensor %1s has transitioned to non-critical from a more severe state.",PLAT0528:"Sensor %1s has transitioned to critical from a non-recoverable state.",PLAT0530:"Sensor %1s has transitioned to non-recoverable.",PLAT0532:"Sensor %1s indicates a monitor state.",PLAT0534:"Sensor %1s has an informational state.",PLAT0536:"Device %1s has been added.",PLAT0537:"Device %1s has been removed from unit.",PLAT0538:"Device %1s has been enabled.",PLAT0539:"Device %1s has been disabled.",PLAT0540:"Sensor %1s has indicated a running state.",PLAT0544:"Sensor %1s has indicated a power off state.",PLAT0546:"Sensor %1s has indicated an on-line state.",PLAT0548:"Sensor %1s has indicated an off-line state.",PLAT0550:"Sensor %1s has indicated an off-duty state.",PLAT0552:"Sensor %1s has indicated a degraded state.",PLAT0554:"Sensor %1s has indicated a power save state.",PLAT0556:"Sensor %1s has indicated an install error.",PLAT0558:"Redundancy %1s has been lost.",PLAT0560:"Redundancy %1s has been reduced.",PLAT0561:"Redundancy %1s has been restored.",PLAT0562:"%1s has transitioned to a D0 power state.",PLAT0564:"%1s has transitioned to a D1 power state.",PLAT0566:"%1s has transitioned to a D2 power state.",PLAT0568:"%1s has transitioned to a D3 power state.",PLAT0720:"The System %1s encountered firmware progress - memory initialization entry.",PLAT0721:"The System %1s encountered firmware progress - memory initialization exit.",PLAT0722:"The System %1s encountered firmware progress - hard drive initialization entry.",PLAT0723:"The System %1s encountered firmware progress - hard drive initialization exit.",PLAT0724:"The System %1s encountered firmware progress - user authentication.",PLAT0728:"The System %1s encountered firmware progress - USR resource configuration entry.",PLAT0729:"The System %1s encountered firmware progress - USR resource configuration exit.",PLAT0730:"The System %1s encountered firmware progress - PCI recource configuration entry.",PLAT0731:"The System %1s encountered firmware progress - PCI recource configuration exit.",PLAT0732:"The System %1s encountered firmware progress - Option ROM initialization entry.",PLAT0733:"The System %1s encountered firmware progress - Option ROM initialization entry exit.",PLAT0734:"The System %1s encountered firmware progress -video initialization entry entry.",PLAT0735:"The System %1s encountered firmware progress - video initialization entry exit.",PLAT0736:"The System %1s encountered firmware progress - cache initialization entry.",PLAT0737:"The System %1s encountered firmware progress - cache initialization exit.",PLAT0738:"The System %1s encountered firmware progress - keyboard controller initialization entry.",PLAT0739:"The System %1s encountered firmware progress - keyboard controller initialization exit.",PLAT0740:"The System %1s encountered firmware progress - motherboard initialization entry.",PLAT0741:"The System %1s encountered firmware progress - motherboard initialization exit.",PLAT0742:"The System %1s encountered firmware progress - floppy disk initialization entry.",PLAT0743:"The System %1s encountered firmware progress - floppy disk initialization exit.",PLAT0744:"The System %1s encountered firmware progress - keyboard test entry.",PLAT0745:"The System %1s encountered firmware progress - keyboard test exit.",PLAT0746:"The System %1s encountered firmware progress - pointing device test entry.",PLAT0747:"The System %1s encountered firmware progress - pointing device test exit.",PLAT0750:"The System %1s encountered firmware progress - dock enable entry.",PLAT0751:"The System %1s encountered firmware progress - dock enable exit.",PLAT0752:"The System %1s encountered firmware progress - dock disable entry.",PLAT0753:"The System %1s encountered firmware progress - dock disable exit.",PLAT0760:"The System %1s encountered firmware progress - start OS boot process.",PLAT0762:"The System %1s encountered firmware progress - call OS wake vector.",PLAT0764:"The System %1s encountered firmware progress - unrecoverable keyboard failure.",PLAT0766:"The System %1s encountered firmware progress - no video device detected.",PLAT0768:"The System %1s encountered firmware progress - SMART alert detected on drive.",PLAT0770:"The System %1s encountered firmware progress - unrecoverable boot device failure.",PLAT0789:"Corrupt BIOS detected.",PLAT0790:"The System %1s encountered PCI configuration failure.",PLAT0791:"The System %1s encountered a video subsystem failure.",PLAT0792:"The System %1s encountered a storage subsystem failure.",PLAT0793:"The System %1s encountered a USB subsystem failure.",PLAT0794:"The System %1s has detected no memory in the system.",PLAT0795:"The System %1s encountered a motherboard failure.",PLAT0796:"The System %1s encountered a memory Regulator Voltage Bad.",PLAT0797:"%1s PCI reset is not deasserting.",PLAT0798:"%1s Non-Motherboard Regulator Failure.",PLAT0799:"%1s Power Supply Cable failure.",PLAT0800:"%1s Motherboard regulator failure.",PLAT0801:"%1s System component compatibility mismatch."};module.exports=lme_heci; \ No newline at end of file diff --git a/agents/modules_meshcore_min/amt-mei.min.js b/agents/modules_meshcore_min/amt-mei.min.js deleted file mode 100644 index 35b4455b..00000000 --- a/agents/modules_meshcore_min/amt-mei.min.js +++ /dev/null @@ -1 +0,0 @@ -var Q=require("queue");function amt_heci(){var d=require("events").inherits(this);d.createEvent("error");var u=require("heci");this._ObjectID="pthi";this._rq=new Q();this._setupPTHI=function b(){this._amt=u.create();this._amt.BiosVersionLen=65;this._amt.UnicodeStringLen=20;this._amt.Parent=this;this._amt.on("error",function E(G){if(this.Parent._rq.isEmpty()){this.Parent.emit("error",G)}else{var I=this.Parent._rq.deQueue();var H=I.optional;var F=I.func;H.unshift({Status:-1});F.apply(this.Parent,H);if(!this.Parent._rq.isEmpty()){this.connect(u.GUIDS.AMT,{noPipeline:1})}}});this._amt.on("connect",function D(){this.on("data",function F(H){var I=this.Parent.getCommand(H);var K=this.Parent._rq.deQueue();var J=K.optional;var G=K.func;J.unshift(I);G.apply(this.Parent,J);if(this.Parent._rq.isEmpty()){this.Parent._amt.disconnect();this.Parent._amt=null}else{this.write(this.Parent._rq.peekQueue().send)}});this.write(this.Parent._rq.peekQueue().send)})};function A(D){var E=D.indexOf("\0");if(E>=0){return D.substring(0,E)}else{return D}}this.getCommand=function g(D){var E=D.length==0?(this._rq.peekQueue().cmd|8388608):D.readUInt32LE(4);var F={IsResponse:(E&8388608)==8388608?true:false,Command:(E&8388607),Status:D.length!=0?D.readUInt32LE(12):-1,Data:D.length!=0?D.slice(16):null};return(F)};this.sendCommand=function x(){if(arguments.length<3||typeof(arguments[0])!="number"||typeof(arguments[1])!="object"||typeof(arguments[2])!="function"){throw ("invalid parameters")}var D=[];for(var F=3;F0){M.BiosVersion=M.BiosVersion.substring(0,M.BiosVersion.indexOf("\0"))}K.unshift(M)}else{K.unshift(null)}H.apply(this,K)},D,F)};function C(F,E){if((E==null)&&(typeof(E)!="number")){return null}if(F==null){F=""}var G="";for(var D=0;D0){I.unshift(H.Data.slice(2,2+J).toString())}else{I.unshift(null)}}else{I.unshift(null)}G.apply(this,I)},D,F)};this.getHashHandles=function k(D){var F=[];for(var E=1;E0){this.getCertHashEntry(F.shift(),this._getHashEntrySink,E,G,D,F)}else{G.unshift(D);E.apply(this,G)}};this.getLocalSystemAccount=function m(D){var F=[];for(var E=1;E>24)&255)+"."+((J>>16)&255)+"."+((J>>8)&255)+"."+(J&255);N.unshift(M);K.apply(this,N)}else{N.unshift(null);K.apply(this,N)}},D,I)};this.unprovision=function B(G,D){var H=[];for(var F=2;F>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>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; \ No newline at end of file diff --git a/agents/modules_meshcore_min/amt-wsman-duk.min.js b/agents/modules_meshcore_min/amt-wsman-duk.min.js deleted file mode 100644 index b12434af..00000000 --- a/agents/modules_meshcore_min/amt-wsman-duk.min.js +++ /dev/null @@ -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.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; \ No newline at end of file diff --git a/agents/modules_meshcore_min/amt-wsman.min.js b/agents/modules_meshcore_min/amt-wsman.min.js deleted file mode 100644 index 5508d86f..00000000 --- a/agents/modules_meshcore_min/amt-wsman.min.js +++ /dev/null @@ -1 +0,0 @@ -function WsmanStackCreateService(){var p={_ObjectID:"WSMAN"};p.NextMessageId=1;p.Address="/wsman";p.xmlParser=require("amt-xml");if(arguments.length==1&&typeof(arguments[0]=="object")){var e=arguments[0].transport;if(e){p.comm=new e(arguments[0])}}else{var e=arguments[0];if(e){p.comm=new e(arguments[1],arguments[2],arguments[3],arguments[4],arguments[5],arguments[6])}}p.PerformAjax=function q(t,r,v,u,s){if(s==null){s=""}p.comm.PerformAjax('
"+t,function(w,x,y){if(x!=200){r(p,null,{Header:{HttpError:x}},x,y);return}var z=p.xmlParser.ParseWsman(w);if(!z||z==null){r(p,null,{Header:{HttpError:x}},601,y)}else{r(p,z.Header.ResourceURI,z,200,y)}},v,u)};p.CancelAllQueries=function d(r){p.comm.CancelAllQueries(r)};p.GetNameFromUrl=function(r){var s=r.lastIndexOf("/");return(s==-1)?r:r.substring(s+1)};p.ExecSubscribe=function n(z,t,C,r,B,y,A,w,D,x){var u="",v="",w="";if(D!=null&&x!=null){u='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#UsernameToken'+D+''+x+"";v=''}if(w!=null){w=""+w+""}if(t=="PushWithAck"){t="dmtf.org/wbem/wsman/1/wsman/PushWithAck"}else{if(t=="Push"){t="xmlsoap.org/ws/2004/08/eventing/DeliveryModes/Push"}}var s="http://schemas.xmlsoap.org/ws/2004/08/eventing/Subscribe"+p.Address+""+z+""+(p.NextMessageId++)+"http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous"+c(A)+u+'
'+C+""+w+""+v+"";p.PerformAjax(s+"
",r,B,y,'xmlns:e="http://schemas.xmlsoap.org/ws/2004/08/eventing" xmlns:m="http://x.com"')};p.ExecUnSubscribe=function o(u,r,w,t,v){var s="http://schemas.xmlsoap.org/ws/2004/08/eventing/Unsubscribe"+p.Address+""+u+""+(p.NextMessageId++)+"http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous"+c(v)+"";p.PerformAjax(s+"",r,w,t,'xmlns:e="http://schemas.xmlsoap.org/ws/2004/08/eventing"')};p.ExecPut=function m(v,u,r,x,t,w){var s="http://schemas.xmlsoap.org/ws/2004/09/transfer/Put"+p.Address+""+v+""+(p.NextMessageId++)+"http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymousPT60.000S"+c(w)+""+b(v,u);p.PerformAjax(s+"",r,x,t)};p.ExecCreate=function f(x,w,r,z,v,y){var u=p.GetNameFromUrl(x);var s="http://schemas.xmlsoap.org/ws/2004/09/transfer/Create"+p.Address+""+x+""+(p.NextMessageId++)+"http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymousPT60S"+c(y)+"';for(var t in w){s+=""+w[t]+""}p.PerformAjax(s+"",r,z,v)};p.ExecDelete=function g(v,u,r,w,t){var s="http://schemas.xmlsoap.org/ws/2004/09/transfer/Delete"+p.Address+""+v+""+(p.NextMessageId++)+"http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymousPT60S"+c(u)+"";p.PerformAjax(s,r,w,t)};p.ExecGet=function i(t,r,u,s){p.PerformAjax("http://schemas.xmlsoap.org/ws/2004/09/transfer/Get"+p.Address+""+t+""+(p.NextMessageId++)+"http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymousPT60S",r,u,s)};p.ExecMethod=function j(y,v,r,t,A,w,z){var s="";for(var u in r){if(r[u]!=null){if(Array.isArray(r[u])){for(var B in r[u]){s+=""+r[u][B]+""}}else{s+=""+r[u]+""}}}p.ExecMethodXml(y,v,s,t,A,w,z)};p.ExecMethodXml=function k(v,t,r,s,x,u,w){p.PerformAjax(v+"/"+t+""+p.Address+""+v+""+(p.NextMessageId++)+"http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymousPT60S"+c(w)+"'+r+"",s,x,u)};p.ExecEnum=function h(t,r,u,s){p.PerformAjax("http://schemas.xmlsoap.org/ws/2004/09/enumeration/Enumerate"+p.Address+""+t+""+(p.NextMessageId++)+'http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymousPT60S',r,u,s)};p.ExecPull=function l(u,s,r,v,t){p.PerformAjax("http://schemas.xmlsoap.org/ws/2004/09/enumeration/Pull"+p.Address+""+u+""+(p.NextMessageId++)+'http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymousPT60S'+s+"99999999",r,v,t)};function b(w,u){if(!w||u==null){return""}var s=p.GetNameFromUrl(w);var v="';for(var t in u){if(!u.hasOwnProperty(t)||t.indexOf("__")===0||t.indexOf("@")===0){continue}if(u[t]==null||typeof u[t]==="function"){continue}if(typeof u[t]==="object"&&u[t]["ReferenceParameters"]){v+=""+u[t].Address+""+u[t]["ReferenceParameters"]["ResourceURI"]+"";var x=u[t]["ReferenceParameters"]["SelectorSet"]["Selector"];if(Array.isArray(x)){for(var r=0;r"+x[r]["Value"]+""}}else{v+=""+x.Value+""}v+=""}else{if(Array.isArray(u[t])){for(var r=0;r"+u[t][r].toString()+""}}else{v+=""+u[t].toString()+""}}}v+="";return v}function a(r){if(!r){return""}var t=" ";for(var s in r){if(!r.hasOwnProperty(s)||s.indexOf("@")!==0){continue}t+=s.substring(1)+'="'+r[s]+'" '}return t}function c(v){if(!v){return""}if(typeof v=="string"){return v}if(v.InstanceID){return''+v.InstanceID+""}var t="";for(var s in v){if(!v.hasOwnProperty(s)){continue}t+='';if(v[s]["ReferenceParameters"]){t+="";t+=""+v[s]["Address"]+""+v[s]["ReferenceParameters"]["ResourceURI"]+"";var u=v[s]["ReferenceParameters"]["SelectorSet"]["Selector"];if(Array.isArray(u)){for(var r=0;r"+u[r]["Value"]+""}}else{t+=""+u.Value+""}t+=""}else{t+=v[s]}t+=""}t+="";return t}return p}module.exports=WsmanStackCreateService; \ No newline at end of file diff --git a/agents/modules_meshcore_min/amt-xml.min.js b/agents/modules_meshcore_min/amt-xml.min.js deleted file mode 100644 index 821a1dd7..00000000 --- a/agents/modules_meshcore_min/amt-xml.min.js +++ /dev/null @@ -1 +0,0 @@ -try{Object.defineProperty(Array.prototype,"peek",{value:function(){return(this.length>0?this[this.length-1]:undefined)}})}catch(e){}module.exports.ParseWsman=function(j){try{if(!j.childNodes){j=_turnToXml(j)}var g={Header:{}},d=j.getElementsByTagName("Header")[0],h;if(!d){d=j.getElementsByTagName("a:Header")[0]}if(!d){return null}for(var f=0;f0){h=a.childNodes[0].localName;if(h.indexOf("_OUTPUT")==h.length-7){h=h.substring(0,h.length-7)}g.Header.Method=h;g.Body=_ParseWsmanRec(a.childNodes[0])}return g}catch(c){console.error("Unable to parse XML: "+j,c);return null}};function _ParseWsmanRec(g){var c,h={};for(var d=0;d0)){b={Value:c};for(var f=0;f';for(var c in d){if(!d.hasOwnProperty(c)||c.indexOf("__")===0||c.indexOf("@")===0){continue}if(d[c]==null||typeof d[c]==="function"){continue}if(typeof d[c]==="object"&&d[c]["ReferenceParameters"]){f+=""+d[c].Address+""+d[c]["ReferenceParameters"]["ResourceURI"]+"";var h=d[c]["ReferenceParameters"]["SelectorSet"]["Selector"];if(Array.isArray(h)){for(var a=0;a"+h[a]["Value"]+""}}else{f+=""+h.Value+""}f+=""}else{if(Array.isArray(d[c])){for(var a=0;a"+d[c][a].toString()+""}}else{f+=""+d[c].toString()+""}}}f+="";return f}function _treeBuilder(){this.tree=[];this.push=function(a){this.tree.push(a)};this.pop=function(){var a=this.tree.pop();if(this.tree.length>0){var b=this.tree.peek();b.childNodes.push(a);b.childElementCount=b.childNodes.length}return(a)};this.peek=function(){return(this.tree.peek())};this.addNamespace=function(g,d){this.tree.peek().nsTable[g]=d;if(this.tree.peek().attributes.length>0){for(var c=0;c=0;--a){if(this.tree[a].nsTable[b]!=null){return(this.tree[a].nsTable[b])}}return null}}function _turnToXml(a){if(a==null){return null}return({childNodes:[_turnToXmlRec(a)],getElementsByTagName:_getElementsByTagName,getChildElementsByTagName:_getChildElementsByTagName,getElementsByTagNameNS:_getElementsByTagNameNS})}function _getElementsByTagNameNS(b,a){var c=[];_xmlTraverseAllRec(this.childNodes,function(d){if(d.localName==a&&(d.namespace==b||b=="*")){c.push(d)}});return c}function _getElementsByTagName(a){var b=[];_xmlTraverseAllRec(this.childNodes,function(c){if(c.localName==a){b.push(c)}});return b}function _getChildElementsByTagName(a){var c=[];if(this.childNodes!=null){for(var b in this.childNodes){if(this.childNodes[b].localName==a){c.push(this.childNodes[b])}}}return(c)}function _getChildElementsByTagNameNS(c,a){var d=[];if(this.childNodes!=null){for(var b in this.childNodes){if(this.childNodes[b].localName==a&&(c=="*"||this.childNodes[b].namespace==c)){d.push(this.childNodes[b])}}}return(d)}function _xmlTraverseAllRec(c,a){for(var b in c){a(c[b]);if(c[b].childNodes){_xmlTraverseAllRec(c[b].childNodes,a)}}}function _turnToXmlRec(v){var m=new _treeBuilder(),q=null,y=v.split("<"),t=[],h=null,g=null;for(var n in y){var z=y[n].split(">"),A=z[0].split(" "),l=A[0];if((l.length>0)&&(l[0]!="?")){if(l[0]!="/"){var a=[],r,s=l.split(" ")[0].split(":"),r=(s.length>1)?s[1]:s[0];Object.defineProperty(a,"get",{value:function(){if(arguments.length==1){for(var i in this){if(this[i].name==arguments[0]){return(this[i])}}}else{if(arguments.length==2){for(var i in this){if(this[i].name==arguments[1]&&(arguments[0]=="*"||this[i].namespace==arguments[0])){return(this[i])}}}else{throw ("attributes.get(): Invalid number of parameters")}}}});m.push({name:l,localName:r,getChildElementsByTagName:_getChildElementsByTagName,getElementsByTagNameNS:_getElementsByTagNameNS,getChildElementsByTagNameNS:_getChildElementsByTagNameNS,attributes:a,childNodes:[],nsTable:{}});if(A.length>0){var u=false;for(var o in A){if(A[o]=="/"){m.peek().namespace=m.peek().name==m.peek().localName?m.getNamespace("*"):m.getNamespace(m.peek().name.substring(0,m.peek().name.indexOf(":")));m.peek().textContent="";q=m.pop();u=true;break}var p=A[o].indexOf("=");if(p>0){var b=A[o].substring(0,p);var d=A[o].substring(p+2,A[o].length-1);var c=m.getNamespace("*");if(b=="xmlns"){m.addNamespace("*",d);c=d}else{if(b.startsWith("xmlns:")){m.addNamespace(b.substring(6),d)}else{var f=b.split(":");if(f.length==2){b=f[1];c=m.getNamespace(f[0])}}}var w={name:b,value:d};if(c!=null){w.namespace=c}m.peek().attributes.push(w)}}if(u){continue}}m.peek().namespace=m.peek().name==m.peek().localName?m.getNamespace("*"):m.getNamespace(m.peek().name.substring(0,m.peek().name.indexOf(":")));if(z[1]){m.peek().textContent=z[1]}}else{q=m.pop()}}}return q}; \ No newline at end of file diff --git a/agents/modules_meshcore_min/amt.min.js b/agents/modules_meshcore_min/amt.min.js deleted file mode 100644 index 2cbca422..00000000 --- a/agents/modules_meshcore_min/amt.min.js +++ /dev/null @@ -1 +0,0 @@ -function AmtStackCreateService(R){var J=new Object();J._ObjectID="AMT";J.wsman=R;J.pfx=["http://intel.com/wbem/wscim/1/amt-schema/1/","http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/","http://intel.com/wbem/wscim/1/ips-schema/1/"];J.PendingEnums=[];J.PendingBatchOperations=0;J.ActiveEnumsCount=0;J.MaxActiveEnumsCount=1;J.onProcessChanged=null;var n=0;var m=0;J.GetPendingActions=function(){return(J.PendingEnums.length*2)+(J.ActiveEnumsCount)+J.wsman.comm.PendingAjax.length+J.wsman.comm.ActiveAjaxCount+J.PendingBatchOperations};function r(){var S=J.GetPendingActions();if(n=J.MaxActiveEnumsCount||J.PendingEnums.length==0){return}var T=J.PendingEnums.shift();J.Enum(T[0],T[1],T[2]);d(0)}J.BatchEnum=function(S,V,T,X,U,W){J.PendingBatchOperations+=(V.length*2);b(S,x(V),T,X,{},U,W);r()};function x(S){return JSON.parse(JSON.stringify(S))}function b(S,X,T,aa,Z,U,Y){J.PendingBatchOperations-=2;var W=X.shift(),V=J.Enum;if(W[0]=="*"){V=J.Get;W=W.substring(1)}V(W,function(ad,ab,ac,ae,af){af[2][ab]={response:(ac==null?null:ac.Body),responses:ac,status:ae};if(af[1].length==0||ae==401||(U!=true&&ae!=200&&ae!=400)){J.PendingBatchOperations-=(X.length*2);r();T.call(J,J,S,af[2],ae,aa)}else{r();b(S,X,T,aa,af[2],Y)}},[S,X,Z],Y);r()}J.BatchGet=function(S,U,T,W,V){h({name:S,names:U,callback:T,current:0,responses:{},tag:W,pri:V});r()};function h(S){if(S.names.length<=S.current){S.callback.call(J,J,S.name,S.responses,200,S.tag)}else{J.wsman.ExecGet(J.CompleteName(S.names[S.current]),function(V,U,T,W){g(S,T,W)},S.pri);S.current++}r()}function g(S,T,U){if(T==null||U!=200){S.callback.call(J,J,S.name,null,U,S.tag)}else{S.responses[T.Header.Method]=T;h(S)}}J.CompleteName=function(S){if(S.indexOf("AMT_")==0){return J.pfx[0]+S}if(S.indexOf("CIM_")==0){return J.pfx[1]+S}if(S.indexOf("IPS_")==0){return J.pfx[2]+S}};J.CompleteExecResponse=function(S){if(S&&S!=null&&S.Body&&(S.Body.ReturnValue!=undefined)){S.Body.ReturnValueStr=J.AmtStatusToStr(S.Body.ReturnValue)}return S};J.RequestPowerStateChange=function(T,S){J.CIM_PowerManagementService_RequestPowerStateChange(T,'
http://schemas.xmlsoap.org/ws/2004/08/addressing
http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ComputerSystemCIM_ComputerSystemManagedSystem',null,null,S)};J.SetBootConfigRole=function(T,S){J.CIM_BootService_SetBootConfigRole('
http://schemas.xmlsoap.org/ws/2004/08/addressing
http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_BootConfigSettingIntel(r) AMT: Boot Configuration 0',T,S)};J.CancelAllQueries=function(S){J.wsman.CancelAllQueries(S)};J.AMT_AgentPresenceWatchdog_RegisterAgent=function(S,V,T,U){J.Exec("AMT_AgentPresenceWatchdog","RegisterAgent",{},S,V,T,U)};J.AMT_AgentPresenceWatchdog_AssertPresence=function(V,S,W,T,U){J.Exec("AMT_AgentPresenceWatchdog","AssertPresence",{SequenceNumber:V},S,W,T,U)};J.AMT_AgentPresenceWatchdog_AssertShutdown=function(V,S,W,T,U){J.Exec("AMT_AgentPresenceWatchdog","AssertShutdown",{SequenceNumber:V},S,W,T,U)};J.AMT_AgentPresenceWatchdog_AddAction=function(X,W,V,T,S,U,aa,Y,Z){J.Exec("AMT_AgentPresenceWatchdog","AddAction",{OldState:X,NewState:W,EventOnTransition:V,ActionSd:T,ActionEac:S},U,aa,Y,Z)};J.AMT_AgentPresenceWatchdog_DeleteAllActions=function(S,V,T,U){J.Exec("AMT_AgentPresenceWatchdog","DeleteAllActions",{},S,V,T,U)};J.AMT_AgentPresenceWatchdogAction_GetActionEac=function(S){J.Exec("AMT_AgentPresenceWatchdogAction","GetActionEac",{},S)};J.AMT_AgentPresenceWatchdogVA_RegisterAgent=function(S){J.Exec("AMT_AgentPresenceWatchdogVA","RegisterAgent",{},S)};J.AMT_AgentPresenceWatchdogVA_AssertPresence=function(T,S){J.Exec("AMT_AgentPresenceWatchdogVA","AssertPresence",{SequenceNumber:T},S)};J.AMT_AgentPresenceWatchdogVA_AssertShutdown=function(T,S){J.Exec("AMT_AgentPresenceWatchdogVA","AssertShutdown",{SequenceNumber:T},S)};J.AMT_AgentPresenceWatchdogVA_AddAction=function(X,W,V,T,S,U){J.Exec("AMT_AgentPresenceWatchdogVA","AddAction",{OldState:X,NewState:W,EventOnTransition:V,ActionSd:T,ActionEac:S},U)};J.AMT_AgentPresenceWatchdogVA_DeleteAllActions=function(S,T){J.Exec("AMT_AgentPresenceWatchdogVA","DeleteAllActions",{_method_dummy:S},T)};J.AMT_AlarmClockService_AddAlarm=function s(S,T){var V=S.InstanceID;var X=S.ElementName;var Y=S.StartTime.Datetime;var W=S.Interval?S.Interval.Datetime:undefined;var U=S.DeleteOnCompletion;var Z=''+V+""+X+''+Y+""+((W!=undefined)?(''+W+""):"")+""+U+"";J.wsman.ExecMethodXml(J.CompleteName("AMT_AlarmClockService"),"AddAlarm",Z,T)};J.AMT_AuditLog_ClearLog=function(S){J.Exec("AMT_AuditLog","ClearLog",{},S)};J.AMT_AuditLog_RequestStateChange=function(T,U,S){J.Exec("AMT_AuditLog","RequestStateChange",{RequestedState:T,TimeoutPeriod:U},S)};J.AMT_AuditLog_ReadRecords=function(T,S,U){J.Exec("AMT_AuditLog","ReadRecords",{StartIndex:T},S,U)};J.AMT_AuditLog_SetAuditLock=function(V,T,U,S){J.Exec("AMT_AuditLog","SetAuditLock",{LockTimeoutInSeconds:V,Flag:T,Handle:U},S)};J.AMT_AuditLog_ExportAuditLogSignature=function(T,S){J.Exec("AMT_AuditLog","ExportAuditLogSignature",{SigningMechanism:T},S)};J.AMT_AuditLog_SetSigningKeyMaterial=function(W,V,U,T,S){J.Exec("AMT_AuditLog","SetSigningKeyMaterial",{SigningMechanismType:W,SigningKey:V,LengthOfCertificates:U,Certificates:T},S)};J.AMT_AuditPolicyRule_SetAuditPolicy=function(U,S,V,W,T){J.Exec("AMT_AuditPolicyRule","SetAuditPolicy",{Enable:U,AuditedAppID:S,EventID:V,PolicyType:W},T)};J.AMT_AuditPolicyRule_SetAuditPolicyBulk=function(U,S,V,W,T){J.Exec("AMT_AuditPolicyRule","SetAuditPolicyBulk",{Enable:U,AuditedAppID:S,EventID:V,PolicyType:W},T)};J.AMT_AuthorizationService_AddUserAclEntryEx=function(V,U,W,S,X,T){J.Exec("AMT_AuthorizationService","AddUserAclEntryEx",{DigestUsername:V,DigestPassword:U,KerberosUserSid:W,AccessPermission:S,Realms:X},T)};J.AMT_AuthorizationService_EnumerateUserAclEntries=function(T,S){J.Exec("AMT_AuthorizationService","EnumerateUserAclEntries",{StartIndex:T},S)};J.AMT_AuthorizationService_GetUserAclEntryEx=function(T,S,U){J.Exec("AMT_AuthorizationService","GetUserAclEntryEx",{Handle:T},S,U)};J.AMT_AuthorizationService_UpdateUserAclEntryEx=function(W,V,U,X,S,Y,T){J.Exec("AMT_AuthorizationService","UpdateUserAclEntryEx",{Handle:W,DigestUsername:V,DigestPassword:U,KerberosUserSid:X,AccessPermission:S,Realms:Y},T)};J.AMT_AuthorizationService_RemoveUserAclEntry=function(T,S){J.Exec("AMT_AuthorizationService","RemoveUserAclEntry",{Handle:T},S)};J.AMT_AuthorizationService_SetAdminAclEntryEx=function(U,T,S){J.Exec("AMT_AuthorizationService","SetAdminAclEntryEx",{Username:U,DigestPassword:T},S)};J.AMT_AuthorizationService_GetAdminAclEntry=function(S){J.Exec("AMT_AuthorizationService","GetAdminAclEntry",{},S)};J.AMT_AuthorizationService_GetAdminAclEntryStatus=function(S){J.Exec("AMT_AuthorizationService","GetAdminAclEntryStatus",{},S)};J.AMT_AuthorizationService_GetAdminNetAclEntryStatus=function(S){J.Exec("AMT_AuthorizationService","GetAdminNetAclEntryStatus",{},S)};J.AMT_AuthorizationService_SetAclEnabledState=function(U,T,S,V){J.Exec("AMT_AuthorizationService","SetAclEnabledState",{Handle:U,Enabled:T},S,V)};J.AMT_AuthorizationService_GetAclEnabledState=function(T,S,U){J.Exec("AMT_AuthorizationService","GetAclEnabledState",{Handle:T},S,U)};J.AMT_EndpointAccessControlService_RequestStateChange=function(T,U,S){J.Exec("AMT_EndpointAccessControlService","RequestStateChange",{RequestedState:T,TimeoutPeriod:U},S)};J.AMT_EndpointAccessControlService_GetPosture=function(T,S){J.Exec("AMT_EndpointAccessControlService","GetPosture",{PostureType:T},S)};J.AMT_EndpointAccessControlService_GetPostureHash=function(T,S){J.Exec("AMT_EndpointAccessControlService","GetPostureHash",{PostureType:T},S)};J.AMT_EndpointAccessControlService_UpdatePostureState=function(T,S){J.Exec("AMT_EndpointAccessControlService","UpdatePostureState",{UpdateType:T},S)};J.AMT_EndpointAccessControlService_GetEacOptions=function(S){J.Exec("AMT_EndpointAccessControlService","GetEacOptions",{},S)};J.AMT_EndpointAccessControlService_SetEacOptions=function(T,U,S){J.Exec("AMT_EndpointAccessControlService","SetEacOptions",{EacVendors:T,PostureHashAlgorithm:U},S)};J.AMT_EnvironmentDetectionSettingData_SetSystemDefensePolicy=function(T,S){J.Exec("AMT_EnvironmentDetectionSettingData","SetSystemDefensePolicy",{Policy:T},S)};J.AMT_EnvironmentDetectionSettingData_EnableVpnRouting=function(T,S){J.Exec("AMT_EnvironmentDetectionSettingData","EnableVpnRouting",{Enable:T},S)};J.AMT_EthernetPortSettings_SetLinkPreference=function(T,U,S){J.Exec("AMT_EthernetPortSettings","SetLinkPreference",{LinkPreference:T,Timeout:U},S)};J.AMT_HeuristicPacketFilterStatistics_ResetSelectedStats=function(T,S){J.Exec("AMT_HeuristicPacketFilterStatistics","ResetSelectedStats",{SelectedStatistics:T},S)};J.AMT_KerberosSettingData_GetCredentialCacheState=function(S){J.Exec("AMT_KerberosSettingData","GetCredentialCacheState",{},S)};J.AMT_KerberosSettingData_SetCredentialCacheState=function(T,S){J.Exec("AMT_KerberosSettingData","SetCredentialCacheState",{Enable:T},S)};J.AMT_MessageLog_CancelIteration=function(T,S){J.Exec("AMT_MessageLog","CancelIteration",{IterationIdentifier:T},S)};J.AMT_MessageLog_RequestStateChange=function(T,U,S){J.Exec("AMT_MessageLog","RequestStateChange",{RequestedState:T,TimeoutPeriod:U},S)};J.AMT_MessageLog_ClearLog=function(S){J.Exec("AMT_MessageLog","ClearLog",{},S)};J.AMT_MessageLog_GetRecords=function(T,U,S,V){J.Exec("AMT_MessageLog","GetRecords",{IterationIdentifier:T,MaxReadRecords:U},S,V)};J.AMT_MessageLog_GetRecord=function(T,U,S){J.Exec("AMT_MessageLog","GetRecord",{IterationIdentifier:T,PositionToNext:U},S)};J.AMT_MessageLog_PositionAtRecord=function(T,U,V,S){J.Exec("AMT_MessageLog","PositionAtRecord",{IterationIdentifier:T,MoveAbsolute:U,RecordNumber:V},S)};J.AMT_MessageLog_PositionToFirstRecord=function(S,T){J.Exec("AMT_MessageLog","PositionToFirstRecord",{},S,T)};J.AMT_MessageLog_FreezeLog=function(T,S){J.Exec("AMT_MessageLog","FreezeLog",{Freeze:T},S)};J.AMT_PublicKeyManagementService_AddCRL=function(U,T,S){J.Exec("AMT_PublicKeyManagementService","AddCRL",{Url:U,SerialNumbers:T},S)};J.AMT_PublicKeyManagementService_ResetCRLList=function(S,T){J.Exec("AMT_PublicKeyManagementService","ResetCRLList",{_method_dummy:S},T)};J.AMT_PublicKeyManagementService_AddCertificate=function(T,S,U){J.Exec("AMT_PublicKeyManagementService","AddCertificate",{CertificateBlob:T},S,U)};J.AMT_PublicKeyManagementService_AddTrustedRootCertificate=function(T,S){J.Exec("AMT_PublicKeyManagementService","AddTrustedRootCertificate",{CertificateBlob:T},S)};J.AMT_PublicKeyManagementService_AddKey=function(T,S){J.Exec("AMT_PublicKeyManagementService","AddKey",{KeyBlob:T},S)};J.AMT_PublicKeyManagementService_GeneratePKCS10Request=function(U,T,V,S){J.Exec("AMT_PublicKeyManagementService","GeneratePKCS10Request",{KeyPair:U,DNName:T,Usage:V},S)};J.AMT_PublicKeyManagementService_GeneratePKCS10RequestEx=function(T,V,U,S){J.Exec("AMT_PublicKeyManagementService","GeneratePKCS10RequestEx",{KeyPair:T,SigningAlgorithm:V,NullSignedCertificateRequest:U},S)};J.AMT_PublicKeyManagementService_GenerateKeyPair=function(T,U,S){J.Exec("AMT_PublicKeyManagementService","GenerateKeyPair",{KeyAlgorithm:T,KeyLength:U},S)};J.AMT_RedirectionService_RequestStateChange=function(T,S){J.Exec("AMT_RedirectionService","RequestStateChange",{RequestedState:T},S)};J.AMT_RedirectionService_TerminateSession=function(T,S){J.Exec("AMT_RedirectionService","TerminateSession",{SessionType:T},S)};J.AMT_RemoteAccessService_AddMpServer=function(S,X,Z,T,V,aa,Y,W,U){J.Exec("AMT_RemoteAccessService","AddMpServer",{AccessInfo:S,InfoFormat:X,Port:Z,AuthMethod:T,Certificate:V,Username:aa,Password:Y,CN:W},U)};J.AMT_RemoteAccessService_AddRemoteAccessPolicyRule=function(V,W,T,U,S){J.Exec("AMT_RemoteAccessService","AddRemoteAccessPolicyRule",{Trigger:V,TunnelLifeTime:W,ExtendedData:T,MpServer:U},S)};J.AMT_RemoteAccessService_CloseRemoteAccessConnection=function(S,T){J.Exec("AMT_RemoteAccessService","CloseRemoteAccessConnection",{_method_dummy:S},T)};J.AMT_SetupAndConfigurationService_CommitChanges=function(S,T,U){J.Exec("AMT_SetupAndConfigurationService","CommitChanges",{_method_dummy:S},T,U)};J.AMT_SetupAndConfigurationService_Unprovision=function(T,S){J.Exec("AMT_SetupAndConfigurationService","Unprovision",{ProvisioningMode:T},S)};J.AMT_SetupAndConfigurationService_PartialUnprovision=function(S,T){J.Exec("AMT_SetupAndConfigurationService","PartialUnprovision",{_method_dummy:S},T)};J.AMT_SetupAndConfigurationService_ResetFlashWearOutProtection=function(S,T){J.Exec("AMT_SetupAndConfigurationService","ResetFlashWearOutProtection",{_method_dummy:S},T)};J.AMT_SetupAndConfigurationService_ExtendProvisioningPeriod=function(T,S){J.Exec("AMT_SetupAndConfigurationService","ExtendProvisioningPeriod",{Duration:T},S)};J.AMT_SetupAndConfigurationService_SetMEBxPassword=function(T,S){J.Exec("AMT_SetupAndConfigurationService","SetMEBxPassword",{Password:T},S)};J.AMT_SetupAndConfigurationService_SetTLSPSK=function(T,U,S){J.Exec("AMT_SetupAndConfigurationService","SetTLSPSK",{PID:T,PPS:U},S)};J.AMT_SetupAndConfigurationService_GetProvisioningAuditRecord=function(S){J.Exec("AMT_SetupAndConfigurationService","GetProvisioningAuditRecord",{},S)};J.AMT_SetupAndConfigurationService_GetUuid=function(S){J.Exec("AMT_SetupAndConfigurationService","GetUuid",{},S)};J.AMT_SetupAndConfigurationService_GetUnprovisionBlockingComponents=function(S){J.Exec("AMT_SetupAndConfigurationService","GetUnprovisionBlockingComponents",{},S)};J.AMT_SetupAndConfigurationService_GetProvisioningAuditRecordV2=function(S){J.Exec("AMT_SetupAndConfigurationService","GetProvisioningAuditRecordV2",{},S)};J.AMT_SystemDefensePolicy_GetTimeout=function(S){J.Exec("AMT_SystemDefensePolicy","GetTimeout",{},S)};J.AMT_SystemDefensePolicy_SetTimeout=function(T,S){J.Exec("AMT_SystemDefensePolicy","SetTimeout",{Timeout:T},S)};J.AMT_SystemDefensePolicy_UpdateStatistics=function(T,V,S,X,U,W){J.Exec("AMT_SystemDefensePolicy","UpdateStatistics",{NetworkInterface:T,ResetOnRead:V},S,X,U,W)};J.AMT_SystemPowerScheme_SetPowerScheme=function(S,T,U){J.Exec("AMT_SystemPowerScheme","SetPowerScheme",{},S,U,0,{InstanceID:T})};J.AMT_TimeSynchronizationService_GetLowAccuracyTimeSynch=function(S,T){J.Exec("AMT_TimeSynchronizationService","GetLowAccuracyTimeSynch",{},S,T)};J.AMT_TimeSynchronizationService_SetHighAccuracyTimeSynch=function(T,V,W,S,U){J.Exec("AMT_TimeSynchronizationService","SetHighAccuracyTimeSynch",{Ta0:T,Tm1:V,Tm2:W},S,U)};J.AMT_TLSCredentialContext_Create=function t(T,U,S,V){J.Create("AMT_TLSCredentialContext",{ElementInContext:T,ElementProvidingContext:U},S,V)};J.AMT_UserInitiatedConnectionService_RequestStateChange=function(T,U,S){J.Exec("AMT_UserInitiatedConnectionService","RequestStateChange",{RequestedState:T,TimeoutPeriod:U},S)};J.AMT_WebUIService_RequestStateChange=function(T,V,S,U){J.Exec("AMT_WebUIService","RequestStateChange",{RequestedState:T,TimeoutPeriod:V},S,U)};J.AMT_WiFiPortConfigurationService_AddWiFiSettings=function(W,X,V,U,S,T){J.ExecWithXml("AMT_WiFiPortConfigurationService","AddWiFiSettings",{WiFiEndpoint:W,WiFiEndpointSettingsInput:X,IEEE8021xSettingsInput:V,ClientCredential:U,CACredential:S},T)};J.AMT_WiFiPortConfigurationService_UpdateWiFiSettings=function(W,X,V,U,S,T){J.ExecWithXml("AMT_WiFiPortConfigurationService","UpdateWiFiSettings",{WiFiEndpointSettings:W,WiFiEndpointSettingsInput:X,IEEE8021xSettingsInput:V,ClientCredential:U,CACredential:S},T)};J.AMT_WiFiPortConfigurationService_DeleteAllITProfiles=function(S,T){J.Exec("AMT_WiFiPortConfigurationService","DeleteAllITProfiles",{_method_dummy:S},T)};J.AMT_WiFiPortConfigurationService_DeleteAllUserProfiles=function(S,T){J.Exec("AMT_WiFiPortConfigurationService","DeleteAllUserProfiles",{_method_dummy:S},T)};J.CIM_Account_RequestStateChange=function(T,U,S){J.Exec("CIM_Account","RequestStateChange",{RequestedState:T,TimeoutPeriod:U},S)};J.CIM_AccountManagementService_CreateAccount=function(U,S,T){J.Exec("CIM_AccountManagementService","CreateAccount",{System:U,AccountTemplate:S},T)};J.CIM_BootConfigSetting_ChangeBootOrder=function(T,S){J.Exec("CIM_BootConfigSetting","ChangeBootOrder",{Source:T},S)};J.CIM_BootService_SetBootConfigRole=function(S,U,T){J.Exec("CIM_BootService","SetBootConfigRole",{BootConfigSetting:S,Role:U},T,0,1)};J.CIM_Card_ConnectorPower=function(T,U,S){J.Exec("CIM_Card","ConnectorPower",{Connector:T,PoweredOn:U},S)};J.CIM_Card_IsCompatible=function(T,S){J.Exec("CIM_Card","IsCompatible",{ElementToCheck:T},S)};J.CIM_Chassis_IsCompatible=function(T,S){J.Exec("CIM_Chassis","IsCompatible",{ElementToCheck:T},S)};J.CIM_Fan_SetSpeed=function(T,S){J.Exec("CIM_Fan","SetSpeed",{DesiredSpeed:T},S)};J.CIM_KVMRedirectionSAP_RequestStateChange=function(T,U,S){J.Exec("CIM_KVMRedirectionSAP","RequestStateChange",{RequestedState:T},S)};J.CIM_MediaAccessDevice_LockMedia=function(T,S){J.Exec("CIM_MediaAccessDevice","LockMedia",{Lock:T},S)};J.CIM_MediaAccessDevice_SetPowerState=function(T,U,S){J.Exec("CIM_MediaAccessDevice","SetPowerState",{PowerState:T,Time:U},S)};J.CIM_MediaAccessDevice_Reset=function(S){J.Exec("CIM_MediaAccessDevice","Reset",{},S)};J.CIM_MediaAccessDevice_EnableDevice=function(T,S){J.Exec("CIM_MediaAccessDevice","EnableDevice",{Enabled:T},S)};J.CIM_MediaAccessDevice_OnlineDevice=function(T,S){J.Exec("CIM_MediaAccessDevice","OnlineDevice",{Online:T},S)};J.CIM_MediaAccessDevice_QuiesceDevice=function(T,S){J.Exec("CIM_MediaAccessDevice","QuiesceDevice",{Quiesce:T},S)};J.CIM_MediaAccessDevice_SaveProperties=function(S){J.Exec("CIM_MediaAccessDevice","SaveProperties",{},S)};J.CIM_MediaAccessDevice_RestoreProperties=function(S){J.Exec("CIM_MediaAccessDevice","RestoreProperties",{},S)};J.CIM_MediaAccessDevice_RequestStateChange=function(T,U,S){J.Exec("CIM_MediaAccessDevice","RequestStateChange",{RequestedState:T,TimeoutPeriod:U},S)};J.CIM_PhysicalFrame_IsCompatible=function(T,S){J.Exec("CIM_PhysicalFrame","IsCompatible",{ElementToCheck:T},S)};J.CIM_PhysicalPackage_IsCompatible=function(T,S){J.Exec("CIM_PhysicalPackage","IsCompatible",{ElementToCheck:T},S)};J.CIM_PowerManagementService_RequestPowerStateChange=function(U,T,V,W,S){J.Exec("CIM_PowerManagementService","RequestPowerStateChange",{PowerState:U,ManagedElement:T,Time:V,TimeoutPeriod:W},S,0,1)};J.CIM_PowerSupply_SetPowerState=function(T,U,S){J.Exec("CIM_PowerSupply","SetPowerState",{PowerState:T,Time:U},S)};J.CIM_PowerSupply_Reset=function(S){J.Exec("CIM_PowerSupply","Reset",{},S)};J.CIM_PowerSupply_EnableDevice=function(T,S){J.Exec("CIM_PowerSupply","EnableDevice",{Enabled:T},S)};J.CIM_PowerSupply_OnlineDevice=function(T,S){J.Exec("CIM_PowerSupply","OnlineDevice",{Online:T},S)};J.CIM_PowerSupply_QuiesceDevice=function(T,S){J.Exec("CIM_PowerSupply","QuiesceDevice",{Quiesce:T},S)};J.CIM_PowerSupply_SaveProperties=function(S){J.Exec("CIM_PowerSupply","SaveProperties",{},S)};J.CIM_PowerSupply_RestoreProperties=function(S){J.Exec("CIM_PowerSupply","RestoreProperties",{},S)};J.CIM_PowerSupply_RequestStateChange=function(T,U,S){J.Exec("CIM_PowerSupply","RequestStateChange",{RequestedState:T,TimeoutPeriod:U},S)};J.CIM_Processor_SetPowerState=function(T,U,S){J.Exec("CIM_Processor","SetPowerState",{PowerState:T,Time:U},S)};J.CIM_Processor_Reset=function(S){J.Exec("CIM_Processor","Reset",{},S)};J.CIM_Processor_EnableDevice=function(T,S){J.Exec("CIM_Processor","EnableDevice",{Enabled:T},S)};J.CIM_Processor_OnlineDevice=function(T,S){J.Exec("CIM_Processor","OnlineDevice",{Online:T},S)};J.CIM_Processor_QuiesceDevice=function(T,S){J.Exec("CIM_Processor","QuiesceDevice",{Quiesce:T},S)};J.CIM_Processor_SaveProperties=function(S){J.Exec("CIM_Processor","SaveProperties",{},S)};J.CIM_Processor_RestoreProperties=function(S){J.Exec("CIM_Processor","RestoreProperties",{},S)};J.CIM_Processor_RequestStateChange=function(T,U,S){J.Exec("CIM_Processor","RequestStateChange",{RequestedState:T,TimeoutPeriod:U},S)};J.CIM_RecordLog_ClearLog=function(S){J.Exec("CIM_RecordLog","ClearLog",{},S)};J.CIM_RecordLog_RequestStateChange=function(T,U,S){J.Exec("CIM_RecordLog","RequestStateChange",{RequestedState:T,TimeoutPeriod:U},S)};J.CIM_RedirectionService_RequestStateChange=function(T,U,S){J.Exec("CIM_RedirectionService","RequestStateChange",{RequestedState:T,TimeoutPeriod:U},S)};J.CIM_Sensor_SetPowerState=function(T,U,S){J.Exec("CIM_Sensor","SetPowerState",{PowerState:T,Time:U},S)};J.CIM_Sensor_Reset=function(S){J.Exec("CIM_Sensor","Reset",{},S)};J.CIM_Sensor_EnableDevice=function(T,S){J.Exec("CIM_Sensor","EnableDevice",{Enabled:T},S)};J.CIM_Sensor_OnlineDevice=function(T,S){J.Exec("CIM_Sensor","OnlineDevice",{Online:T},S)};J.CIM_Sensor_QuiesceDevice=function(T,S){J.Exec("CIM_Sensor","QuiesceDevice",{Quiesce:T},S)};J.CIM_Sensor_SaveProperties=function(S){J.Exec("CIM_Sensor","SaveProperties",{},S)};J.CIM_Sensor_RestoreProperties=function(S){J.Exec("CIM_Sensor","RestoreProperties",{},S)};J.CIM_Sensor_RequestStateChange=function(T,U,S){J.Exec("CIM_Sensor","RequestStateChange",{RequestedState:T,TimeoutPeriod:U},S)};J.CIM_StatisticalData_ResetSelectedStats=function(T,S){J.Exec("CIM_StatisticalData","ResetSelectedStats",{SelectedStatistics:T},S)};J.CIM_Watchdog_KeepAlive=function(S){J.Exec("CIM_Watchdog","KeepAlive",{},S)};J.CIM_Watchdog_SetPowerState=function(T,U,S){J.Exec("CIM_Watchdog","SetPowerState",{PowerState:T,Time:U},S)};J.CIM_Watchdog_Reset=function(S){J.Exec("CIM_Watchdog","Reset",{},S)};J.CIM_Watchdog_EnableDevice=function(T,S){J.Exec("CIM_Watchdog","EnableDevice",{Enabled:T},S)};J.CIM_Watchdog_OnlineDevice=function(T,S){J.Exec("CIM_Watchdog","OnlineDevice",{Online:T},S)};J.CIM_Watchdog_QuiesceDevice=function(T,S){J.Exec("CIM_Watchdog","QuiesceDevice",{Quiesce:T},S)};J.CIM_Watchdog_SaveProperties=function(S){J.Exec("CIM_Watchdog","SaveProperties",{},S)};J.CIM_Watchdog_RestoreProperties=function(S){J.Exec("CIM_Watchdog","RestoreProperties",{},S)};J.CIM_Watchdog_RequestStateChange=function(T,U,S){J.Exec("CIM_Watchdog","RequestStateChange",{RequestedState:T,TimeoutPeriod:U},S)};J.CIM_WiFiPort_SetPowerState=function(T,U,S){J.Exec("CIM_WiFiPort","SetPowerState",{PowerState:T,Time:U},S)};J.CIM_WiFiPort_Reset=function(S){J.Exec("CIM_WiFiPort","Reset",{},S)};J.CIM_WiFiPort_EnableDevice=function(T,S){J.Exec("CIM_WiFiPort","EnableDevice",{Enabled:T},S)};J.CIM_WiFiPort_OnlineDevice=function(T,S){J.Exec("CIM_WiFiPort","OnlineDevice",{Online:T},S)};J.CIM_WiFiPort_QuiesceDevice=function(T,S){J.Exec("CIM_WiFiPort","QuiesceDevice",{Quiesce:T},S)};J.CIM_WiFiPort_SaveProperties=function(S){J.Exec("CIM_WiFiPort","SaveProperties",{},S)};J.CIM_WiFiPort_RestoreProperties=function(S){J.Exec("CIM_WiFiPort","RestoreProperties",{},S)};J.CIM_WiFiPort_RequestStateChange=function(T,U,S){J.Exec("CIM_WiFiPort","RequestStateChange",{RequestedState:T,TimeoutPeriod:U},S)};J.IPS_HostBasedSetupService_Setup=function(W,X,V,T,Y,U,S){J.Exec("IPS_HostBasedSetupService","Setup",{NetAdminPassEncryptionType:W,NetworkAdminPassword:X,McNonce:V,Certificate:T,SigningAlgorithm:Y,DigitalSignature:U},S)};J.IPS_HostBasedSetupService_AddNextCertInChain=function(V,T,U,S){J.Exec("IPS_HostBasedSetupService","AddNextCertInChain",{NextCertificate:V,IsLeafCertificate:T,IsRootCertificate:U},S)};J.IPS_HostBasedSetupService_AdminSetup=function(V,W,U,X,T,S){J.Exec("IPS_HostBasedSetupService","AdminSetup",{NetAdminPassEncryptionType:V,NetworkAdminPassword:W,McNonce:U,SigningAlgorithm:X,DigitalSignature:T},S)};J.IPS_HostBasedSetupService_UpgradeClientToAdmin=function(U,V,T,S){J.Exec("IPS_HostBasedSetupService","UpgradeClientToAdmin",{McNonce:U,SigningAlgorithm:V,DigitalSignature:T},S)};J.IPS_HostBasedSetupService_DisableClientControlMode=function(S,T){J.Exec("IPS_HostBasedSetupService","DisableClientControlMode",{_method_dummy:S},T)};J.IPS_KVMRedirectionSettingData_TerminateSession=function(S){J.Exec("IPS_KVMRedirectionSettingData","TerminateSession",{},S)};J.IPS_KVMRedirectionSettingData_DataChannelRead=function(S){J.Exec("IPS_KVMRedirectionSettingData","DataChannelRead",{},S)};J.IPS_KVMRedirectionSettingData_DataChannelWrite=function(T,S){J.Exec("IPS_KVMRedirectionSettingData","DataChannelWrite",{DataMessage:T},S)};J.IPS_OptInService_StartOptIn=function(S){J.Exec("IPS_OptInService","StartOptIn",{},S)};J.IPS_OptInService_CancelOptIn=function(S){J.Exec("IPS_OptInService","CancelOptIn",{},S)};J.IPS_OptInService_SendOptInCode=function(T,S){J.Exec("IPS_OptInService","SendOptInCode",{OptInCode:T},S)};J.IPS_OptInService_StartService=function(S){J.Exec("IPS_OptInService","StartService",{},S)};J.IPS_OptInService_StopService=function(S){J.Exec("IPS_OptInService","StopService",{},S)};J.IPS_OptInService_RequestStateChange=function(T,U,S){J.Exec("IPS_OptInService","RequestStateChange",{RequestedState:T,TimeoutPeriod:U},S)};J.IPS_ProvisioningRecordLog_RequestStateChange=function(T,U,S){J.Exec("IPS_ProvisioningRecordLog","RequestStateChange",{RequestedState:T,TimeoutPeriod:U},S)};J.IPS_ProvisioningRecordLog_ClearLog=function(S,T){J.Exec("IPS_ProvisioningRecordLog","ClearLog",{_method_dummy:S},T)};J.IPS_SecIOService_RequestStateChange=function(T,U,S){J.Exec("IPS_SecIOService","RequestStateChange",{RequestedState:T,TimeoutPeriod:U},S)};J.AmtStatusToStr=function(S){if(J.AmtStatusCodes[S]){return J.AmtStatusCodes[S]}else{return"UNKNOWN_ERROR"}};J.AmtStatusCodes={0:"SUCCESS",1:"INTERNAL_ERROR",2:"NOT_READY",3:"INVALID_PT_MODE",4:"INVALID_MESSAGE_LENGTH",5:"TABLE_FINGERPRINT_NOT_AVAILABLE",6:"INTEGRITY_CHECK_FAILED",7:"UNSUPPORTED_ISVS_VERSION",8:"APPLICATION_NOT_REGISTERED",9:"INVALID_REGISTRATION_DATA",10:"APPLICATION_DOES_NOT_EXIST",11:"NOT_ENOUGH_STORAGE",12:"INVALID_NAME",13:"BLOCK_DOES_NOT_EXIST",14:"INVALID_BYTE_OFFSET",15:"INVALID_BYTE_COUNT",16:"NOT_PERMITTED",17:"NOT_OWNER",18:"BLOCK_LOCKED_BY_OTHER",19:"BLOCK_NOT_LOCKED",20:"INVALID_GROUP_PERMISSIONS",21:"GROUP_DOES_NOT_EXIST",22:"INVALID_MEMBER_COUNT",23:"MAX_LIMIT_REACHED",24:"INVALID_AUTH_TYPE",25:"AUTHENTICATION_FAILED",26:"INVALID_DHCP_MODE",27:"INVALID_IP_ADDRESS",28:"INVALID_DOMAIN_NAME",29:"UNSUPPORTED_VERSION",30:"REQUEST_UNEXPECTED",31:"INVALID_TABLE_TYPE",32:"INVALID_PROVISIONING_STATE",33:"UNSUPPORTED_OBJECT",34:"INVALID_TIME",35:"INVALID_INDEX",36:"INVALID_PARAMETER",37:"INVALID_NETMASK",38:"FLASH_WRITE_LIMIT_EXCEEDED",39:"INVALID_IMAGE_LENGTH",40:"INVALID_IMAGE_SIGNATURE",41:"PROPOSE_ANOTHER_VERSION",42:"INVALID_PID_FORMAT",43:"INVALID_PPS_FORMAT",44:"BIST_COMMAND_BLOCKED",45:"CONNECTION_FAILED",46:"CONNECTION_TOO_MANY",47:"RNG_GENERATION_IN_PROGRESS",48:"RNG_NOT_READY",49:"CERTIFICATE_NOT_READY",1024:"DISABLED_BY_POLICY",2048:"NETWORK_IF_ERROR_BASE",2049:"UNSUPPORTED_OEM_NUMBER",2050:"UNSUPPORTED_BOOT_OPTION",2051:"INVALID_COMMAND",2052:"INVALID_SPECIAL_COMMAND",2053:"INVALID_HANDLE",2054:"INVALID_PASSWORD",2055:"INVALID_REALM",2056:"STORAGE_ACL_ENTRY_IN_USE",2057:"DATA_MISSING",2058:"DUPLICATE",2059:"EVENTLOG_FROZEN",2060:"PKI_MISSING_KEYS",2061:"PKI_GENERATING_KEYS",2062:"INVALID_KEY",2063:"INVALID_CERT",2064:"CERT_KEY_NOT_MATCH",2065:"MAX_KERB_DOMAIN_REACHED",2066:"UNSUPPORTED",2067:"INVALID_PRIORITY",2068:"NOT_FOUND",2069:"INVALID_CREDENTIALS",2070:"INVALID_PASSPHRASE",2072:"NO_ASSOCIATION",2075:"AUDIT_FAIL",2076:"BLOCKING_COMPONENT",2081:"USER_CONSENT_REQUIRED",4096:"APP_INTERNAL_ERROR",4097:"NOT_INITIALIZED",4098:"LIB_VERSION_UNSUPPORTED",4099:"INVALID_PARAM",4100:"RESOURCES",4101:"HARDWARE_ACCESS_ERROR",4102:"REQUESTOR_NOT_REGISTERED",4103:"NETWORK_ERROR",4104:"PARAM_BUFFER_TOO_SHORT",4105:"COM_NOT_INITIALIZED_IN_THREAD",4106:"URL_REQUIRED"};J.GetMessageLog=function(S,T){J.AMT_MessageLog_PositionToFirstRecord(k,[S,T,[]])};function k(U,S,T,V,W){if(V!=200||T.Body.ReturnValue!="0"){W[0](J,null,W[2],V);return}J.AMT_MessageLog_GetRecords(T.Body.IterationIdentifier,390,l,W)}function l(Z,W,Y,aa,ac){if(aa!=200||Y.Body.ReturnValue!="0"){ac[0](J,null,ac[2],aa);return}var U,V,ae,T,S=ac[2],ab=new Date(),ad,X=Y.Body.RecordArray;if(typeof X==="string"){Y.Body.RecordArray=[Y.Body.RecordArray]}for(U in X){T=Buffer.from(X[U],"base64");if(T!=null){ad=M(T,0);if((ad>0)&&(ad<4294967295)){ae={DeviceAddress:T[4],EventSensorType:T[5],EventType:T[6],EventOffset:T[7],EventSourceType:T[8],EventSeverity:T[9],SensorNumber:T[10],Entity:T[11],EntityInstance:T[12],EventData:[],Time:new Date((ad+(ab.getTimezoneOffset()*60))*1000)};for(V=13;V<21;V++){ae.EventData.push(T[V])}ae.EntityStr=o[ae.Entity];ae.Desc=j(ae.EventSensorType,ae.EventOffset,ae.EventData,ae.Entity);if(!ae.EntityStr){ae.EntityStr="Unknown"}S.push(ae)}}}if(Y.Body.NoMoreRecords!=true){J.AMT_MessageLog_GetRecords(Y.Body.IterationIdentifier,390,l,[ac[0],S,ac[2]])}else{ac[0](J,S,ac[2])}}var f="Platform firmware (e.g. BIOS)|SMI handler|ISV system management software|Alert ASIC|IPMI|BIOS vendor|System board set vendor|System integrator|Third party add-in|OSV|NIC|System management card".split("|");var p="Unspecified.|No system memory is physically installed in the system.|No usable system memory, all installed memory has experienced an unrecoverable failure.|Unrecoverable hard-disk/ATAPI/IDE device failure.|Unrecoverable system-board failure.|Unrecoverable diskette subsystem failure.|Unrecoverable hard-disk controller failure.|Unrecoverable PS/2 or USB keyboard failure.|Removable boot media not found.|Unrecoverable video controller failure.|No video device detected.|Firmware (BIOS) ROM corruption detected.|CPU voltage mismatch (processors that share same supply have mismatched voltage requirements)|CPU speed matching failure".split("|");var q="Unspecified.|Memory initialization.|Starting hard-disk initialization and test|Secondary processor(s) initialization|User authentication|User-initiated system setup|USB resource configuration|PCI resource configuration|Option ROM initialization|Video initialization|Cache initialization|SM Bus initialization|Keyboard controller initialization|Embedded controller/management controller initialization|Docking station attachment|Enabling docking station|Docking station ejection|Disabling docking station|Calling operating system wake-up vector|Starting operating system boot process|Baseboard or motherboard initialization|reserved|Floppy initialization|Keyboard test|Pointing device test|Primary processor initialization".split("|");var o="Unspecified|Other|Unknown|Processor|Disk|Peripheral|System management module|System board|Memory module|Processor module|Power supply|Add in card|Front panel board|Back panel board|Power system board|Drive backplane|System internal expansion board|Other system board|Processor board|Power unit|Power module|Power management board|Chassis back panel board|System chassis|Sub chassis|Other chassis board|Disk drive bay|Peripheral bay|Device bay|Fan cooling|Cooling unit|Cable interconnect|Memory device|System management software|BIOS|Intel(r) ME|System bus|Group|Intel(r) ME|External environment|Battery|Processing blade|Connectivity switch|Processor/memory module|I/O module|Processor I/O module|Management controller firmware|IPMI channel|PCI bus|PCI express bus|SCSI bus|SATA/SAS bus|Processor front side bus".split("|");J.RealmNames="||Redirection|PT Administration|Hardware Asset|Remote Control|Storage|Event Manager|Storage Admin|Agent Presence Local|Agent Presence Remote|Circuit Breaker|Network Time|General Information|Firmware Update|EIT|LocalUN|Endpoint Access Control|Endpoint Access Control Admin|Event Log Reader|Audit Log|ACL Realm|||Local System".split("|");J.WatchdogCurrentStates={1:"Not Started",2:"Stopped",4:"Running",8:"Expired",16:"Suspended"};function j(V,U,T,S){if(V==15){if(T[0]==235){return"Invalid Data"}if(U==0){return p[T[1]]}return q[T[1]]}if(V==18&&T[0]==170){return"Agent watchdog "+char2hex(T[4])+char2hex(T[3])+char2hex(T[2])+char2hex(T[1])+"-"+char2hex(T[6])+char2hex(T[5])+"-... changed to "+J.WatchdogCurrentStates[T[7]]}if(V==6){return"Authentication failed "+(T[1]+(T[2]<<8))+" times. The system may be under attack."}if(V==30){return"No bootable media"}if(V==32){return"Operating system lockup or power interrupt"}if(V==35){return"System boot failure"}if(V==37){return"System firmware started (at least one CPU is properly executing)."}return"Unknown Sensor Type #"+V}var a={16:"Security Admin",17:"RCO",18:"Redirection Manager",19:"Firmware Update Manager",20:"Security Audit Log",21:"Network Time",22:"Network Administration",23:"Storage Administration",24:"Event Manager",25:"Circuit Breaker Manager",26:"Agent Presence Manager",27:"Wireless Configuration",28:"EAC",29:"KVM",30:"User Opt-In Events",32:"Screen Blanking",33:"Watchdog Events",1600:"Provisioning Started",1601:"Provisioning Completed",1602:"ACL Entry Added",1603:"ACL Entry Modified",1604:"ACL Entry Removed",1605:"ACL Access with Invalid Credentials",1606:"ACL Entry State",1607:"TLS State Changed",1608:"TLS Server Certificate Set",1609:"TLS Server Certificate Remove",1610:"TLS Trusted Root Certificate Added",1611:"TLS Trusted Root Certificate Removed",1612:"TLS Preshared Key Set",1613:"Kerberos Settings Modified",1614:"Kerberos Master Key Modified",1615:"Flash Wear out Counters Reset",1616:"Power Package Modified",1617:"Set Realm Authentication Mode",1618:"Upgrade Client to Admin Control Mode",1619:"Unprovisioning Started",1700:"Performed Power Up",1701:"Performed Power Down",1702:"Performed Power Cycle",1703:"Performed Reset",1704:"Set Boot Options",1800:"IDER Session Opened",1801:"IDER Session Closed",1802:"IDER Enabled",1803:"IDER Disabled",1804:"SoL Session Opened",1805:"SoL Session Closed",1806:"SoL Enabled",1807:"SoL Disabled",1808:"KVM Session Started",1809:"KVM Session Ended",1810:"KVM Enabled",1811:"KVM Disabled",1812:"VNC Password Failed 3 Times",1900:"Firmware Updated",1901:"Firmware Update Failed",2000:"Security Audit Log Cleared",2001:"Security Audit Policy Modified",2002:"Security Audit Log Disabled",2003:"Security Audit Log Enabled",2004:"Security Audit Log Exported",2005:"Security Audit Log Recovered",2100:"Intel(R) ME Time Set",2200:"TCPIP Parameters Set",2201:"Host Name Set",2202:"Domain Name Set",2203:"VLAN Parameters Set",2204:"Link Policy Set",2205:"IPv6 Parameters Set",2300:"Global Storage Attributes Set",2301:"Storage EACL Modified",2302:"Storage FPACL Modified",2303:"Storage Write Operation",2400:"Alert Subscribed",2401:"Alert Unsubscribed",2402:"Event Log Cleared",2403:"Event Log Frozen",2500:"CB Filter Added",2501:"CB Filter Removed",2502:"CB Policy Added",2503:"CB Policy Removed",2504:"CB Default Policy Set",2505:"CB Heuristics Option Set",2506:"CB Heuristics State Cleared",2600:"Agent Watchdog Added",2601:"Agent Watchdog Removed",2602:"Agent Watchdog Action Set",2700:"Wireless Profile Added",2701:"Wireless Profile Removed",2702:"Wireless Profile Updated",2800:"EAC Posture Signer SET",2801:"EAC Enabled",2802:"EAC Disabled",2803:"EAC Posture State",2804:"EAC Set Options",2900:"KVM Opt-in Enabled",2901:"KVM Opt-in Disabled",2902:"KVM Password Changed",2903:"KVM Consent Succeeded",2904:"KVM Consent Failed",3000:"Opt-In Policy Change",3001:"Send Consent Code Event",3002:"Start Opt-In Blocked Event"};J.GetAuditLogExtendedDataStr=function(T,S){if((T==1602||T==1604)&&S[0]==0){return w(S).splice(2,2+S[1]).toString()}if(T==1603){if(S[1]==0){return w(S).splice(3).toString()}return null}if(T==1605){return["Invalid ME access","Invalid MEBx access"][S[0]]}if(T==1606){var U=["Disabled","Enabled"][S[0]];if(S[1]==0){U+=", "+S[3]}return U}if(T==1607){return"Remote "+["NoAuth","ServerAuth","MutualAuth"][S[0]]+", Local "+["NoAuth","ServerAuth","MutualAuth"][S[1]]}if(T==1617){return J.RealmNames[L(S,0)]+", "+["NoAuth","Auth","Disabled"][S[4]]}if(T==1619){return["BIOS","MEBx","Local MEI","Local WSMAN","Remote WSAMN"][S[0]]}if(T==1900){return"From "+N(S,0)+"."+N(S,2)+"."+N(S,4)+"."+N(S,6)+" to "+N(S,8)+"."+N(S,10)+"."+N(S,12)+"."+N(S,14)}if(T==2100){var V=new Date();V.setTime(L(S,0)*1000+(new Date().getTimezoneOffset()*60000));return V.toLocaleString()}if(T==3000){return"From "+["None","KVM","All"][S[0]]+" to "+["None","KVM","All"][S[1]]}if(T==3001){return["Success","Failed 3 times"][S[0]]}return null};J.GetAuditLog=function(S){J.AMT_AuditLog_ReadRecords(1,i,[S,[]])};function I(S){if(!S||S==null||typeof S=="object"){return S}return[S]}function N(T,S){return(T[S]<<8)+T[S+1]}function L(T,S){return(T[S]*16777216)+(T[S+1]<<16)+(T[S+2]<<8)+T[S+3]}function M(T,S){return(T[S+3]*16777216)+(T[S+2]<<16)+(T[S+1]<<8)+T[S]}function v(S){return Buffer.from(S).toString("base64")}function u(T){var U=null;try{U=Buffer.from(T,"base64").toString()}catch(S){console.log(S)}return U}function w(S){var U=[];for(var T in S){U.push(S[T])}return U}function i(ac,X,ab,ad,af){if(ad!=200){af[0](J,[],ad);return}var Z,W,S,T,ai,aa=af[1],ae=new Date(),ag;if(ab.Body.RecordsReturned>0){ab.Body.EventRecords=I(ab.Body.EventRecords);for(W in ab.Body.EventRecords){S=null;try{T=u(ab.Body.EventRecords[W]);S=Buffer.from(T)}catch(U){console.log(U+" "+ab.Body.EventRecords[W])}ai={AuditAppID:N(S,0),EventID:N(S,2),InitiatorType:S[4]};ai.AuditApp=a[ai.AuditAppID];ai.Event=a[(ai.AuditAppID*100)+ai.EventID];if(!ai.Event){ai.Event="#"+ai.EventID}if(ai.InitiatorType==0){var ah=S[5];ai.Initiator=S.slice(6,6+ah).toString();Z=6+ah}if(ai.InitiatorType==1){ai.KerberosUserInDomain=L(S,5);var ah=S[9];ai.Initiator=G(S.slice(10,10+ah));Z=10+ah}if(ai.InitiatorType==2){ai.Initiator="Local";Z=5}if(ai.InitiatorType==3){ai.Initiator="KVM Default Port";Z=5}ag=L(S,Z);ai.Time=new Date((ag+(ae.getTimezoneOffset()*60))*1000);Z+=4;ai.MCLocationType=S[Z++];var Y=S[Z++];ai.NetAddress=S.slice(Z,Z+Y).toString();Z+=Y;var V=S[Z++];ai.Ex=S.slice(Z,Z+V);ai.ExStr=J.GetAuditLogExtendedDataStr((ai.AuditAppID*100)+ai.EventID,ai.Ex);aa.push(ai)}}if(ab.Body.TotalRecordCount>aa.length){J.AMT_AuditLog_ReadRecords(aa.length+1,i,[af[0],aa])}else{af[0](J,aa,ad)}}function C(U){if(U===undefined||U===null){return null}var V="";for(var T in U){var S=U[T];if(!S){continue}if(S.__parameterType==="reference"){V+=O(T,S)}else{V+=H(T,S)}}return V}function H(V,U){if(U===undefined||U===null){return null}var T=!!U.__namespace;var Z=T?"";for(var X in U){if(!U.hasOwnProperty(X)||X.indexOf("__")===0){continue}if(typeof U[X]==="function"||Array.isArray(U[X])){continue}if(typeof U[X]==="object"){console.error("only convert one level down...")}else{Y+=Z+X+">"+U[X].toString()+S+X+">"}}Y+="";return Y}function O(T,S){if(S===undefined||S===null){return null}var U="/wsman"+S.__resourceUri+"";for(var V in S){if(!S.hasOwnProperty(V)||V.indexOf("__")===0){continue}if(typeof S[V]==="function"||typeof S[V]==="object"||Array.isArray(S[V])){continue}U+=''+S[V].toString()+""}U+="";return U}function G(U){var T="S-"+U.charCodeAt(0)+"-"+U.charCodeAt(7);for(var S=2;S<(U.length/4);S++){T+="-"+M(U,S*4)}return T}function F(V){if(!V||V==null){return null}var U=V.split("-");if(U.length<4||(U[0]!="s"&&U[0]!="S")){return null}for(var S=1;S0){var h=f.XWhitePixel(g[0].display,g[0].screenId).Val;this._masterPromise.CLIPID=f.XInternAtom(g[0].display,c.CreateVariable("CLIPBOARD"),0);this._masterPromise.FMTID=f.XInternAtom(g[0].display,c.CreateVariable("UTF8_STRING"),0);this._masterPromise.PROPID=f.XInternAtom(g[0].display,c.CreateVariable("XSEL_DATA"),0);this._masterPromise.INCRID=f.XInternAtom(g[0].display,c.CreateVariable("INCR"),0);this._masterPromise.ROOTWIN=f.XRootWindow(g[0].display,g[0].screenId);this._masterPromise.FAKEWIN=f.XCreateSimpleWindow(g[0].display,this._masterPromise.ROOTWIN,0,0,g[0].right,5,0,h,h);f.XSync(g[0].display,0);f.XConvertSelection(g[0].display,this._masterPromise.CLIPID,this._masterPromise.FMTID,this._masterPromise.PROPID,this._masterPromise.FAKEWIN,0);f.XSync(g[0].display,0);this._masterPromise.DescriptorEvent=require("DescriptorEvents").addDescriptor(f.XConnectionNumber(g[0].display).Val,{readset:true});this._masterPromise.DescriptorEvent._masterPromise=this._masterPromise;this._masterPromise.DescriptorEvent._display=g[0].display;this._masterPromise.DescriptorEvent.on("readset",function(j){var o=c.CreateVariable(1024);while(f.XPending(this._display).Val){f.XNextEventSync(this._display,o);if(o.Deref(0,4).toBuffer().readUInt32LE()==e){var k=c.CreatePointer();var i=c.CreatePointer();var m=c.CreatePointer();var n=c.CreatePointer();var l=c.CreatePointer();f.XGetWindowProperty(this._display,this._masterPromise.FAKEWIN,this._masterPromise.PROPID,0,65535,0,a,k,i,m,n,l);this._masterPromise._res(l.Deref().String);f.XFree(l.Deref());f.XDestroyWindow(this._display,this._masterPromise.FAKEWIN);this.removeDescriptor(j);break}}})}})}return(d)}function lin_copytext(){}function win_readtext(){var g="";var a=1;var b=require("_GenericMarshal");var i=b.CreateNativeProxy("user32.dll");var e=b.CreateNativeProxy("kernel32.dll");e.CreateMethod("GlobalAlloc");e.CreateMethod("GlobalLock");e.CreateMethod("GlobalUnlock");i.CreateMethod("OpenClipboard");i.CreateMethod("CloseClipboard");i.CreateMethod("GetClipboardData");i.OpenClipboard(0);var c=i.GetClipboardData(a);if(c.Val!=0){var d=e.GlobalLock(c);g=d.String;e.GlobalUnlock(c)}i.CloseClipboard();var f=new promise(function(j,h){this._res=j;this._rej=h});f._res(g);return(f)}function win_copytext(i){var c=2;var a=1;var b=require("_GenericMarshal");var j=b.CreateNativeProxy("user32.dll");var f=b.CreateNativeProxy("kernel32.dll");f.CreateMethod("GlobalAlloc");f.CreateMethod("GlobalLock");f.CreateMethod("GlobalUnlock");j.CreateMethod("OpenClipboard");j.CreateMethod("EmptyClipboard");j.CreateMethod("CloseClipboard");j.CreateMethod("SetClipboardData");var d=f.GlobalAlloc(c,i.length+2);d.autoFree(false);var e=f.GlobalLock(d);e.autoFree(false);var g=Buffer.alloc(i.length+1);Buffer.from(i).copy(g);g.copy(e.Deref(0,i.length+1).toBuffer());f.GlobalUnlock(d);j.OpenClipboard(0);j.EmptyClipboard();j.SetClipboardData(a,d);j.CloseClipboard()}switch(process.platform){case"win32":module.exports=win_copytext;module.exports.read=win_readtext;break;case"linux":module.exports=lin_copytext;module.exports.read=lin_readtext;break;case"darwin":break}module.exports.nativeAddModule=nativeAddModule; \ No newline at end of file diff --git a/agents/modules_meshcore_min/linux-dbus.min.js b/agents/modules_meshcore_min/linux-dbus.min.js deleted file mode 100644 index fe9c0082..00000000 --- a/agents/modules_meshcore_min/linux-dbus.min.js +++ /dev/null @@ -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");var k=c[1].trim();var e=c[0].trim().split(" ");var d=e[0];var h=e[1].substring(1,e[1].length-1).split(",");if(d.startsWith(f+".so.")){l.push({lib:d,path:k,info:h})}}}return(l)}function monitorinfo(){this._ObjectID="monitor-info";this._gm=require("_GenericMarshal");if(process.platform=="win32"){this._user32=this._gm.CreateNativeProxy("user32.dll");this._user32.CreateMethod("EnumDisplayMonitors");this._kernel32=this._gm.CreateNativeProxy("kernel32.dll");this._kernel32.CreateMethod("GetLastError");this.getInfo=function h(){var e=this;return(new promise(function(v,u){this._monitorinfo={resolver:v,rejector:u,self:e,callback:e._gm.GetGenericGlobalCallback(4)};this._monitorinfo.callback.info=this._monitorinfo;this._monitorinfo.dwData=e._gm.ObjectToPtr(this._monitorinfo);this._monitorinfo.callback.results=[];this._monitorinfo.callback.on("GlobalCallback",function i(x,w,y,A){if(this.ObjectToPtr_Verify(this.info,A)){var z=y.Deref(0,16).toBuffer();this.results.push({left:z.readInt32LE(0),top:z.readInt32LE(4),right:z.readInt32LE(8),bottom:z.readInt32LE(12)});var y=this.info.self._gm.CreateInteger();y.Val=1;return(y)}});if(e._user32.EnumDisplayMonitors(0,0,this._monitorinfo.callback,this._monitorinfo.dwData).Val==0){u("LastError="+e._kernel32.GetLastError().Val);return}else{v(this._monitorinfo.callback.results)}}))}}else{if(process.platform=="linux"){var a=false;try{if(require("user-sessions").isRoot()){a=true}}catch(b){}if(a){var r=getLibInfo("libX11");var t=getLibInfo("libXtst");var s=getLibInfo("libXext");var n;for(n in r){try{this._gm.CreateNativeProxy(r[n].path);Object.defineProperty(this,"Location_X11LIB",{value:r[n].path});break}catch(c){}}for(n in t){try{this._gm.CreateNativeProxy(t[n].path);Object.defineProperty(this,"Location_X11TST",{value:t[n].path});break}catch(c){}}for(n in s){try{this._gm.CreateNativeProxy(s[n].path);Object.defineProperty(this,"Location_X11EXT",{value:s[n].path});break}catch(c){}}}else{var g=require("fs");var d=g.readdirSync("/usr/lib");var f;for(var l in d){try{if(d[l].split("libX11.so.").length>1&&d[l].split(".").length==3){Object.defineProperty(this,"Location_X11LIB",{value:"/usr/lib/"+d[l]})}if(d[l].split("libXtst.so.").length>1&&d[l].split(".").length==3){Object.defineProperty(this,"Location_X11TST",{value:"/usr/lib/"+d[l]})}if(d[l].split("libXext.so.").length>1&&d[l].split(".").length==3){Object.defineProperty(this,"Location_X11EXT",{value:"/usr/lib/"+d[l]})}if(d[l].split("-linux-").length>1){f=g.readdirSync("/usr/lib/"+d[l]);for(j in f){if(f[j].split("libX11.so.").length>1&&f[j].split(".").length==3){Object.defineProperty(this,"Location_X11LIB",{value:"/usr/lib/"+d[l]+"/"+f[j]})}if(f[j].split("libXtst.so.").length>1&&f[j].split(".").length==3){Object.defineProperty(this,"Location_X11TST",{value:"/usr/lib/"+d[l]+"/"+f[j]})}if(f[j].split("libXext.so.").length>1&&f[j].split(".").length==3){Object.defineProperty(this,"Location_X11EXT",{value:"/usr/lib/"+d[l]+"/"+f[j]})}}}}catch(c){}}}Object.defineProperty(this,"kvm_x11_support",{value:(this.Location_X11LIB&&this.Location_X11TST&&this.Location_X11EXT)?true:false});if(this.Location_X11LIB){this._X11=this._gm.CreateNativeProxy(this.Location_X11LIB);this._X11.CreateMethod("XChangeProperty");this._X11.CreateMethod("XCloseDisplay");this._X11.CreateMethod("XConnectionNumber");this._X11.CreateMethod("XConvertSelection");this._X11.CreateMethod("XCreateGC");this._X11.CreateMethod("XCreateWindow");this._X11.CreateMethod("XCreateSimpleWindow");this._X11.CreateMethod("XDefaultColormap");this._X11.CreateMethod("XDefaultScreen");this._X11.CreateMethod("XDestroyWindow");this._X11.CreateMethod("XDrawLine");this._X11.CreateMethod("XDisplayHeight");this._X11.CreateMethod("XDisplayWidth");this._X11.CreateMethod("XFetchName");this._X11.CreateMethod("XFlush");this._X11.CreateMethod("XFree");this._X11.CreateMethod("XCreateGC");this._X11.CreateMethod("XGetWindowProperty");this._X11.CreateMethod("XInternAtom");this._X11.CreateMethod("XMapWindow");this._X11.CreateMethod({method:"XNextEvent",threadDispatch:true});this._X11.CreateMethod({method:"XNextEvent",newName:"XNextEventSync"});this._X11.CreateMethod("XOpenDisplay");this._X11.CreateMethod("XPending");this._X11.CreateMethod("XRootWindow");this._X11.CreateMethod("XSelectInput");this._X11.CreateMethod("XScreenCount");this._X11.CreateMethod("XScreenOfDisplay");this._X11.CreateMethod("XSelectInput");this._X11.CreateMethod("XSendEvent");this._X11.CreateMethod("XSetForeground");this._X11.CreateMethod("XSetFunction");this._X11.CreateMethod("XSetLineAttributes");this._X11.CreateMethod("XSetNormalHints");this._X11.CreateMethod("XSetSubwindowMode");this._X11.CreateMethod("XSync");this._X11.CreateMethod("XBlackPixel");this._X11.CreateMethod("XWhitePixel")}this.isUnity=function m(){return(process.env.XDG_CURRENT_DESKTOP=="Unity")};this.unDecorateWindow=function q(e,v){var i=this._gm.CreateVariable(40);var u=this._X11.XInternAtom(e,this._gm.CreateVariable("_MOTIF_WM_HINTS"),0);i.Deref(0,4).toBuffer().writeUInt32LE(1<<1);this._X11.XChangeProperty(e,v,u,u,32,0,i,5)};this.setWindowSizeHints=function p(e,w,z,A,v,i){var u=this._gm.CreateVariable(80);u.Deref(0,4).toBuffer().writeUInt32LE(PPosition|PSize);u.Deref(8,4).toBuffer().writeUInt32LE(z);u.Deref(12,4).toBuffer().writeUInt32LE(A);u.Deref(16,4).toBuffer().writeUInt32LE(v);u.Deref(20,4).toBuffer().writeUInt32LE(i);this._X11.XSetNormalHints(e,w,u)};this.setAlwaysOnTop=function o(e,i,u){var v=this._X11.XInternAtom(e,this._gm.CreateVariable("_NET_WM_STATE"),1);var w=this._X11.XInternAtom(e,this._gm.CreateVariable("_NET_WM_STATE_ABOVE"),1);var x=this._gm.CreateVariable(96);x.Deref(0,4).toBuffer().writeUInt32LE(33);x.Deref(48,4).toBuffer().writeUInt32LE(32);v.pointerBuffer().copy(x.Deref(40,8).toBuffer());x.Deref(56,8).toBuffer().writeUInt32LE(_NET_WM_STATE_ADD);w.pointerBuffer().copy(x.Deref(64,8).toBuffer());u.pointerBuffer().copy(x.Deref(32,8).toBuffer());this._X11.XSendEvent(e,i,0,SubstructureRedirectMask|SubstructureNotifyMask,x)};this.hideWindowIcon=function k(e,i,u){var v=this._X11.XInternAtom(e,this._gm.CreateVariable("_NET_WM_STATE"),1);var w=this._X11.XInternAtom(e,this._gm.CreateVariable("_NET_WM_STATE_SKIP_TASKBAR"),1);var x=this._gm.CreateVariable(96);x.Deref(0,4).toBuffer().writeUInt32LE(33);x.Deref(48,4).toBuffer().writeUInt32LE(32);v.pointerBuffer().copy(x.Deref(40,8).toBuffer());x.Deref(56,8).toBuffer().writeUInt32LE(_NET_WM_STATE_ADD);w.pointerBuffer().copy(x.Deref(64,8).toBuffer());u.pointerBuffer().copy(x.Deref(32,8).toBuffer());this._X11.XSendEvent(e,i,0,SubstructureRedirectMask|SubstructureNotifyMask,x)};this.getInfo=function h(){var e=this;return(new promise(function(x,w){var u=e._X11.XOpenDisplay(e._gm.CreateVariable(":0"));var A=e._X11.XScreenCount(u).Val;var y=[];for(var v=0;v0&&t[u]){s.push(t[u])}}if(h>0){if(s[o.PID]){r[s[o.PID]]={pid:o.PID,user:s[o.USER],cmd:s[o.COMMAND]}}}}if(this.callback){this.args.unshift(r);this.callback.apply(this.parent,this.args)}});l.stdout.on("data",function(h){this.parent.ps+=h.toString()});break;case"darwin":var m=require("promise");var l=new m(function(i,h){this._res=i;this._rej=h});l.pm=this;l.callback=d;l.args=[];for(var f=1;f0){r[p[o].substring(0,q).trim()]={pid:p[o].substring(0,q).trim(),cmd:p[o].substring(h)}}}this.promise._res(r)});l.then(function(h){this.args.unshift(h);this.callback.apply(this.pm,this.args)});break}};this.getProcessInfo=function c(g){switch(process.platform){default:throw ("getProcessInfo() not supported for "+process.platform);break;case"linux":var h=require("fs").readFileSync("/proc/"+g+"/status");var e={};var f=h.toString().split("\n");for(var d in f){var j=f[d].split(":");if(j.length>1){j[1]=j[1].trim()}e[j[0]]=j[1]}return(e);break}}}module.exports=new processManager(); \ No newline at end of file diff --git a/agents/modules_meshcore_min/service-manager.min.js b/agents/modules_meshcore_min/service-manager.min.js deleted file mode 100644 index 15a2197f..00000000 --- a/agents/modules_meshcore_min/service-manager.min.js +++ /dev/null @@ -1 +0,0 @@ -function parseServiceStatus(d){var b={};var c=d.Deref(0,4).IntVal;b.isFileSystemDriver=((c&2)==2);b.isKernelDriver=((c&1)==1);b.isSharedProcess=((c&32)==32);b.isOwnProcess=((c&16)==16);b.isInteractive=((c&256)==256);switch(d.Deref((1*4),4).toBuffer().readUInt32LE()){case 5:b.state="CONTINUE_PENDING";break;case 6:b.state="PAUSE_PENDING";break;case 7:b.state="PAUSED";break;case 4:b.state="RUNNING";break;case 2:b.state="START_PENDING";break;case 3:b.state="STOP_PENDING";break;case 1:b.state="STOPPED";break}var a=d.Deref((2*4),4).toBuffer().readUInt32LE();b.controlsAccepted=[];if((a&16)==16){b.controlsAccepted.push("SERVICE_CONTROL_NETBINDADD");b.controlsAccepted.push("SERVICE_CONTROL_NETBINDREMOVE");b.controlsAccepted.push("SERVICE_CONTROL_NETBINDENABLE");b.controlsAccepted.push("SERVICE_CONTROL_NETBINDDISABLE")}if((a&8)==8){b.controlsAccepted.push("SERVICE_CONTROL_PARAMCHANGE")}if((a&2)==2){b.controlsAccepted.push("SERVICE_CONTROL_PAUSE");b.controlsAccepted.push("SERVICE_CONTROL_CONTINUE")}if((a&256)==256){b.controlsAccepted.push("SERVICE_CONTROL_PRESHUTDOWN")}if((a&4)==4){b.controlsAccepted.push("SERVICE_CONTROL_SHUTDOWN")}if((a&1)==1){b.controlsAccepted.push("SERVICE_CONTROL_STOP")}if((a&32)==32){b.controlsAccepted.push("SERVICE_CONTROL_HARDWAREPROFILECHANGE")}if((a&64)==64){b.controlsAccepted.push("SERVICE_CONTROL_POWEREVENT")}if((a&128)==128){b.controlsAccepted.push("SERVICE_CONTROL_SESSIONCHANGE")}b.pid=d.Deref((7*4),4).toBuffer().readUInt32LE();return(b)}function serviceManager(){this._ObjectID="service-manager";if(process.platform=="win32"){this.GM=require("_GenericMarshal");this.proxy=this.GM.CreateNativeProxy("Advapi32.dll");this.proxy.CreateMethod("OpenSCManagerA");this.proxy.CreateMethod("EnumServicesStatusExA");this.proxy.CreateMethod("OpenServiceA");this.proxy.CreateMethod("QueryServiceStatusEx");this.proxy.CreateMethod("ControlService");this.proxy.CreateMethod("StartServiceA");this.proxy.CreateMethod("CloseServiceHandle");this.proxy.CreateMethod("CreateServiceA");this.proxy.CreateMethod("ChangeServiceConfig2A");this.proxy.CreateMethod("DeleteService");this.proxy.CreateMethod("AllocateAndInitializeSid");this.proxy.CreateMethod("CheckTokenMembership");this.proxy.CreateMethod("FreeSid");this.proxy2=this.GM.CreateNativeProxy("Kernel32.dll");this.proxy2.CreateMethod("GetLastError");this.isAdmin=function e(){var j=this.GM.CreateVariable(6);j.toBuffer().writeInt8(5,5);var h=this.GM.CreatePointer();var g=false;if(this.proxy.AllocateAndInitializeSid(j,2,32,544,0,0,0,0,0,0,h).Val!=0){var i=this.GM.CreateInteger();if(this.proxy.CheckTokenMembership(0,h.Deref(),i).Val!=0){if(i.toBuffer().readUInt32LE()!=0){g=true}}this.proxy.FreeSid(h.Deref())}return g};this.getProgramFolder=function a(){if(require("os").arch()=="x64"){if(this.GM.PointerSize==4){return process.env["ProgramFiles(x86)"]}return process.env.ProgramFiles}return process.env.ProgramFiles};this.getServiceFolder=function b(){return this.getProgramFolder()+"\\mesh"};this.enumerateService=function(){var o=this.GM.CreatePointer();var k=this.GM.CreatePointer();var l=this.proxy.OpenSCManagerA(0,0,1|4);var h=this.GM.CreatePointer();var t=this.GM.CreatePointer();var q=this.GM.CreatePointer();var u=this.proxy.EnumServicesStatusExA(l,0,48,3,0,0,h,t,q,0);if(h.IntVal<=0){throw ("error enumerating services")}var v=h.IntVal;var s=this.GM.CreateVariable(v);this.proxy.EnumServicesStatusExA(l,0,48,3,s,v,h,t,q,0);console.log("servicesReturned",t.IntVal);var p=k._size;var g=36+(2*p);g+=((p-(g%p))%p);var r=[];for(var m=0;mStandardOutPath\n"+r.stdout+""):"");var i=(r.startType=="AUTO_START"?"":"");var s=" ProgramArguments\n";s+=" \n";s+=(" /usr/local/mesh_services/"+r.name+"/"+r.name+"\n");if(r.parameters){for(var p in r.parameters){s+=(" "+r.parameters[p]+"\n")}}s+=" \n";var t='\n';t+='\n';t+='\n';t+=" \n";t+=" Label\n";t+=(" "+r.name+"\n");t+=(s+"\n");t+=" WorkingDirectory\n";t+=(" /usr/local/mesh_services/"+r.name+"\n");t+=(y+"\n");t+=" RunAtLoad\n";t+=(i+"\n");t+=" \n";t+="";if(!require("fs").existsSync("/usr/local/mesh_services")){require("fs").mkdirSync("/usr/local/mesh_services")}if(!require("fs").existsSync("/Library/LaunchDaemons/"+r.name+".plist")){if(!require("fs").existsSync("/usr/local/mesh_services/"+r.name)){require("fs").mkdirSync("/usr/local/mesh_services/"+r.name)}if(r.binary){require("fs").writeFileSync("/usr/local/mesh_services/"+r.name+"/"+r.name,r.binary)}else{require("fs").copyFileSync(r.servicePath,"/usr/local/mesh_services/"+r.name+"/"+r.name)}require("fs").writeFileSync("/Library/LaunchDaemons/"+r.name+".plist",t);var q=require("fs").statSync("/usr/local/mesh_services/"+r.name+"/"+r.name).mode;q|=(require("fs").CHMOD_MODES.S_IXUSR|require("fs").CHMOD_MODES.S_IXGRP);require("fs").chmodSync("/usr/local/mesh_services/"+r.name+"/"+r.name,q)}else{throw ("Service: "+r.name+" already exists")}}};this.uninstallService=function f(i){if(!this.isAdmin()){throw ("Uninstalling a service, requires admin")}if(typeof(i)=="object"){i=i.name}if(process.platform=="win32"){var j=this.getService(i);if(j.status.state==undefined||j.status.state=="STOPPED"){if(this.proxy.DeleteService(j._service)==0){throw ("Uninstall Service for: "+i+", failed with error: "+this.proxy2.GetLastError())}else{try{require("fs").unlinkSync(this.getServiceFolder()+"\\"+i+".exe")}catch(h){}}}else{throw ("Cannot uninstall service: "+i+", because it is: "+j.status.state)}}else{if(process.platform=="linux"){switch(this.getServiceType()){case"init":this._update=require("child_process").execFile("/bin/sh",["sh"],{type:require("child_process").SpawnTypes.TERM});this._update.stdout.on("data",function(k){});this._update.stdin.write("service "+i+" stop\n");this._update.stdin.write("update-rc.d -f "+i+" remove\n");this._update.stdin.write("exit\n");this._update.waitExit();try{require("fs").unlinkSync("/etc/init.d/"+i);console.log(i+" uninstalled")}catch(h){console.log(i+" could not be uninstalled",h)}break;case"systemd":this._update=require("child_process").execFile("/bin/sh",["sh"],{type:require("child_process").SpawnTypes.TERM});this._update.stdout.on("data",function(k){});this._update.stdin.write("systemctl stop "+i+".service\n");this._update.stdin.write("systemctl disable "+i+".service\n");this._update.stdin.write("exit\n");this._update.waitExit();try{require("fs").unlinkSync("/usr/local/mesh/"+i);require("fs").unlinkSync("/lib/systemd/system/"+i+".service");console.log(i+" uninstalled")}catch(h){console.log(i+" could not be uninstalled",h)}break;default:break}}else{if(process.platform=="darwin"){if(require("fs").existsSync("/Library/LaunchDaemons/"+i+".plist")){var g=require("child_process").execFile("/bin/sh",["sh"]);g.stdout.on("data",function(k){});g.stdin.write("launchctl stop "+i+"\n");g.stdin.write("launchctl unload /Library/LaunchDaemons/"+i+".plist\n");g.stdin.write("exit\n");g.waitExit();try{require("fs").unlinkSync("/usr/local/mesh_services/"+i+"/"+i);require("fs").unlinkSync("/Library/LaunchDaemons/"+i+".plist")}catch(h){throw ("Error uninstalling service: "+i+" => "+h)}try{require("fs").rmdirSync("/usr/local/mesh_services/"+i)}catch(h){}}else{throw ("Service: "+i+" does not exist")}}}}};if(process.platform=="linux"){this.getServiceType=function c(){return(require("process-manager").getProcessInfo(1).Name)}}}module.exports=serviceManager; \ No newline at end of file diff --git a/agents/modules_meshcore_min/smbios.min.js b/agents/modules_meshcore_min/smbios.min.js deleted file mode 100644 index 451b12c3..00000000 --- a/agents/modules_meshcore_min/smbios.min.js +++ /dev/null @@ -1 +0,0 @@ -try{Object.defineProperty(Array.prototype,"peek",{value:function(){return(this.length>0?this[this.length-1]:undefined)}})}catch(e){}try{Object.defineProperty(String.prototype,"replaceAll",{value:function replaceAll(b,a){return(this.split(b).join(a))}})}catch(e){}var RSMB=1381190978;var memoryLocation={1:"Other",2:"Unknown",3:"System Board",4:"ISA",5:"EISA",6:"PCI",7:"MCA",8:"PCMCIA",9:"Proprietary",10:"NuBus",160:"PC-98/C20",161:"PC-98/C24",162:"PC-98/E",163:"PC-98/LB"};var wakeReason=["Reserved","Other","Unknown","APM Timer","Modem Ring","LAN","Power Switch","PCI","AC Power"];function zeroLeftPad(c,b){if((b==null)&&(typeof(b)!="number")){return null}if(c==null){c=""}var d="";for(var a=0;a1){var r=v[1].split("\x0A\x0A")[0].split("\x0A");var s=[];for(var t in r){var u=r[t].trim().replaceAll(" ","").replaceAll("\x09","");if(!(u[0]=='"')){s.push(u)}}p.write(Buffer.from(s.join(""),"hex"));p.write(Buffer.from("00","hex"))}else{p.write(Buffer.from("0000","hex"))}}var q=p.buffer;q.ms=p;return(q)}}this._parse=function b(o){var n={};var m;var l=0;var o;var s=0;while(o&&l0){var n=l[4].pop();var o=n[20]&64;var s=n[20]&7;if(o){var m={_ObjectID:"SMBiosTables.processorInfo"};m.Processor=q[n[1]];m.MaxSpeed=n.readUInt16LE(16)+" Mhz";if(n[31]){m.Cores=n[31]}if(n[33]){m.Threads=n[33]}m.Populated=1;m.Status=t[s];m.Socket=n._strings[n[0]-1];m.Manufacturer=n._strings[n[3]-1];m.Version=n._strings[n[12]-1];r.push(m)}}return(r)};this.memoryInfo=function f(k){if(!k){throw ("no data")}var n={_ObjectID:"SMBiosTables.memoryInfo"};if(k[16]){var l=k[16].peek();n.location=memoryLocation[l[0]];if((n.maxCapacityKb=l.readUInt32LE(3))==2147483648){n.maxCapacityKb="A really big number"}}return(n)};this.systemInfo=function i(k){if(!k){throw ("no data")}var l={_ObjectID:"SMBiosTables.systemInfo"};if(k[1]){var m=k[1].peek();var n=m.slice(4,20);l.uuid=[zeroLeftPad(n.readUInt32LE(0).toString(16),8),zeroLeftPad(n.readUInt16LE(4).toString(16),4),zeroLeftPad(n.readUInt16LE(6).toString(16),4),zeroLeftPad(n.readUInt16BE(8).toString(16),4),zeroLeftPad(n.slice(10).toString("hex").toLowerCase(),12)].join("-");l.wakeReason=wakeReason[m[20]]}return(l)};this.systemSlots=function j(k){if(!k){throw ("no data")}var l=[];if(k[9]){while(k[9].length>0){var m=k[9].pop();l.push({name:m._strings[m[0]-1]})}}return(l)};this.amtInfo=function c(l){if(!l){throw ("no data")}var n={AMT:false};if(l[130]&&l[130].peek().slice(0,4).toString()=="$AMT"){var k=l[130].peek();n.AMT=k[4]?true:false;if(n.AMT){n.enabled=k[5]?true:false;n.storageRedirection=k[6]?true:false;n.serialOverLan=k[7]?true:false;n.kvm=k[14]?true:false;if(l[131].peek()&&l[131].peek().slice(52,56).toString()=="vPro"){var o=l[131].peek();if(o[0]&4){n.TXT=(o[0]&8)?true:false}if(o[0]&16){n.VMX=(o[0]&32)?true:false}n.MEBX=o.readUInt16LE(10).toString()+"."+o.readUInt16LE(8).toString()+"."+o.readUInt16LE(6).toString()+"."+o.readUInt16LE(4).toString();var m=o.slice(20,32);n.ManagementEngine=m.readUInt16LE(6).toString()+"."+m.readUInt16LE(4).toString()+"."+m.readUInt16LE(2).toString()+"."+m.readUInt16LE(0).toString()}}}return(n)};this.smTableTypes={0:"BIOS information",1:"System information",2:"Baseboard (or Module) information",4:"Processor information",5:"memory controller information",6:"Memory module information",7:"Cache information",8:"Port connector information",9:"System slots",10:"On board devices information",11:"OEM strings",12:"System configuration options",13:"BIOS language information",14:"Group associations",15:"System event log",16:"Physical memory array",17:"Memory device",18:"32bit memory error information",19:"Memory array mapped address",20:"Memory device mapped address",21:"Built-in pointing device",22:"Portable battery",23:"System reset",24:"Hardware security",25:"System power controls",26:"Voltage probe",27:"Cooling device",28:"Temperature probe",29:"Electrical current probe",30:"Out-of-band remote access",31:"Boot integrity services (BIS) entry point",32:"System boot information",33:"64bit memory error information",34:"Management device",35:"Management device component",36:"Management device threshold data",37:"Memory channel",38:"IPMI device information",39:"System power supply",40:"Additional information",41:"Onboard devices extended information",42:"Management controller host interface",126:"Inactive",127:"End-of-table"}}module.exports=new SMBiosTables(); \ No newline at end of file diff --git a/agents/modules_meshcore_min/toaster.min.js b/agents/modules_meshcore_min/toaster.min.js deleted file mode 100644 index 407f7047..00000000 --- a/agents/modules_meshcore_min/toaster.min.js +++ /dev/null @@ -1 +0,0 @@ -var toasters={};function Toaster(){this._ObjectID="toaster";this.Toast=function a(l,b){var h={};var d=require("events").inherits(h);d.createEvent("Dismissed");h.title=l;h.caption=b;if(process.platform=="win32"){d.createEvent("Clicked");var j=require("user-sessions").Current();for(var f in j){console.log(j[f])}try{console.log("Attempting Toast Mechanism 1");h._child=require("ScriptContainer").Create({processIsolation:true,sessionId:j.Active[0].SessionId})}catch(c){console.log(c);console.log("Attempting Toast Mechanism 2");h._child=require("ScriptContainer").Create({processIsolation:true})}h._child.parent=h;h._child.on("exit",function(e){this.parent.emit("Dismissed");delete this.parent._child});h._child.addModule("win-console",getJSModule("win-console"));h._child.addModule("win-message-pump",getJSModule("win-message-pump"));var k=" try{ var toast = require('win-console'); var balloon = toast.SetTrayIcon({ szInfo: '"+b+"', szInfoTitle: '"+l+"', balloonOnly: true }); balloon.on('ToastDismissed', function(){process.exit();}); } catch(e) { require('ScriptContainer').send(e); } require('ScriptContainer').send('done'); ";h._child.ExecuteString(k);toasters[h._hashCode()]=h;h.on("Dismissed",function(){delete toasters[this._hashCode()]});console.log("Returning");return(h)}else{if(!require("fs").existsSync("/usr/bin/notify-send")){throw ("Toast not supported on this platform")}Object.defineProperty(h,"_sessions",{value:require("user-sessions").Current(function g(e){this._cchild=require("child_process").execFile("/usr/bin/whoami",["whoami"],{type:require("child_process").SpawnTypes.TERM});this._cchild.stdout.on("data",function(i){if(i.toString().split("\r\n")[0]=="root"){if(e[":0"].State!="Connected"&&e[":0"].State!="Active"){this.parent.parent.Parent.emit("Dismissed");return}this.parent.parent._notify=require("child_process").execFile("/bin/sh",["sh"],{type:require("child_process").SpawnTypes.TERM});this.parent.parent._notify.stdin.write("su - "+e[":0"].Username+" -c \"DISPLAY=:0 notify-send '"+this.parent.parent.Parent.title+"' '"+this.parent.parent.Parent.caption+"'\"\n");this.parent.parent._notify.stdin.write("exit\n");this.parent.parent._notify.stdout.on("data",function(n){})}else{this.parent.parent._notify=require("child_process").execFile("/usr/bin/notify-send",["notify-send",this.parent.parent.Parent.title,this.parent.parent.Parent.caption],{type:require("child_process").SpawnTypes.TERM});this.parent.parent._notify.stdout.on("data",function(n){})}this.parent.parent.Parent._timeout=setTimeout(function m(n){n.emit("Dismissed")},10000,this.parent.parent.Parent)});this._cchild.parent=this})});h._sessions.Parent=h;toasters[h._hashCode()]=h;h.on("Dismissed",function(){delete toasters[this._hashCode()]});return(h)}}}module.exports=new Toaster(); \ No newline at end of file diff --git a/agents/modules_meshcore_min/user-sessions.min.js b/agents/modules_meshcore_min/user-sessions.min.js deleted file mode 100644 index a059a1fc..00000000 --- a/agents/modules_meshcore_min/user-sessions.min.js +++ /dev/null @@ -1 +0,0 @@ -var NOTIFY_FOR_THIS_SESSION=0;var NOTIFY_FOR_ALL_SESSIONS=1;var WM_WTSSESSION_CHANGE=689;var WM_POWERBROADCAST=536;var PBT_POWERSETTINGCHANGE=32787;var PBT_APMSUSPEND=4;var PBT_APMRESUMESUSPEND=7;var PBT_APMRESUMEAUTOMATIC=18;var PBT_APMPOWERSTATUSCHANGE=10;var WTS_CONSOLE_CONNECT=(1);var WTS_CONSOLE_DISCONNECT=(2);var WTS_REMOTE_CONNECT=(3);var WTS_REMOTE_DISCONNECT=(4);var WTS_SESSION_LOGON=(5);var WTS_SESSION_LOGOFF=(6);var WTS_SESSION_LOCK=(7);var WTS_SESSION_UNLOCK=(8);var WTS_SESSION_REMOTE_CONTROL=(9);var WTS_SESSION_CREATE=(10);var WTS_SESSION_TERMINATE=(11);var GUID_ACDC_POWER_SOURCE;var GUID_BATTERY_PERCENTAGE_REMAINING;var GUID_CONSOLE_DISPLAY_STATE;function UserSessions(){this._ObjectID="user-sessions";require("events").EventEmitter.call(this,true).createEvent("changed").createEvent("locked").createEvent("unlocked");this.enumerateUsers=function h(){var s=require("promise");var r=new s(function(t,p){this.__resolver=t;this.__rejector=p});r.__handler=function o(p){r.__resolver(p)};try{this.Current(r.__handler)}catch(q){r.__rejector(q)}r.parent=this;return(r)};if(process.platform=="win32"){this._serviceHooked=false;this._marshal=require("_GenericMarshal");this._kernel32=this._marshal.CreateNativeProxy("Kernel32.dll");this._kernel32.CreateMethod("GetLastError");try{this._wts=this._marshal.CreateNativeProxy("Wtsapi32.dll");this._wts.CreateMethod("WTSEnumerateSessionsA");this._wts.CreateMethod("WTSQuerySessionInformationA");this._wts.CreateMethod("WTSRegisterSessionNotification");this._wts.CreateMethod("WTSUnRegisterSessionNotification");this._wts.CreateMethod("WTSFreeMemory")}catch(i){}this._advapi=this._marshal.CreateNativeProxy("Advapi32.dll");this._advapi.CreateMethod("AllocateAndInitializeSid");this._advapi.CreateMethod("CheckTokenMembership");this._advapi.CreateMethod("FreeSid");this._user32=this._marshal.CreateNativeProxy("user32.dll");this._user32.CreateMethod({method:"RegisterPowerSettingNotification",threadDispatch:1});this._user32.CreateMethod("UnregisterPowerSettingNotification");this._rpcrt=this._marshal.CreateNativeProxy("Rpcrt4.dll");this._rpcrt.CreateMethod("UuidFromStringA");this._rpcrt.StringToUUID=function n(o){var p=n.us._marshal.CreateVariable(16);if(n.us._rpcrt.UuidFromStringA(n.us._marshal.CreateVariable(o),p).Val==0){return(p)}else{throw ("Could not convert string to UUID")}};this._rpcrt.StringToUUID.us=this;GUID_ACDC_POWER_SOURCE=this._rpcrt.StringToUUID("5d3e9a59-e9D5-4b00-a6bd-ff34ff516548");GUID_BATTERY_PERCENTAGE_REMAINING=this._rpcrt.StringToUUID("a7ad8041-b45a-4cae-87a3-eecbb468a9e1");GUID_CONSOLE_DISPLAY_STATE=this._rpcrt.StringToUUID("6fe69556-704a-47a0-8f24-c28d936fda47");this.SessionStates=["Active","Connected","ConnectQuery","Shadow","Disconnected","Idle","Listening","Reset","Down","Init"];this.InfoClass={WTSInitialProgram:0,WTSApplicationName:1,WTSWorkingDirectory:2,WTSOEMId:3,WTSSessionId:4,WTSUserName:5,WTSWinStationName:6,WTSDomainName:7,WTSConnectState:8,WTSClientBuildNumber:9,WTSClientName:10,WTSClientDirectory:11,WTSClientProductId:12,WTSClientHardwareId:13,WTSClientAddress:14,WTSClientDisplay:15,WTSClientProtocolType:16,WTSIdleTime:17,WTSLogonTime:18,WTSIncomingBytes:19,WTSOutgoingBytes:20,WTSIncomingFrames:21,WTSOutgoingFrames:22,WTSClientInfo:23,WTSSessionInfo:24,WTSSessionInfoEx:25,WTSConfigInfo:26,WTSValidationInfo:27,WTSSessionAddressV4:28,WTSIsRemoteSession:29};this.isRoot=function k(){var r=this._marshal.CreateVariable(6);r.toBuffer().writeInt8(5,5);var p=this._marshal.CreatePointer();var o=false;if(this._advapi.AllocateAndInitializeSid(r,2,32,544,0,0,0,0,0,0,p).Val!=0){var q=this._marshal.CreateInteger();if(this._advapi.CheckTokenMembership(0,p.Deref(),q).Val!=0){if(q.toBuffer().readUInt32LE()!=0){o=true}}this._advapi.FreeSid(p.Deref())}return o};this.getSessionAttribute=function j(s,o){var p=this._marshal.CreatePointer();var q=this._marshal.CreateVariable(4);if(this._wts.WTSQuerySessionInformationA(0,s,o,p,q).Val==0){throw ("Error calling WTSQuerySessionInformation: "+this._kernel32.GetLastError.Val)}var r=p.Deref().String;this._wts.WTSFreeMemory(p.Deref());return(r)};this.Current=function f(o){var u={};var t=this._marshal.CreatePointer();var p=this._marshal.CreateVariable(4);if(this._wts.WTSEnumerateSessionsA(0,0,1,t,p).Val==0){throw ("Error calling WTSEnumerateSessionsA: "+this._kernel32.GetLastError().Val)}for(var q=0;q= 0) {printf \"%s:%s\\n\", $1, $3}' /etc/passwd\nexit\n");o.waitExit();var p=o.stdout.str.split("\n");var r={},s;for(var q in p){s=p[q].split(":");if(s[0]){r[s[0]]=s[1]}}return(r)};this._uids=function c(){var o=require("child_process").execFile("/bin/sh",["sh"]);o.stdout.str="";o.stdout.on("data",function(t){this.str+=t.toString()});o.stdin.write("awk -F: '($3 >= 0) {printf \"%s:%s\\n\", $1, $3}' /etc/passwd\nexit\n");o.waitExit();var p=o.stdout.str.split("\n");var r={},s;for(var q in p){s=p[q].split(":");if(s[0]){r[s[1]]=s[0]}}return(r)};this.Self=function m(){var q=require("promise");var o=new q(function(r,p){this.__resolver=r;this.__rejector=p;this.__child=require("child_process").execFile("/usr/bin/id",["id","-u"]);this.__child.promise=this;this.__child.stdout._txt="";this.__child.stdout.on("data",function(s){this._txt+=s.toString()});this.__child.on("exit",function(s){try{parseInt(this.stdout._txt)}catch(t){this.promise.__rejector("invalid uid");return}var u=parseInt(this.stdout._txt);this.promise.__resolver(u)})});return(o)};this.Current=function f(o){var p={};p._ObjectID="UserSession";Object.defineProperty(p,"_callback",{value:o});Object.defineProperty(p,"_child",{value:require("child_process").execFile("/usr/bin/last",["last","-f","/var/run/utmp"])});p._child.Parent=p;p._child._txt="";p._child.on("exit",function(q){var u=this._txt.split("\n");var A=[];var D={};for(var t in u){if(u[t]){var B=getTokens(u[t]);var z={Username:B[0],SessionId:B[1]};if(B[3].includes("still logged in")){z.State="Active"}else{z.LastActive=B[3]}A.push(z)}}A.pop();var C={};var y=[];for(var t in A){if(A[t].Username!="reboot"){D[A[t].SessionId]=A[t];if(C[A[t].Username]==null){C[A[t].Username]=-1}}}try{require("promise")}catch(r){Object.defineProperty(D,"Active",{value:showActiveOnly(D)});if(this.Parent._callback){this.Parent._callback.call(this.Parent,D)}return}var x=require("promise");for(var v in C){var w=new x(function(E,s){this.__username=v;this.__resolver=E;this.__rejector=s;this.__child=require("child_process").execFile("/usr/bin/id",["id","-u",v]);this.__child.promise=this;this.__child.stdout._txt="";this.__child.stdout.on("data",function(F){this._txt+=F.toString()});this.__child.on("exit",function(F){try{parseInt(this.stdout._txt)}catch(G){this.promise.__rejector("invalid uid");return}var H=parseInt(this.stdout._txt);this.promise.__resolver(H)})});y.push(w)}x.all(y).then(function(E){var F={};for(var s in E){F[E[s].__username]=E[s]._internal.completedArgs[0]}for(var s in D){D[s].uid=F[D[s].Username]}Object.defineProperty(D,"Active",{value:showActiveOnly(D)});if(p._callback){p._callback.call(p,D)}},function(s){Object.defineProperty(D,"Active",{value:showActiveOnly(D)});if(p._callback){p._callback.call(p,D)}})});p._child.stdout.Parent=p._child;p._child.stdout.on("data",function(q){this.Parent._txt+=q.toString()});return(p)};this._recheckLoggedInUsers=function a(){this.enumerateUsers().then(function(o){if(o.Active.length>0){if(this.parent._linux_lock_watcher!=null&&this.parent._linux_lock_watcher.uid!=o.Active[0].uid){delete this.parent._linux_lock_watcher}this.parent._linux_lock_watcher=new g(process.env.XDG_CURRENT_DESKTOP=="Unity"?"com.ubuntu.Upstart0_6":"org.gnome.ScreenSaver",o.Active[0].uid);this.parent._linux_lock_watcher.user_session=this.parent;this.parent._linux_lock_watcher.on("signal",function(r){var q=this.user_session.enumerateUsers();q.signalData=r.data[0];q.then(function(p){switch(this.signalData){case true:case"desktop-lock":this.parent.emit("locked",p.Active[0]);break;case false:case"desktop-unlock":this.parent.emit("unlocked",p.Active[0]);break}})})}else{if(this.parent._linux_lock_watcher!=null){delete this.parent._linux_lock_watcher}}})};this.on("changed",this._recheckLoggedInUsers);this._recheckLoggedInUsers()}else{if(process.platform=="darwin"){this._users=function(){var o=require("child_process").execFile("/usr/bin/dscl",["dscl",".","list","/Users","UniqueID"]);o.stdout.str="";o.stdout.on("data",function(t){this.str+=t.toString()});o.stdin.write("exit\n");o.waitExit();var q=o.stdout.str.split("\n");var r,p;var s={};for(p=0;p0;++r){if(!u[s[r].split(" ")[0]]){try{u[s[r].split(" ")[0]]={Username:s[r].split(" ")[0],State:s[r].split("still logged in").length>1?"Active":"Inactive",uid:t.uid[s[r].split(" ")[0]]}}catch(q){}}else{if(u[s[r].split(" ")[0]].State!="Active"&&s[r].split("still logged in").length>1){u[s[r].split(" ")[0]].State="Active"}}}Object.defineProperty(u,"Active",{value:showActiveOnly(u)});if(o){o.call(this,u)}}}}}if(process.platform=="linux"||process.platform=="darwin"){this._self=function b(){var o=require("child_process").execFile("/usr/bin/id",["id","-u"]);o.stdout.str="";o.stdout.on("data",function(p){this.str+=p.toString()});o.waitExit();return(parseInt(o.stdout.str))};this.isRoot=function k(){return(this._self()==0)};this.consoleUid=function e(){var o=process.platform=="darwin"?"console":((process.env.DISPLAY)?process.env.DISPLAY:":0");var p=require("child_process").execFile("/bin/sh",["sh"]);p.stdout.str="";p.stdout.on("data",function(u){this.str+=u.toString()});p.stdin.write("who\nexit\n");p.waitExit();var s=p.stdout.str.split("\n");var t,q,r;for(q in s){t=s[q].split(" ");for(r=1;r0){return(parseInt(this._users()[t[0]]))}}}throw ("nobody logged into console")}}}function showActiveOnly(c){var b=[];var e={};var f=[];var d;for(var a in c){if(c[a].State=="Active"){b.push(c[a]);d=(c[a].Domain?(c[a].Domain+"\\"):"")+c[a].Username;if(!e[d]){e[d]=d}}}for(var a in e){f.push(a)}Object.defineProperty(b,"usernames",{value:f});return(b)}function getTokens(d){var a=[];var b;a.push(d.substring(0,(b=d.indexOf(" "))));while(d[++b]==" "){}a.push(d.substring(b,(b=d.substring(b).indexOf(" ")+b)));while(d[++b]==" "){}a.push(d.substring(b,(b=d.substring(b).indexOf(" ")+b)));while(d[++b]==" "){}var c=d.substring(b).trim();a.push(c);return(a)}module.exports=new UserSessions(); \ No newline at end of file diff --git a/agents/modules_meshcore_min/wifi-scanner-windows.min.js b/agents/modules_meshcore_min/wifi-scanner-windows.min.js deleted file mode 100644 index 752e15ac..00000000 --- a/agents/modules_meshcore_min/wifi-scanner-windows.min.js +++ /dev/null @@ -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"){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; \ No newline at end of file diff --git a/agents/modules_meshcore_min/win-console.min.js b/agents/modules_meshcore_min/win-console.min.js deleted file mode 100644 index d013e2a0..00000000 --- a/agents/modules_meshcore_min/win-console.min.js +++ /dev/null @@ -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}if(!o){console.log(p)}}});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(); \ No newline at end of file diff --git a/agents/modules_meshcore_min/win-message-pump.min.js b/agents/modules_meshcore_min/win-message-pump.min.js deleted file mode 100644 index a302291a..00000000 --- a/agents/modules_meshcore_min/win-message-pump.min.js +++ /dev/null @@ -1 +0,0 @@ -var WH_CALLWNDPROC=4;var WM_QUIT=18;var GM=require("_GenericMarshal");function WindowsMessagePump(d){this._ObjectID="win-message-pump";this._options=d;var b=require("events").inherits(this);b.createEvent("hwnd");b.createEvent("error");b.createEvent("message");b.createEvent("exit");this._msg=GM.CreateVariable(GM.PointerSize==4?28:48);this._kernel32=GM.CreateNativeProxy("Kernel32.dll");this._kernel32.mp=this;this._kernel32.CreateMethod("GetLastError");this._kernel32.CreateMethod("GetModuleHandleA");this._user32=GM.CreateNativeProxy("User32.dll");this._user32.mp=this;this._user32.CreateMethod("GetMessageA");this._user32.CreateMethod("CreateWindowExA");this._user32.CreateMethod("TranslateMessage");this._user32.CreateMethod("DispatchMessageA");this._user32.CreateMethod("RegisterClassExA");this._user32.CreateMethod("DefWindowProcA");this._user32.CreateMethod("PostMessageA");this.wndclass=GM.CreateVariable(GM.PointerSize==4?48:80);this.wndclass.mp=this;this.wndclass.hinstance=this._kernel32.GetModuleHandleA(0);this.wndclass.cname=GM.CreateVariable("MainWWWClass");this.wndclass.wndproc=GM.GetGenericGlobalCallback(4);this.wndclass.wndproc.mp=this;this.wndclass.toBuffer().writeUInt32LE(this.wndclass._size);this.wndclass.cname.pointerBuffer().copy(this.wndclass.Deref(GM.PointerSize==4?40:64,GM.PointerSize).toBuffer());this.wndclass.wndproc.pointerBuffer().copy(this.wndclass.Deref(8,GM.PointerSize).toBuffer());this.wndclass.hinstance.pointerBuffer().copy(this.wndclass.Deref(GM.PointerSize==4?20:24,GM.PointerSize).toBuffer());this.wndclass.wndproc.on("GlobalCallback",function c(h,i,g,f){if(this.mp._hwnd!=null&&this.mp._hwnd.Val==h.Val){this.mp.emit("message",{message:i.Val,wparam:g.Val,lparam:f.Val,lparam_hex:f.pointerBuffer().toString("hex")});return(this.mp._user32.DefWindowProcA(h,i,g,f))}else{if(this.mp._hwnd==null&&this.CallingThread()==this.mp._user32.RegisterClassExA.async.threadId()){return(this.mp._user32.DefWindowProcA(h,i,g,f))}}});this._user32.RegisterClassExA.async(this.wndclass).then(function(){this.nativeProxy.CreateWindowExA.async(this.nativeProxy.RegisterClassExA.async,136,this.nativeProxy.mp.wndclass.cname,0,8388608,0,0,100,100,0,0,0,0).then(function(f){if(f.Val==0){this.nativeProxy.mp.emit("error","Error creating hidden window")}else{this.nativeProxy.mp._hwnd=f;this.nativeProxy.mp.emit("hwnd",f);this.nativeProxy.mp._startPump()}})});this._startPump=function a(){this._user32.GetMessageA.async(this._user32.RegisterClassExA.async,this._msg,this._hwnd,0,0).then(function(f){if(f.Val>0){this.nativeProxy.TranslateMessage.async(this.nativeProxy.RegisterClassExA.async,this.nativeProxy.mp._msg).then(function(){this.nativeProxy.DispatchMessageA.async(this.nativeProxy.RegisterClassExA.async,this.nativeProxy.mp._msg).then(function(){this.nativeProxy.mp._startPump()})})}else{delete this.nativeProxy.mp._hwnd;this.nativeProxy.mp.emit("exit",0)}},function(f){this.nativeProxy.mp.stop()})};this.stop=function e(){if(this._hwnd){this._user32.PostMessageA(this._hwnd,WM_QUIT,0,0)}}}module.exports=WindowsMessagePump; \ No newline at end of file diff --git a/agents/modules_meshcore_min/win-registry.min.js b/agents/modules_meshcore_min/win-registry.min.js deleted file mode 100644 index a1f562a2..00000000 --- a/agents/modules_meshcore_min/win-registry.min.js +++ /dev/null @@ -1 +0,0 @@ -var KEY_QUERY_VALUE=1;var KEY_ENUMERATE_SUB_KEYS=8;var KEY_WRITE=131078;var KEY_DATA_TYPES={REG_NONE:0,REG_SZ:1,REG_EXPAND_SZ:2,REG_BINARY:3,REG_DWORD:4,REG_DWORD_BIG_ENDIAN:5,REG_LINK:6,REG_MULTI_SZ:7,REG_RESOURCE_LIST:8,REG_FULL_RESOURCE_DESCRIPTOR:9,REG_RESOURCE_REQUIREMENTS_LIST:10,REG_QWORD:11};function windows_registry(){this._ObjectId="win-registry";this._marshal=require("_GenericMarshal");this._AdvApi=this._marshal.CreateNativeProxy("Advapi32.dll");this._AdvApi.CreateMethod("RegCreateKeyExA");this._AdvApi.CreateMethod("RegEnumKeyExA");this._AdvApi.CreateMethod("RegEnumValueA");this._AdvApi.CreateMethod("RegOpenKeyExA");this._AdvApi.CreateMethod("RegQueryInfoKeyA");this._AdvApi.CreateMethod("RegQueryValueExA");this._AdvApi.CreateMethod("RegCloseKey");this._AdvApi.CreateMethod("RegDeleteKeyA");this._AdvApi.CreateMethod("RegDeleteValueA");this._AdvApi.CreateMethod("RegSetValueExA");this.HKEY={Root:Buffer.from("80000000","hex").swap32(),CurrentUser:Buffer.from("80000001","hex").swap32(),LocalMachine:Buffer.from("80000002","hex").swap32(),Users:Buffer.from("80000003","hex").swap32()};this.QueryKey=function b(o,A,q){var l;var m=this._marshal.CreatePointer();var s=this._marshal.CreateVariable(4);var E=this._marshal.CreateVariable(4);var n=this._marshal.CreatePointer(o);var C=null;if(q){q=this._marshal.CreateVariable(q)}if(!A){A=""}if((l=this._AdvApi.RegOpenKeyExA(n,this._marshal.CreateVariable(A),0,KEY_QUERY_VALUE|KEY_ENUMERATE_SUB_KEYS,m).Val)!=0){throw ("Opening Registry Key: "+A+" => Returned Error: "+l)}if((A==""&&!q)||!q){var B={subkeys:[],values:[]};var d=this._marshal.CreateVariable(1024);var f=this._marshal.CreateVariable(1024);var g=this._marshal.CreateVariable(32768);var j=this._marshal.CreateVariable(4);var x=this._marshal.CreateVariable(4);var e=this._marshal.CreateVariable(4);e.toBuffer().writeUInt32LE(1024);var y=this._marshal.CreateVariable(4);var z=this._marshal.CreateVariable(4);var u=this._marshal.CreateVariable(4);var t=this._marshal.CreateVariable(4);var w=this._marshal.CreateVariable(4);var v=this._marshal.CreateVariable(4);var D=this._marshal.CreateVariable(4);var r=this._marshal.CreateVariable(8);C=this._AdvApi.RegQueryInfoKeyA(m.Deref(),d,e,0,y,u,t,z,w,v,D,r);if(C.Val!=0){throw ("RegQueryInfoKeyA() returned error: "+C.Val)}for(var p=0;p0){l=this.chunk.shift();this.terminal._WriteBuffer(l);l.flush()}})}else{this.terminal._WriteBuffer(j);k()}return(true)},"final":function(j){var k=this.terminal._stop();k.__flush=j;k.then(function(){this.__flush()})}});this._stream.terminal=this;this._stream._promise=new promise(function(k,j){this._res=k;this._rej=j});this._stream._promise.terminal=this;return(this._stream)};this._stop=function(){if(this.stopping){return(this.stopping)}this._ConsoleWinEventProc.removeAllListeners("GlobalCallback");this.stopping=new promise(function(h,g){this._res=h;this._rej=g});var f=this._kernel32.GetThreadId(this._user32.SetWinEventHook.async.thread()).Val;this._user32.PostThreadMessageA(f,WM_QUIT,0,0);this._stream.emit("end");return(this.stopping)};this._hookThread=function(){var g=new promise(function(i,h){this._res=i;this._rej=h});g.terminal=this;this._ConsoleWinEventProc=GM.GetGenericGlobalCallback(7);this._ConsoleWinEventProc.terminal=this;var f=this._user32.SetWinEventHook.async(EVENT_CONSOLE_CARET,EVENT_CONSOLE_END_APPLICATION,0,this._ConsoleWinEventProc,0,0,WINEVENT_OUTOFCONTEXT|WINEVENT_SKIPOWNPROCESS);f.ready=g;f.terminal=this;f.then(function(h){if(h.Val==0){this.ready._rej("Error calling SetWinEventHook")}else{this.terminal.hwinEventHook=h;this.ready._res();this.terminal._GetMessage()}});this._ConsoleWinEventProc.on("GlobalCallback",function(j,i,k,n,l,m,p){if(!this.terminal.hwinEventHook||this.terminal.hwinEventHook.Val!=j.Val){return}var h=null;switch(i.Val){case EVENT_CONSOLE_CARET:break;case EVENT_CONSOLE_UPDATE_REGION:if(!this.terminal.connected){this.terminal.connected=true;this.terminal._stream._promise._res()}if(this.terminal._scrollTimer==null){h=this.terminal._GetScreenBuffer(LOWORD(n.Val),HIWORD(n.Val),LOWORD(l.Val),HIWORD(l.Val));this.terminal._SendDataBuffer(h)}break;case EVENT_CONSOLE_UPDATE_SIMPLE:var o={data:[Buffer.alloc(1,LOWORD(l.Val))],attributes:[HIWORD(l.Val)],width:1,height:1,x:LOWORD(n.Val),y:HIWORD(n.Val)};this.terminal._SendDataBuffer(o);break;case EVENT_CONSOLE_UPDATE_SCROLL:this.terminal._SendScroll(n.Val,l.Val);break;case EVENT_CONSOLE_LAYOUT:break;case EVENT_CONSOLE_START_APPLICATION:break;case EVENT_CONSOLE_END_APPLICATION:if(n.Val==this.terminal._hProcessID){this.terminal._hProcess=null;this.terminal._stop().then(function(){console.log("STOPPED")})}break;default:console.log("Unknown event: "+i.Val);break}});return(g)};this._GetMessage=function(){if(this._user32.abort){console.log("aborting loop");return}this._user32.GetMessageA.async(this._user32.SetWinEventHook.async,MSG,0,0,0).then(function(f){if(f.Val!=0){if(f.Val==-1){}else{this.nativeProxy._user32.TranslateMessage.async(this.nativeProxy.user32.SetWinEventHook.async,MSG).then(function(){this.nativeProxy._user32.DispatchMessageA.async(this.nativeProxy.user32.SetWinEventHook.async,MSG).then(function(){this.nativeProxy.terminal._GetMessage()},console.log)},console.log)}}else{this.nativeProxy.UnhookWinEvent.async(this.nativeProxy.terminal._user32.SetWinEventHook.async,this.nativeProxy.terminal.hwinEventHook).then(function(){if(this.nativeProxy.terminal._hProcess==null){return}this.nativeProxy.terminal.stopping._res();if(this.nativeProxy.terminal._kernel32.TerminateProcess(this.nativeProxy.terminal._hProcess,1067).Val==0){var g=this.nativeProxy.terminal._kernel32.GetLastError().Val;console.log("Unable to kill Terminal Process, error: "+g)}this.nativeProxy.terminal.stopping=null},function(g){console.log("REJECTED_UnhookWinEvent: "+g)})}},function(f){console.log("REJECTED_GETMessage: "+f)})};this._WriteBuffer=function(f){for(var g=0;gl;++j){this._stream.push(Buffer.from("\r\n"))}var f=this._GetScreenBuffer(0,0,m-1,l-1);this._SendDataBuffer(f);this._scrollTimer=setTimeout(function(p,o,n){var i=p._GetScreenBuffer(0,0,o-1,n-1);p._SendDataBuffer(i);p._scrollTimer=null},250,this,m,l)};this.StartCommand=function e(){if(this._kernel32.CreateProcessA(GM.CreateVariable(process.env.windir+"\\system32\\cmd.exe"),0,0,0,1,CREATE_NEW_PROCESS_GROUP,0,0,si,pi).Val==0){console.log("Error Spawning CMD");return}this._kernel32.CloseHandle(pi.Deref(GM.PointerSize,GM.PointerSize).Deref());this._hProcess=pi.Deref(0,GM.PointerSize).Deref();this._hProcessID=pi.Deref(GM.PointerSize==4?8:16,4).toBuffer().readUInt32LE()}}function LOWORD(a){return(a&65535)}function HIWORD(a){return((a>>16)&65535)}function GetEsc(b,a){return(Buffer.from("\x1B["+a.join(";")+b))}function MeshConsole(a){require("MeshAgent").SendCommand({action:"msg",type:"console",value:JSON.stringify(a)})}function TranslateLine(r,s,f,a){var m,l,e,q,j,c,n,k,d,p,h,b,g=[],o=[GetEsc("H",[s,r])];if(typeof a=="number"){a=[a]}for(m=0;m>2);d=(a[m]&112)>>4;d=((d&1)<<2)+(d&2)+((d&4)>>2);p=(a[m]&16384);h=(a[m]&8)>>3;b=(a[m]&128);if(p!=q){if(p!=0){g.push(7)}else{g.push(0);l=7;e=0;j=0;c=0}q=p}if(k!=l){g.push(k+30);l=k}if(d!=e){g.push(d+40);e=d}if(h!=j){g.push(2-h);j=h}if(b!=c){if(b==0){g.push(e+40)}else{g.push(e+100);c=b}}if(g.length>0){o.push(GetEsc("m",g));g=[]}n=a[m]}o.push(Buffer.from(String.fromCharCode(f[m])))}return Buffer.concat(o)}module.exports=new windows_terminal(); \ No newline at end of file diff --git a/letsEncrypt.js b/letsEncrypt.js index 35d6881a..dbba73a7 100644 --- a/letsEncrypt.js +++ b/letsEncrypt.js @@ -64,7 +64,7 @@ module.exports.CreateLetsEncrypt = function (parent) { if (obj.parent.redirserver.port == 80) { obj.parent.redirserver.app.use('/', obj.le.middleware()); obj.redirWebServerHooked = true; } obj.getCertificate = function (certs, func) { - if (certs.CommonName == 'un-configured') { console.log("ERROR: Use --cert to setup the default server name before using Let's Encrypt."); func(certs); return; } + if (certs.CommonName.indexOf('.') == -1) { console.log("ERROR: Use --cert to setup the default server name before using Let's Encrypt."); func(certs); return; } if (obj.parent.config.letsencrypt == null) { func(certs); return; } if (obj.parent.config.letsencrypt.email == null) { console.log("ERROR: Let's Encrypt email address not specified."); func(certs); return; } if ((obj.parent.redirserver == null) || (obj.parent.redirserver.port !== 80)) { console.log("ERROR: Redirection web server must be active on port 80 for Let's Encrypt to work."); func(certs); return; } diff --git a/meshagent.js b/meshagent.js index c32063b7..f36112e6 100644 --- a/meshagent.js +++ b/meshagent.js @@ -1056,6 +1056,8 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) { } if ((command.intelamt.host != null) && (device.intelamt.host != command.intelamt.host)) { changes.push('AMT host'); device.intelamt.host = command.intelamt.host; change = 1; log = 1; } if ((command.intelamt.uuid != null) && (device.intelamt.uuid != command.intelamt.uuid)) { changes.push('AMT uuid'); device.intelamt.uuid = command.intelamt.uuid; change = 1; log = 1; } + if ((command.intelamt.user != null) && (device.intelamt.user != command.intelamt.user)) { changes.push('AMT user'); device.intelamt.user = command.intelamt.user; change = 1; log = 1; } + if ((command.intelamt.pass != null) && (device.intelamt.pass != command.intelamt.pass)) { changes.push('AMT pass'); device.intelamt.pass = command.intelamt.pass; change = 1; log = 1; } } if ((command.users != null) && (device.users != command.users)) { device.users = command.users; change = 1; } // Don't save this to the db. if ((mesh.mtype == 2) && (!obj.args.wanonly)) { diff --git a/meshcentral.js b/meshcentral.js index c06e1e74..e8c2e0d4 100644 --- a/meshcentral.js +++ b/meshcentral.js @@ -702,7 +702,7 @@ function CreateMeshCentralServer(config, args) { var i; // If the certificate is un-configured, force LAN-only mode - if (obj.certificates.CommonName == 'un-configured') { /*console.log('Server name not configured, running in LAN-only mode.');*/ obj.args.lanonly = true; } + if (obj.certificates.CommonName.indexOf('.') == -1) { /*console.log('Server name not configured, running in LAN-only mode.');*/ obj.args.lanonly = true; } // Write server version and run mode var productionMode = (process.env.NODE_ENV && (process.env.NODE_ENV == 'production')); diff --git a/meshmail.js b/meshmail.js index cf293c2c..67486af9 100644 --- a/meshmail.js +++ b/meshmail.js @@ -126,7 +126,7 @@ module.exports.CreateMeshMail = function (parent) { // Send account check mail obj.sendAccountCheckMail = function (domain, username, email) { var template = getTemplateEx('account-check', domain); - if ((template == null) || (template.htmlSubject == null) || (template.txtSubject == null) || (parent.certificates == null) || (parent.certificates.CommonName == null) || (parent.certificates.CommonName == 'un-configured')) return; // If the server name is not set, no reset possible. + if ((template == null) || (template.htmlSubject == null) || (template.txtSubject == null) || (parent.certificates == null) || (parent.certificates.CommonName == null) || (parent.certificates.CommonName.indexOf('.') == -1)) return; // If the server name is not set, no reset possible. // Set all the options. var options = { username: username, email: email, servername: domain.title }; @@ -140,7 +140,7 @@ module.exports.CreateMeshMail = function (parent) { // Send account reset mail obj.sendAccountResetMail = function (domain, username, email) { var template = getTemplateEx('account-reset', domain); - if ((template == null) || (template.htmlSubject == null) || (template.txtSubject == null) || (parent.certificates == null) || (parent.certificates.CommonName == null) || (parent.certificates.CommonName == 'un-configured')) return; // If the server name is not set, don't validate the email address. + if ((template == null) || (template.htmlSubject == null) || (template.txtSubject == null) || (parent.certificates == null) || (parent.certificates.CommonName == null) || (parent.certificates.CommonName.indexOf('.') == -1)) return; // If the server name is not set, don't validate the email address. // Set all the options. var options = { username: username, email: email, servername: domain.title }; @@ -154,7 +154,7 @@ module.exports.CreateMeshMail = function (parent) { // Send agent invite mail obj.sendAgentInviteMail = function (domain, username, email, meshid, name, os, msg, flags) { var template = getTemplateEx('mesh-invite', domain); - if ((template == null) || (template.htmlSubject == null) || (template.txtSubject == null) || (parent.certificates == null) || (parent.certificates.CommonName == null) || (parent.certificates.CommonName == 'un-configured')) return; // If the server name is not set, don't validate the email address. + if ((template == null) || (template.htmlSubject == null) || (template.txtSubject == null) || (parent.certificates == null) || (parent.certificates.CommonName == null) || (parent.certificates.CommonName.indexOf('.') == -1)) return; // If the server name is not set, don't validate the email address. // Set all the template replacement options and generate the final email text (both in txt and html formats). var options = { username: username, name: name, email: email, installflags: flags, msg: msg, meshid: meshid, meshidhex: meshid.split('/')[2], servername: domain.title }; diff --git a/meshscanner.js b/meshscanner.js index 03506597..10082626 100644 --- a/meshscanner.js +++ b/meshscanner.js @@ -70,7 +70,7 @@ module.exports.CreateMeshScanner = function (parent) { server4.bind(bindOptions, function () { try { var doscan = true; - try { this.setBroadcast(true); this.setMulticastTTL(128); this.addMembership(membershipIPv4); } catch (e) { doscan = false; } + try { this.setBroadcast(true); this.setMulticastTTL(128); this.addMembership(membershipIPv4, this.xxlocal); } catch (e) { doscan = false; } this.on('error', function (error) { console.log('Error: ' + error); }); this.on('message', function (msg, info) { onUdpPacket(msg, info, this); }); if (doscan == true) { obj.performScan(this); obj.performScan(this); } @@ -101,7 +101,7 @@ module.exports.CreateMeshScanner = function (parent) { server6.bind(bindOptions, function () { try { var doscan = true; - try { this.setBroadcast(true); this.setMulticastTTL(128); this.addMembership(membershipIPv6); } catch (e) { doscan = false; } + try { this.setBroadcast(true); this.setMulticastTTL(128); this.addMembership(membershipIPv6, this.xxlocal); } catch (e) { doscan = false; } this.on('error', function (error) { console.log('Error: ' + error); }); this.on('message', function (msg, info) { onUdpPacket(msg, info, this); }); if (doscan == true) { obj.performScan(this); obj.performScan(this); } @@ -140,13 +140,13 @@ module.exports.CreateMeshScanner = function (parent) { // Build the IPv4 response var url = (parent.args.notls ? 'ws' : 'wss') + '://%s:' + parent.args.port + '/agent.ashx'; obj.multicastPacket4 = Buffer.from("MeshCentral2|" + obj.agentCertificateHashHex + '|' + url, 'ascii'); - if (parent.certificates.CommonName != "un-configured") { url = (parent.args.notls ? 'ws' : 'wss') + '://' + parent.certificates.CommonName + ':' + parent.args.port + '/agent.ashx'; } + if (parent.certificates.CommonName.indexOf('.') != -1) { url = (parent.args.notls ? 'ws' : 'wss') + '://' + parent.certificates.CommonName + ':' + parent.args.port + '/agent.ashx'; } obj.multicastPacket4x = Buffer.from("MeshCentral2|" + obj.agentCertificateHashHex + '|' + url + '|' + name + '|' + info, 'ascii'); // Build the IPv6 response url = (parent.args.notls ? 'ws' : 'wss') + '://[%s]:' + parent.args.port + '/agent.ashx'; obj.multicastPacket6 = Buffer.from("MeshCentral2|" + obj.agentCertificateHashHex + '|' + url, 'ascii'); - if (parent.certificates.CommonName != "un-configured") { url = (parent.args.notls ? 'ws' : 'wss') + '://' + parent.certificates.CommonName + ':' + parent.args.port + '/agent.ashx'; } + if (parent.certificates.CommonName.indexOf('.') != -1) { url = (parent.args.notls ? 'ws' : 'wss') + '://' + parent.certificates.CommonName + ':' + parent.args.port + '/agent.ashx'; } obj.multicastPacket6x = Buffer.from("MeshCentral2|" + obj.agentCertificateHashHex + '|' + url + '|' + name + '|' + info, 'ascii'); setupServers(); diff --git a/meshuser.js b/meshuser.js index 6142b997..2182fbed 100644 --- a/meshuser.js +++ b/meshuser.js @@ -1653,7 +1653,7 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use case 'inviteAgent': { if ((obj.parent.parent.mailserver == null) || (obj.args.lanonly == true)) return; // This operation requires the email server - if ((obj.parent.parent.certificates.CommonName == null) || (obj.parent.parent.certificates.CommonName == 'un-configured')) return; // Server name must be configured + if ((obj.parent.parent.certificates.CommonName == null) || (obj.parent.parent.certificates.CommonName.indexOf('.') == -1)) return; // Server name must be configured if (obj.common.validateString(command.meshid, 1, 1024) == false) break; // Check meshid if ((command.meshid.split('/').length != 3) || (command.meshid.split('/')[1] != domain.id)) return; // Invalid domain, operation only valid for current domain @@ -1722,7 +1722,7 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use case 'otpauth-request': { // Check is 2-step login is supported - const twoStepLoginSupported = ((domain.auth != 'sspi') && (obj.parent.parent.certificates.CommonName != 'un-configured') && (obj.args.lanonly !== true) && (obj.args.nousers !== true)); + const twoStepLoginSupported = ((domain.auth != 'sspi') && (obj.parent.parent.certificates.CommonName.indexOf('.') != -1) && (obj.args.lanonly !== true) && (obj.args.nousers !== true)); if (twoStepLoginSupported) { // Request a one time password to be setup const otplib = require('otplib'); @@ -1734,7 +1734,7 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use case 'otpauth-setup': { // Check is 2-step login is supported - const twoStepLoginSupported = ((domain.auth != 'sspi') && (obj.parent.parent.certificates.CommonName != 'un-configured') && (obj.args.lanonly !== true) && (obj.args.nousers !== true)); + const twoStepLoginSupported = ((domain.auth != 'sspi') && (obj.parent.parent.certificates.CommonName.indexOf('.') != -1) && (obj.args.lanonly !== true) && (obj.args.nousers !== true)); if (twoStepLoginSupported) { // Perform the one time password setup const otplib = require('otplib'); @@ -1756,7 +1756,7 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use case 'otpauth-clear': { // Check is 2-step login is supported - const twoStepLoginSupported = ((domain.auth != 'sspi') && (obj.parent.parent.certificates.CommonName != 'un-configured') && (obj.args.lanonly !== true) && (obj.args.nousers !== true)); + const twoStepLoginSupported = ((domain.auth != 'sspi') && (obj.parent.parent.certificates.CommonName.indexOf('.') != -1) && (obj.args.lanonly !== true) && (obj.args.nousers !== true)); if (twoStepLoginSupported) { // Clear the one time password secret if (user.otpsecret) { @@ -1775,7 +1775,7 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use case 'otpauth-getpasswords': { // Check is 2-step login is supported - const twoStepLoginSupported = ((domain.auth != 'sspi') && (obj.parent.parent.certificates.CommonName != 'un-configured') && (obj.args.lanonly !== true) && (obj.args.nousers !== true)); + const twoStepLoginSupported = ((domain.auth != 'sspi') && (obj.parent.parent.certificates.CommonName.indexOf('.') != -1) && (obj.args.lanonly !== true) && (obj.args.nousers !== true)); if (twoStepLoginSupported == false) break; // Perform a sub-action @@ -1806,7 +1806,7 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use case 'otp-hkey-get': { // Check is 2-step login is supported - const twoStepLoginSupported = ((domain.auth != 'sspi') && (obj.parent.parent.certificates.CommonName != 'un-configured') && (obj.args.lanonly !== true) && (obj.args.nousers !== true)); + const twoStepLoginSupported = ((domain.auth != 'sspi') && (obj.parent.parent.certificates.CommonName.indexOf('.') != -1) && (obj.args.lanonly !== true) && (obj.args.nousers !== true)); if (twoStepLoginSupported == false) break; // Send back the list of keys we have, just send the list of names and index @@ -1819,7 +1819,7 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use case 'otp-hkey-remove': { // Check is 2-step login is supported - const twoStepLoginSupported = ((domain.auth != 'sspi') && (obj.parent.parent.certificates.CommonName != 'un-configured') && (obj.args.lanonly !== true) && (obj.args.nousers !== true)); + const twoStepLoginSupported = ((domain.auth != 'sspi') && (obj.parent.parent.certificates.CommonName.indexOf('.') != -1) && (obj.args.lanonly !== true) && (obj.args.nousers !== true)); if (twoStepLoginSupported == false || command.index == null) break; // Remove a key @@ -1839,7 +1839,7 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use // Yubico API id and signature key can be requested from https://upgrade.yubico.com/getapikey/ // Check is 2-step login is supported - const twoStepLoginSupported = ((domain.auth != 'sspi') && (obj.parent.parent.certificates.CommonName != 'un-configured') && (obj.args.lanonly !== true) && (obj.args.nousers !== true)); + const twoStepLoginSupported = ((domain.auth != 'sspi') && (obj.parent.parent.certificates.CommonName.indexOf('.') != -1) && (obj.args.lanonly !== true) && (obj.args.nousers !== true)); if ((twoStepLoginSupported == false) || (typeof command.otp != 'string')) { ws.send(JSON.stringify({ action: 'otp-hkey-yubikey-add', result: false, name: command.name })); break; @@ -1885,7 +1885,7 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use case 'otp-hkey-setup-request': { // Check is 2-step login is supported - const twoStepLoginSupported = ((domain.auth != 'sspi') && (obj.parent.parent.certificates.CommonName != 'un-configured') && (obj.args.lanonly !== true) && (obj.args.nousers !== true)); + const twoStepLoginSupported = ((domain.auth != 'sspi') && (obj.parent.parent.certificates.CommonName.indexOf('.') != -1) && (obj.args.lanonly !== true) && (obj.args.nousers !== true)); if (twoStepLoginSupported == false) break; // Build list of known keys @@ -1908,7 +1908,7 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use case 'otp-hkey-setup-response': { // Check is 2-step login is supported - const twoStepLoginSupported = ((domain.auth != 'sspi') && (obj.parent.parent.certificates.CommonName != 'un-configured') && (obj.args.lanonly !== true) && (obj.args.nousers !== true)); + const twoStepLoginSupported = ((domain.auth != 'sspi') && (obj.parent.parent.certificates.CommonName.indexOf('.') != -1) && (obj.args.lanonly !== true) && (obj.args.nousers !== true)); if ((twoStepLoginSupported == false) || (command.response == null) || (command.name == null) || (obj.hardwareKeyRegistrationRequest == null)) break; // Check the key registration request diff --git a/mpsserver.js b/mpsserver.js index cd2b721c..b72bf5b4 100644 --- a/mpsserver.js +++ b/mpsserver.js @@ -157,19 +157,19 @@ module.exports.CreateMpsServer = function (parent, db, args, certificates) { // Event the new node var device2 = common.Clone(device); - if (device2.intelamt.pass != undefined) delete device2.intelamt.pass; // Remove the Intel AMT password before eventing this. + if (device2.intelamt.pass != null) delete device2.intelamt.pass; // Remove the Intel AMT password before eventing this. var change = 'CIRA added device ' + socket.tag.name + ' to mesh ' + mesh.name; obj.parent.DispatchEvent(['*', socket.tag.meshid], obj, { etype: 'node', action: 'addnode', node: device2, msg: change, domain: domainid }); } else { // New CIRA connection for unknown node, disconnect. - console.log('CIRA connection for unknown node with incorrect mesh type. meshid: ' + socket.tag.meshid); + console.log('CIRA connection for unknown node with incorrect group type. meshid: ' + socket.tag.meshid); socket.end(); return; } } else { // Node is already present var node = nodes[0]; - if ((node.intelamt != undefined) && (node.intelamt.state == 2)) { socket.tag.host = node.intelamt.host; } + if ((node.intelamt != null) && (node.intelamt.state == 2)) { socket.tag.host = node.intelamt.host; } } // Add the connection to the MPS connection list @@ -177,7 +177,7 @@ module.exports.CreateMpsServer = function (parent, db, args, certificates) { obj.parent.SetConnectivityState(socket.tag.meshid, socket.tag.nodeid, socket.tag.connectTime, 2, 7); // TODO: Right now report power state as "present" (7) until we can poll. }); } else { - console.log('ERROR: Intel AMT CIRA connected with unknown meshid: ' + socket.tag.meshid); + console.log('ERROR: Intel AMT CIRA connected with unknown groupid: ' + socket.tag.meshid); socket.end(); return; } @@ -242,7 +242,7 @@ module.exports.CreateMpsServer = function (parent, db, args, certificates) { Debug(3, 'MPS:USERAUTH_REQUEST user=' + username + ', service=' + serviceName + ', method=' + methodName + ', password=' + password); // Check the CIRA password - if ((args.mpspass != undefined) && (password != args.mpspass)) { Debug(1, 'MPS:Incorrect password', username, password); SendUserAuthFail(socket); return -1; } + if ((args.mpspass != null) && (password != args.mpspass)) { Debug(1, 'MPS:Incorrect password', username, password); SendUserAuthFail(socket); return -1; } // Check the CIRA username, which should be the start of the MeshID. if (usernameLen != 16) { Debug(1, 'MPS:Username length not 16', username, password); SendUserAuthFail(socket); return -1; } @@ -269,19 +269,19 @@ module.exports.CreateMpsServer = function (parent, db, args, certificates) { // Event the new node var device2 = common.Clone(device); - if (device2.intelamt.pass != undefined) delete device2.intelamt.pass; // Remove the Intel AMT password before eventing this. - var change = 'CIRA added device ' + socket.tag.name + ' to mesh ' + mesh.name; + if (device2.intelamt.pass != null) delete device2.intelamt.pass; // Remove the Intel AMT password before eventing this. + var change = 'CIRA added device ' + socket.tag.name + ' to group ' + mesh.name; obj.parent.DispatchEvent(['*', socket.tag.meshid], obj, { etype: 'node', action: 'addnode', node: device2, msg: change, domain: mesh.domain }); } else { // New CIRA connection for unknown node, disconnect. - console.log('CIRA connection for unknown node with incorrect mesh type. meshid: ' + socket.tag.meshid); + console.log('CIRA connection for unknown node with incorrect group type. meshid: ' + socket.tag.meshid); socket.end(); return; } } else { // Node is already present var node = nodes[0]; - if ((node.intelamt != undefined) && (node.intelamt.state == 2)) { socket.tag.host = node.intelamt.host; } + if ((node.intelamt != null) && (node.intelamt.state == 2)) { socket.tag.host = node.intelamt.host; } } // Add the connection to the MPS connection list @@ -294,14 +294,14 @@ module.exports.CreateMpsServer = function (parent, db, args, certificates) { obj.db.getAmtUuidNode(mesh._id, socket.tag.SystemId, function (err, nodes) { // TODO: May need to optimize this request with indexes if (nodes.length == 0) { // New CIRA connection for unknown node, disconnect. - console.log('CIRA connection for unknown node. meshid: ' + mesh._id + ', uuid: ' + systemid); + console.log('CIRA connection for unknown node. groupid: ' + mesh._id + ', uuid: ' + systemid); socket.end(); return; } // Node is present var node = nodes[0]; - if ((node.intelamt != undefined) && (node.intelamt.state == 2)) { socket.tag.host = node.intelamt.host; } + if ((node.intelamt != null) && (node.intelamt.state == 2)) { socket.tag.host = node.intelamt.host; } socket.tag.nodeid = node._id; socket.tag.meshid = mesh._id; socket.tag.connectTime = Date.now(); @@ -313,7 +313,7 @@ module.exports.CreateMpsServer = function (parent, db, args, certificates) { }); } else { // Unknown mesh type // New CIRA connection for unknown node, disconnect. - console.log('CIRA connection to a unknown mesh type. meshid: ' + socket.tag.meshid); + console.log('CIRA connection to a unknown group type. groupid: ' + socket.tag.meshid); socket.end(); return; } @@ -341,9 +341,8 @@ module.exports.CreateMpsServer = function (parent, db, args, certificates) { if (len < 14 + requestLen + addrLen) return 0; var addr = data.substring(10 + requestLen, 10 + requestLen + addrLen); var port = common.ReadInt(data, 10 + requestLen + addrLen); - if (addr == '') addr = undefined; Debug(2, 'MPS:GLOBAL_REQUEST', request, addr + ':' + port); - ChangeHostname(socket, addr); + ChangeHostname(socket, addr, socket.tag.SystemId); if (socket.tag.boundPorts.indexOf(port) == -1) { socket.tag.boundPorts.push(port); } SendTcpForwardSuccessReply(socket, port); return 14 + requestLen + addrLen; @@ -428,7 +427,7 @@ module.exports.CreateMpsServer = function (parent, db, args, certificates) { var WindowSize = common.ReadInt(data, 9); socket.tag.activetunnels++; var cirachannel = socket.tag.channels[RecipientChannel]; - if (cirachannel == undefined) { /*console.log("MPS Error in CHANNEL_OPEN_CONFIRMATION: Unable to find channelid " + RecipientChannel);*/ return 17; } + if (cirachannel == null) { /*console.log("MPS Error in CHANNEL_OPEN_CONFIRMATION: Unable to find channelid " + RecipientChannel);*/ return 17; } cirachannel.amtchannelid = SenderChannel; cirachannel.sendcredits = cirachannel.amtCiraWindow = WindowSize; Debug(3, 'MPS:CHANNEL_OPEN_CONFIRMATION', RecipientChannel, SenderChannel, WindowSize); @@ -438,7 +437,7 @@ module.exports.CreateMpsServer = function (parent, db, args, certificates) { } else { cirachannel.state = 2; // Send any pending data - if (cirachannel.sendBuffer != undefined) { + if (cirachannel.sendBuffer != null) { if (cirachannel.sendBuffer.length <= cirachannel.sendcredits) { // Send the entire pending buffer SendChannelData(cirachannel.socket, cirachannel.amtchannelid, cirachannel.sendBuffer); @@ -464,7 +463,7 @@ module.exports.CreateMpsServer = function (parent, db, args, certificates) { var ReasonCode = common.ReadInt(data, 5); Debug(3, 'MPS:CHANNEL_OPEN_FAILURE', RecipientChannel, ReasonCode); var cirachannel = socket.tag.channels[RecipientChannel]; - if (cirachannel == undefined) { console.log("MPS Error in CHANNEL_OPEN_FAILURE: Unable to find channelid " + RecipientChannel); return 17; } + if (cirachannel == null) { console.log("MPS Error in CHANNEL_OPEN_FAILURE: Unable to find channelid " + RecipientChannel); return 17; } if (cirachannel.state > 0) { cirachannel.state = 0; if (cirachannel.onStateChange) { cirachannel.onStateChange(cirachannel, cirachannel.state); } @@ -478,7 +477,7 @@ module.exports.CreateMpsServer = function (parent, db, args, certificates) { var RecipientChannel = common.ReadInt(data, 1); Debug(3, 'MPS:CHANNEL_CLOSE', RecipientChannel); var cirachannel = socket.tag.channels[RecipientChannel]; - if (cirachannel == undefined) { console.log("MPS Error in CHANNEL_CLOSE: Unable to find channelid " + RecipientChannel); return 5; } + if (cirachannel == null) { console.log("MPS Error in CHANNEL_CLOSE: Unable to find channelid " + RecipientChannel); return 5; } socket.tag.activetunnels--; if (cirachannel.state > 0) { cirachannel.state = 0; @@ -493,10 +492,10 @@ module.exports.CreateMpsServer = function (parent, db, args, certificates) { var RecipientChannel = common.ReadInt(data, 1); var ByteToAdd = common.ReadInt(data, 5); var cirachannel = socket.tag.channels[RecipientChannel]; - if (cirachannel == undefined) { console.log("MPS Error in CHANNEL_WINDOW_ADJUST: Unable to find channelid " + RecipientChannel); return 9; } + if (cirachannel == null) { console.log("MPS Error in CHANNEL_WINDOW_ADJUST: Unable to find channelid " + RecipientChannel); return 9; } cirachannel.sendcredits += ByteToAdd; Debug(3, 'MPS:CHANNEL_WINDOW_ADJUST', RecipientChannel, ByteToAdd, cirachannel.sendcredits); - if (cirachannel.state == 2 && cirachannel.sendBuffer != undefined) { + if (cirachannel.state == 2 && cirachannel.sendBuffer != null) { // Compute how much data we can send if (cirachannel.sendBuffer.length <= cirachannel.sendcredits) { // Send the entire pending buffer @@ -521,7 +520,7 @@ module.exports.CreateMpsServer = function (parent, db, args, certificates) { if (len < (9 + LengthOfData)) return 0; Debug(4, 'MPS:CHANNEL_DATA', RecipientChannel, LengthOfData); var cirachannel = socket.tag.channels[RecipientChannel]; - if (cirachannel == undefined) { console.log("MPS Error in CHANNEL_DATA: Unable to find channelid " + RecipientChannel); return 9 + LengthOfData; } + if (cirachannel == null) { console.log("MPS Error in CHANNEL_DATA: Unable to find channelid " + RecipientChannel); return 9 + LengthOfData; } cirachannel.amtpendingcredits += LengthOfData; if (cirachannel.onData) cirachannel.onData(cirachannel, data.substring(9, 9 + LengthOfData)); if (cirachannel.amtpendingcredits > (cirachannel.ciraWindow / 2)) { @@ -600,7 +599,7 @@ module.exports.CreateMpsServer = function (parent, db, args, certificates) { function SendChannelOpen(socket, direct, channelid, windowsize, target, targetport, source, sourceport) { var connectionType = ((direct == true) ? "direct-tcpip" : "forwarded-tcpip"); - if ((target == null) || (target == undefined)) target = ''; // TODO: Reports of target being undefined that causes target.length to fail. This is a hack. + if ((target == null) || (target == null)) target = ''; // TODO: Reports of target being undefined that causes target.length to fail. This is a hack. Write(socket, String.fromCharCode(APFProtocol.CHANNEL_OPEN) + common.IntToStr(connectionType.length) + connectionType + common.IntToStr(channelid) + common.IntToStr(windowsize) + common.IntToStr(-1) + common.IntToStr(target.length) + target + common.IntToStr(targetport) + common.IntToStr(source.length) + source + common.IntToStr(sourceport)); } @@ -650,9 +649,9 @@ module.exports.CreateMpsServer = function (parent, db, args, certificates) { // This function writes data to this CIRA channel cirachannel.write = function (data) { if (cirachannel.state == 0) return false; - if (cirachannel.state == 1 || cirachannel.sendcredits == 0 || cirachannel.sendBuffer != undefined) { + if (cirachannel.state == 1 || cirachannel.sendcredits == 0 || cirachannel.sendBuffer != null) { // Channel is connected, but we are out of credits. Add the data to the outbound buffer. - if (cirachannel.sendBuffer == undefined) { cirachannel.sendBuffer = data; } else { cirachannel.sendBuffer += data; } + if (cirachannel.sendBuffer == null) { cirachannel.sendBuffer = data; } else { cirachannel.sendBuffer += data; } return true; } // Compute how much data we can send @@ -683,7 +682,7 @@ module.exports.CreateMpsServer = function (parent, db, args, certificates) { return cirachannel; }; - function ChangeHostname(socket, host) { + function ChangeHostname(socket, host, systemid) { if (socket.tag.host === host) return; // Nothing to change socket.tag.host = host; @@ -693,7 +692,7 @@ module.exports.CreateMpsServer = function (parent, db, args, certificates) { var node = nodes[0]; // See if any changes need to be made - if ((node.intelamt != undefined) && (node.intelamt.host == host) && (node.name != '') && (node.intelamt.state == 2)) return; + if ((node.intelamt != null) && (node.intelamt.host == host) && (node.name != null) && (node.name != '') && (node.intelamt.state == 2)) return; // Get the mesh for this device obj.db.Get(node.meshid, function (err, meshes) { @@ -705,14 +704,15 @@ module.exports.CreateMpsServer = function (parent, db, args, certificates) { event.msg = +": "; // Make the change & save - if (node.intelamt == undefined) node.intelamt = {}; + if (node.intelamt == null) node.intelamt = {}; node.intelamt.host = host; node.intelamt.state = 2; // Set the state to activated, since this is pretty obvious, we have a CIRA connection. - if (node.name == '') { node.name = host.split('.')[0]; } + if (((node.name == null) || (node.name == '')) && (host != null) && (host != '')) { node.name = host.split('.')[0]; } // If this system has no name, set it to the start of the domain name. + if (((node.name == null) || (node.name == '')) && (systemid != null)) { node.name = systemid; } // If this system still has no name, set it to the system GUID. obj.db.Set(node); // Event the node change - event.msg = 'CIRA changed device ' + node.name + ' from mesh ' + mesh.name + ': ' + changes.join(', '); + event.msg = 'CIRA changed device ' + node.name + ' from group ' + mesh.name + ': ' + changes.join(', '); var node2 = common.Clone(node); if (node2.intelamt && node2.intelamt.pass) delete node2.intelamt.pass; // Remove the Intel AMT password before eventing this. event.node = node2; diff --git a/package.json b/package.json index 87a720ef..f61821b6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "meshcentral", - "version": "0.2.9-o", + "version": "0.2.9-p", "keywords": [ "Remote Management", "Intel AMT", diff --git a/redirserver.js b/redirserver.js index d96d8bf1..b1161d83 100644 --- a/redirserver.js +++ b/redirserver.js @@ -34,7 +34,7 @@ module.exports.CreateRedirServer = function (parent, db, args, func) { var host = req.headers.host; if (obj.certificates != null) { host = obj.certificates.CommonName; - if ((obj.certificates.CommonName == "sample.org") || (obj.certificates.CommonName == "un-configured")) { host = req.headers.host; } + if (obj.certificates.CommonName.indexOf('.') == -1) { host = req.headers.host; } } var httpsPort = ((obj.args.aliasport == null) ? obj.args.port : obj.args.aliasport); // Use HTTPS alias port is specified if (req.headers && req.headers.host && (req.headers.host.split(":")[0].toLowerCase() == "localhost")) { diff --git a/views/default.handlebars b/views/default.handlebars index 266f3441..66f372f9 100644 --- a/views/default.handlebars +++ b/views/default.handlebars @@ -2516,7 +2516,7 @@ setDialogMode(2, "Add Mesh Agent", 2, null, x, 'fileDownload'); var servername = serverinfo.name; - if ((servername == 'un-configured') || ((features & 2) != 0)) { servername = window.location.hostname; } // If the server name is not set or it's in LAN-only mode, use the URL hostname as server name. + if ((servername.indexOf('.') == -1) || ((features & 2) != 0)) { servername = window.location.hostname; } // If the server name is not set or it's in LAN-only mode, use the URL hostname as server name. var noProxy = ((features & 0x2000) != 0)?'--no-proxy ':''; // Server asked that agent be installed to preferably not use a HTTP proxy. if (serverinfo.https == true) { diff --git a/webserver.js b/webserver.js index 8f776aa9..098e3146 100644 --- a/webserver.js +++ b/webserver.js @@ -326,7 +326,7 @@ module.exports.CreateWebServer = function (parent, db, args, certificates) { // Check the 2-step auth token function checkUserOneTimePassword(req, domain, user, token, hwtoken, func) { - const twoStepLoginSupported = ((domain.auth != 'sspi') && (obj.parent.certificates.CommonName != 'un-configured') && (obj.args.nousers !== true)); + const twoStepLoginSupported = ((domain.auth != 'sspi') && (obj.parent.certificates.CommonName.indexOf('.') != -1) && (obj.args.nousers !== true)); if (twoStepLoginSupported == false) { func(true); return; }; // Check U2F hardware key @@ -1073,13 +1073,13 @@ module.exports.CreateWebServer = function (parent, db, args, certificates) { if (domain.userQuota == -1) { features += 0x00000008; } // No server files mode if (obj.args.mpstlsoffload) { features += 0x00000010; } // No mutual-auth CIRA if ((parent.config != null) && (parent.config.settings != null) && (parent.config.settings.allowframing == true)) { features += 0x00000020; } // Allow site within iframe - if ((obj.parent.mailserver != null) && (obj.parent.certificates.CommonName != null) && (obj.parent.certificates.CommonName != 'un-configured') && (obj.args.lanonly != true)) { features += 0x00000040; } // Email invites + if ((obj.parent.mailserver != null) && (obj.parent.certificates.CommonName != null) && (obj.parent.certificates.CommonName.indexOf('.') != -1) && (obj.args.lanonly != true)) { features += 0x00000040; } // Email invites if (obj.args.webrtc == true) { features += 0x00000080; } // Enable WebRTC (Default false for now) if (obj.args.clickonce !== false) { features += 0x00000100; } // Enable ClickOnce (Default true) if (obj.args.allowhighqualitydesktop == true) { features += 0x00000200; } // Enable AllowHighQualityDesktop (Default false) if (obj.args.lanonly == true || obj.args.mpsport == 0) { features += 0x00000400; } // No CIRA if ((obj.parent.serverSelfWriteAllowed == true) && (user != null) && (user.siteadmin == 0xFFFFFFFF)) { features += 0x00000800; } // Server can self-write (Allows self-update) - if ((domain.auth != 'sspi') && (obj.parent.certificates.CommonName != 'un-configured') && (obj.args.nousers !== true)) { features += 0x00001000; } // 2-step login supported + if ((domain.auth != 'sspi') && (obj.parent.certificates.CommonName.indexOf('.') != -1) && (obj.args.nousers !== true)) { features += 0x00001000; } // 2-step login supported if (domain.agentnoproxy === true) { features += 0x00002000; } // Indicates that agents should be installed without using a HTTP proxy if (domain.yubikey && domain.yubikey.id && domain.yubikey.secret) { features += 0x00004000; } // Indicates Yubikey support if (domain.geolocation == true) { features += 0x00008000; } // Enable geo-location features @@ -1188,14 +1188,14 @@ module.exports.CreateWebServer = function (parent, db, args, certificates) { if (obj.args.tlsoffload != null) return true; // We are using TLS offload, a real cert is likely used. if (obj.parent.config.letsencrypt != null) return true; // We are using Let's Encrypt, real cert in use. if (obj.certificates.WebIssuer.indexOf('MeshCentralRoot-') == 0) return false; // Our cert is issued by self-signed cert. - if (obj.certificates.CommonName == 'un-configured') return false; // Out cert is named with a fake name + if (obj.certificates.CommonName.indexOf('.') == -1) return false; // Our cert is named with a fake name return true; // This is a guess } // Get the link to the root certificate if needed function getRootCertLink() { // Check if the HTTPS certificate is issued from MeshCentralRoot, if so, add download link to root certificate. - if ((obj.args.notls == null) && (obj.args.tlsoffload == null) && (obj.parent.config.letsencrypt == null) && (obj.tlsSniCredentials == null) && (obj.certificates.WebIssuer.indexOf('MeshCentralRoot-') == 0) && (obj.certificates.CommonName != 'un-configured')) { return 'Root Certificate'; } + if ((obj.args.notls == null) && (obj.args.tlsoffload == null) && (obj.parent.config.letsencrypt == null) && (obj.tlsSniCredentials == null) && (obj.certificates.WebIssuer.indexOf('MeshCentralRoot-') == 0) && (obj.certificates.CommonName.indexOf('.') != -1)) { return 'Root Certificate'; } return ''; }