From 6561386c0175bfe28a0cee13eedaa86572a1bd56 Mon Sep 17 00:00:00 2001 From: dinger1986 Date: Fri, 9 Sep 2022 12:14:58 +0100 Subject: [PATCH 01/41] Update faq.md --- docs/docs/faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/faq.md b/docs/docs/faq.md index cc4a5ff7f7..7be9fed014 100644 --- a/docs/docs/faq.md +++ b/docs/docs/faq.md @@ -1,6 +1,6 @@ # FAQ -## Help! I've been hacked there are weird agents appearing in my Tactical RMM +## Help! I've been hacked there are weird agents appearing in my MeshCentral Console No, you haven't. From 0c1aa2379c07d9e5113b2c74879e92754aefffe4 Mon Sep 17 00:00:00 2001 From: dinger1986 Date: Fri, 9 Sep 2022 12:17:58 +0100 Subject: [PATCH 02/41] Update faq.md --- docs/docs/faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/faq.md b/docs/docs/faq.md index 7be9fed014..1a067c3df3 100644 --- a/docs/docs/faq.md +++ b/docs/docs/faq.md @@ -14,7 +14,7 @@ No, you haven't. 4. They ran it against their virtualization testing cluster. -5. You allow anyone to connect to your rmm server (you should look into techniques to hide your server from the internet). +5. You allow anyone to connect to your server (you should look into techniques to hide your server from the internet). 6. Here are some examples of what that looks like. From 0b53ad32730b12d63a75439644c849ad41ba38c6 Mon Sep 17 00:00:00 2001 From: dinger1986 Date: Fri, 9 Sep 2022 12:19:18 +0100 Subject: [PATCH 03/41] Rename docs/docs/faq.md to docs/docs/other/faq.md --- docs/docs/{ => other}/faq.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename docs/docs/{ => other}/faq.md (100%) diff --git a/docs/docs/faq.md b/docs/docs/other/faq.md similarity index 100% rename from docs/docs/faq.md rename to docs/docs/other/faq.md From 982b8aa5c4545549a0acbb8547e27f0be22765c2 Mon Sep 17 00:00:00 2001 From: dinger1986 Date: Fri, 9 Sep 2022 12:20:53 +0100 Subject: [PATCH 04/41] Delete faq_av_option1.png --- docs/docs/images/faq_av_option1.png | Bin 8757 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 docs/docs/images/faq_av_option1.png diff --git a/docs/docs/images/faq_av_option1.png b/docs/docs/images/faq_av_option1.png deleted file mode 100644 index 718bae37551723a07883cc2300b17f22871d6443..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8757 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 i{eQCGU0imcX=^U%E(J&d@2?(w)|c%s6 Date: Fri, 9 Sep 2022 12:21:12 +0100 Subject: [PATCH 05/41] Add files via upload --- docs/docs/other/faq_av_option1.png | Bin 0 -> 8757 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/docs/other/faq_av_option1.png diff --git a/docs/docs/other/faq_av_option1.png b/docs/docs/other/faq_av_option1.png new file mode 100644 index 0000000000000000000000000000000000000000..718bae37551723a07883cc2300b17f22871d6443 GIT binary patch literal 8757 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 i{eQCGU0imcX=^U%E(J&d@2?(w)|c%s6 Date: Fri, 9 Sep 2022 12:21:41 +0100 Subject: [PATCH 06/41] Rename docs/docs/tipsntricks.md to docs/docs/other/tipsntricks.md --- docs/docs/{ => other}/tipsntricks.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename docs/docs/{ => other}/tipsntricks.md (100%) diff --git a/docs/docs/tipsntricks.md b/docs/docs/other/tipsntricks.md similarity index 100% rename from docs/docs/tipsntricks.md rename to docs/docs/other/tipsntricks.md From 474ee853efd53a83c4afbd79becb875ff18bd602 Mon Sep 17 00:00:00 2001 From: dinger1986 Date: Fri, 9 Sep 2022 12:21:59 +0100 Subject: [PATCH 07/41] Delete faq_av_option1.png --- docs/docs/other/faq_av_option1.png | Bin 8757 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 docs/docs/other/faq_av_option1.png diff --git a/docs/docs/other/faq_av_option1.png b/docs/docs/other/faq_av_option1.png deleted file mode 100644 index 718bae37551723a07883cc2300b17f22871d6443..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8757 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 i{eQCGU0imcX=^U%E(J&d@2?(w)|c%s6 Date: Fri, 9 Sep 2022 12:22:10 +0100 Subject: [PATCH 08/41] Add files via upload --- docs/docs/other/images/faq_av_option1.png | Bin 0 -> 8757 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/docs/other/images/faq_av_option1.png diff --git a/docs/docs/other/images/faq_av_option1.png b/docs/docs/other/images/faq_av_option1.png new file mode 100644 index 0000000000000000000000000000000000000000..718bae37551723a07883cc2300b17f22871d6443 GIT binary patch literal 8757 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 i{eQCGU0imcX=^U%E(J&d@2?(w)|c%s6 Date: Fri, 9 Sep 2022 14:50:08 +0100 Subject: [PATCH 09/41] Rename docs/docs/other/faq.md to docs/docs/meshcentral/faq.md --- docs/docs/{other => meshcentral}/faq.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename docs/docs/{other => meshcentral}/faq.md (100%) diff --git a/docs/docs/other/faq.md b/docs/docs/meshcentral/faq.md similarity index 100% rename from docs/docs/other/faq.md rename to docs/docs/meshcentral/faq.md From e0192acc6fc3c11057fa2eca6c1199c584b7eb52 Mon Sep 17 00:00:00 2001 From: dinger1986 Date: Fri, 9 Sep 2022 14:50:30 +0100 Subject: [PATCH 10/41] Rename docs/docs/other/tipsntricks.md to docs/docs/meshcentral/tipsntricks.md --- docs/docs/{other => meshcentral}/tipsntricks.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename docs/docs/{other => meshcentral}/tipsntricks.md (100%) diff --git a/docs/docs/other/tipsntricks.md b/docs/docs/meshcentral/tipsntricks.md similarity index 100% rename from docs/docs/other/tipsntricks.md rename to docs/docs/meshcentral/tipsntricks.md From 1ebb0b50ec440e47484ac62e7676554527e9e561 Mon Sep 17 00:00:00 2001 From: dinger1986 Date: Fri, 9 Sep 2022 14:51:00 +0100 Subject: [PATCH 11/41] Delete faq_av_option1.png --- docs/docs/other/images/faq_av_option1.png | Bin 8757 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 docs/docs/other/images/faq_av_option1.png diff --git a/docs/docs/other/images/faq_av_option1.png b/docs/docs/other/images/faq_av_option1.png deleted file mode 100644 index 718bae37551723a07883cc2300b17f22871d6443..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8757 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 i{eQCGU0imcX=^U%E(J&d@2?(w)|c%s6 Date: Fri, 9 Sep 2022 14:51:21 +0100 Subject: [PATCH 12/41] Add files via upload --- docs/docs/meshcentral/images/faq_av_option1.png | Bin 0 -> 8757 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/docs/meshcentral/images/faq_av_option1.png diff --git a/docs/docs/meshcentral/images/faq_av_option1.png b/docs/docs/meshcentral/images/faq_av_option1.png new file mode 100644 index 0000000000000000000000000000000000000000..718bae37551723a07883cc2300b17f22871d6443 GIT binary patch literal 8757 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 i{eQCGU0imcX=^U%E(J&d@2?(w)|c%s6 Date: Fri, 9 Sep 2022 14:55:14 +0100 Subject: [PATCH 13/41] Update mkdocs.yml --- docs/mkdocs.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml index daa840e812..ac35b1d357 100644 --- a/docs/mkdocs.yml +++ b/docs/mkdocs.yml @@ -17,7 +17,9 @@ nav: - 'Plugins': 'meshcentral/plugins.md' - 'Security': 'meshcentral/security.md' - 'Tokens': 'meshcentral/tokens.md' - + - 'FAQ': 'meshcentral/faq.md' + - 'Tips n Tricks': 'meshcentral/tipsntricks.md' + - Design and Architecture: - design/index.md From b533f7599370adfbadc45410c7d16b688797c131 Mon Sep 17 00:00:00 2001 From: dinger1986 Date: Fri, 9 Sep 2022 15:23:58 +0100 Subject: [PATCH 14/41] Create SSLnletsencrypt.md --- docs/docs/meshcentral/SSLnletsencrypt.md | 27 ++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 docs/docs/meshcentral/SSLnletsencrypt.md diff --git a/docs/docs/meshcentral/SSLnletsencrypt.md b/docs/docs/meshcentral/SSLnletsencrypt.md new file mode 100644 index 0000000000..b99cc1b22c --- /dev/null +++ b/docs/docs/meshcentral/SSLnletsencrypt.md @@ -0,0 +1,27 @@ +# SSL/Letsencrypt + +## Help! I've been hacked there are weird agents appearing in my MeshCentral Console + +No, you haven't. + +1. Your agent installer was scanned by an antivirus. + +2. It didn't recognize the exe. + +3. You have the option enabled to submit unknown applications for analysis. + + ![AV Option1](images/faq_av_option1.png) + +4. They ran it against their virtualization testing cluster. + +5. You allow anyone to connect to your server (you should look into techniques to hide your server from the internet). + +6. Here are some examples of what that looks like. + +# Can't login on server after first setup + +You're sure you're typing in everything right, giving it 2FA code and can't login + +[TOTP](https://en.wikipedia.org/wiki/Time-based_one-time_password) is time sensitive, check your time/NTP and make sure it's right (on server and TOTP app device)! :) + +![](images/2022-08-04-18-19-19.png) From 808345eb3fbaa72d84c11b8fda64c68446ed9da0 Mon Sep 17 00:00:00 2001 From: dinger1986 Date: Fri, 9 Sep 2022 15:46:27 +0100 Subject: [PATCH 15/41] Update SSLnletsencrypt.md --- docs/docs/meshcentral/SSLnletsencrypt.md | 28 +++++++----------------- 1 file changed, 8 insertions(+), 20 deletions(-) diff --git a/docs/docs/meshcentral/SSLnletsencrypt.md b/docs/docs/meshcentral/SSLnletsencrypt.md index b99cc1b22c..b928420a28 100644 --- a/docs/docs/meshcentral/SSLnletsencrypt.md +++ b/docs/docs/meshcentral/SSLnletsencrypt.md @@ -1,27 +1,15 @@ # SSL/Letsencrypt -## Help! I've been hacked there are weird agents appearing in my MeshCentral Console +## MeshCentral supports SSL using self generated certs, your own certs or Letsencrypt -No, you haven't. +### To enable Letsencrypt do the following in your config.json file: -1. Your agent installer was scanned by an antivirus. +1. Under Settings, change `"_redirPort"` to `"redirPort"` and `"_cert" to `"cert": "yourdomain.com", +2. Under letsencrypt change `"_letsencrypt"` to `"letsencrypt"`, enter your email address at `"email"` and yourdomain.com for `"names"` and change `"production"` to true. +3. Restart meshcentral and it will get a cert for you, the process will need to restart to apply the cert. -2. It didn't recognize the exe. +### Useful resources/troubleshooting -3. You have the option enabled to submit unknown applications for analysis. +To check letsencrypt is working properly please use https://letsdebug.net/ - ![AV Option1](images/faq_av_option1.png) - -4. They ran it against their virtualization testing cluster. - -5. You allow anyone to connect to your server (you should look into techniques to hide your server from the internet). - -6. Here are some examples of what that looks like. - -# Can't login on server after first setup - -You're sure you're typing in everything right, giving it 2FA code and can't login - -[TOTP](https://en.wikipedia.org/wiki/Time-based_one-time_password) is time sensitive, check your time/NTP and make sure it's right (on server and TOTP app device)! :) - -![](images/2022-08-04-18-19-19.png) +Also make sure you have port 80 open and pointing to your meshcentral server, IT WILL NOT work if port 80 isnt open and it HAS to be port 80. From d42fe91eca24c8df615da620dde45225b6a034f0 Mon Sep 17 00:00:00 2001 From: dinger1986 Date: Fri, 9 Sep 2022 15:48:37 +0100 Subject: [PATCH 16/41] Update mkdocs.yml --- docs/mkdocs.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml index ac35b1d357..23285be2da 100644 --- a/docs/mkdocs.yml +++ b/docs/mkdocs.yml @@ -15,6 +15,7 @@ nav: - 'Debugging': 'meshcentral/debugging.md' - 'Device Tabs': 'meshcentral/devicetabs.md' - 'Plugins': 'meshcentral/plugins.md' + - 'SSL': 'meshcentral/SSLnletsencrypt.md' - 'Security': 'meshcentral/security.md' - 'Tokens': 'meshcentral/tokens.md' - 'FAQ': 'meshcentral/faq.md' From 638825eb55ccb1da869b942f1a855d5bf7c2b816 Mon Sep 17 00:00:00 2001 From: dinger1986 Date: Fri, 9 Sep 2022 16:01:52 +0100 Subject: [PATCH 17/41] Update SSLnletsencrypt.md --- docs/docs/meshcentral/SSLnletsencrypt.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/docs/meshcentral/SSLnletsencrypt.md b/docs/docs/meshcentral/SSLnletsencrypt.md index b928420a28..5be7cfbe88 100644 --- a/docs/docs/meshcentral/SSLnletsencrypt.md +++ b/docs/docs/meshcentral/SSLnletsencrypt.md @@ -13,3 +13,5 @@ To check letsencrypt is working properly please use https://letsdebug.net/ Also make sure you have port 80 open and pointing to your meshcentral server, IT WILL NOT work if port 80 isnt open and it HAS to be port 80. + +You can read more about Letsencrypt and meshcentral [[https://ylianst.github.io/MeshCentral/meshcentral/#lets-encrypt-support]] here From e7602f424a3fd757e7c583590a05f05094e810b8 Mon Sep 17 00:00:00 2001 From: dinger1986 Date: Fri, 9 Sep 2022 16:03:08 +0100 Subject: [PATCH 18/41] Update SSLnletsencrypt.md --- docs/docs/meshcentral/SSLnletsencrypt.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/meshcentral/SSLnletsencrypt.md b/docs/docs/meshcentral/SSLnletsencrypt.md index 5be7cfbe88..21676cdff9 100644 --- a/docs/docs/meshcentral/SSLnletsencrypt.md +++ b/docs/docs/meshcentral/SSLnletsencrypt.md @@ -14,4 +14,4 @@ To check letsencrypt is working properly please use https://letsdebug.net/ Also make sure you have port 80 open and pointing to your meshcentral server, IT WILL NOT work if port 80 isnt open and it HAS to be port 80. -You can read more about Letsencrypt and meshcentral [[https://ylianst.github.io/MeshCentral/meshcentral/#lets-encrypt-support]] here +You can read more about Letsencrypt and meshcentral [here] (https://ylianst.github.io/MeshCentral/meshcentral/#lets-encrypt-support). From 7a95191b0dab7c76d8f93d0de7509f931ea0d021 Mon Sep 17 00:00:00 2001 From: dinger1986 Date: Fri, 9 Sep 2022 16:03:20 +0100 Subject: [PATCH 19/41] Update SSLnletsencrypt.md --- docs/docs/meshcentral/SSLnletsencrypt.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/meshcentral/SSLnletsencrypt.md b/docs/docs/meshcentral/SSLnletsencrypt.md index 21676cdff9..03e653e831 100644 --- a/docs/docs/meshcentral/SSLnletsencrypt.md +++ b/docs/docs/meshcentral/SSLnletsencrypt.md @@ -14,4 +14,4 @@ To check letsencrypt is working properly please use https://letsdebug.net/ Also make sure you have port 80 open and pointing to your meshcentral server, IT WILL NOT work if port 80 isnt open and it HAS to be port 80. -You can read more about Letsencrypt and meshcentral [here] (https://ylianst.github.io/MeshCentral/meshcentral/#lets-encrypt-support). +You can read more about Letsencrypt and meshcentral [here](https://ylianst.github.io/MeshCentral/meshcentral/#lets-encrypt-support). From ddccca9fd8bd8d2d5c6ffbcfe5dd7ece0183caf2 Mon Sep 17 00:00:00 2001 From: dinger1986 Date: Fri, 9 Sep 2022 16:05:54 +0100 Subject: [PATCH 20/41] Update faq.md --- docs/docs/meshcentral/faq.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/docs/meshcentral/faq.md b/docs/docs/meshcentral/faq.md index 1a067c3df3..f1e6e32138 100644 --- a/docs/docs/meshcentral/faq.md +++ b/docs/docs/meshcentral/faq.md @@ -25,3 +25,8 @@ You're sure you're typing in everything right, giving it 2FA code and can't logi [TOTP](https://en.wikipedia.org/wiki/Time-based_one-time_password) is time sensitive, check your time/NTP and make sure it's right (on server and TOTP app device)! :) ![](images/2022-08-04-18-19-19.png) + +# Branding and Customisation + +You can brand and customise MeshCentral almost as much as you like without delving into the code, a few changes in the config.json file and uplaoding images can change the way your system looks. Read more [here](https://ylianst.github.io/MeshCentral/meshcentral/#branding-terms-of-use) + From 02e4ac56785a0aadab73c21f808ab80ed378bc98 Mon Sep 17 00:00:00 2001 From: silversword411 Date: Mon, 12 Sep 2022 11:04:58 -0400 Subject: [PATCH 21/41] docs - adding whitelabel and agent branding info --- docs/docs/meshcentral/index.md | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/docs/docs/meshcentral/index.md b/docs/docs/meshcentral/index.md index ba4524306d..3ebd240f5a 100644 --- a/docs/docs/meshcentral/index.md +++ b/docs/docs/meshcentral/index.md @@ -1201,7 +1201,11 @@ And taking authentication to the next step is removing the login page entirely. ## Branding & Terms of use -Once MeshCentral is setup, you may want to customize the web site with your own brand and terms of use. This is important to personalize the web site to your organization. We also want to customize the web site in such a way that updating to the latest version will keep the branding as-is. +Whitelabeling your MeshCentral installation to personalize it to your companies brand, as well as having your own terms of use is one of the first things many people do after installation. + +
+ +
### Branding @@ -1209,7 +1213,7 @@ You can put you own logo on the top of the web page. To get started, get the fil ![](images/2022-05-19-00-38-51.png) -Once done, edit the config.json file and set the following values: +Once done, edit the config.json file and set one or all of the following values: ```json "domains": { @@ -1217,6 +1221,16 @@ Once done, edit the config.json file and set the following values: "Title": "", "Title2": "", "TitlePicture": "title-sample.png", + "loginPicture": "logintitle-sample.png", + "welcomeText": "This is sample text", + "welcomePicture": "mainwelcome-04.jpg", + "welcomePictureFullScreen": true, + "siteStyle": "1", + "nightMode": "1", + "meshMessengerTitle": "Mesh Chat", + "meshMessengerPicture": "chatimage.png", + "footer": "This is a HTML string displayed at the bottom of the web page when a user is logged in.", + "loginfooter": "This is a HTML string displayed at the bottom of the web page when a user is not logged in." }, ``` @@ -1240,6 +1254,8 @@ This is great to personalize the look of the server within the web site. ### Agent Branding +You can also customize the Agent to add your own logo. + ![](images/2022-08-24-06-42-40.png) ### Terms of use From 5ba4636b9eaf3af8e23672cb861ccc7015a796b0 Mon Sep 17 00:00:00 2001 From: Bryan Roe Date: Thu, 15 Sep 2022 01:21:44 -0700 Subject: [PATCH 22/41] Added SMBIOS field 131 as AMT verification fallback if 130 is undefined --- agents/modules_meshcmd/smbios.js | 17 ++++++++++++++--- agents/modules_meshcore/smbios.js | 17 ++++++++++++++--- 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/agents/modules_meshcmd/smbios.js b/agents/modules_meshcmd/smbios.js index b149e90747..2391b8e96c 100644 --- a/agents/modules_meshcmd/smbios.js +++ b/agents/modules_meshcmd/smbios.js @@ -269,15 +269,18 @@ function SMBiosTables() this.amtInfo = function amtInfo(data) { if (!data) { throw ('no data'); } var retVal = { AMT: false }; - if (data[130] && data[130].peek().slice(0, 4).toString() == '$AMT') { + if (data[130] && data[130].peek().slice(0, 4).toString() == '$AMT') + { var amt = data[130].peek(); retVal.AMT = amt[4] ? true : false; - if (retVal.AMT) { + if (retVal.AMT) + { retVal.enabled = amt[5] ? true : false; retVal.storageRedirection = amt[6] ? true : false; retVal.serialOverLan = amt[7] ? true : false; retVal.kvm = amt[14] ? true : false; - if (data[131].peek() && data[131].peek().slice(52, 56).toString() == 'vPro') { + if (data[131].peek() && data[131].peek().slice(52, 56).toString() == 'vPro') + { var settings = data[131].peek(); if (settings[0] & 0x04) { retVal.TXT = (settings[0] & 0x08) ? true : false; } if (settings[0] & 0x10) { retVal.VMX = (settings[0] & 0x20) ? true : false; } @@ -295,6 +298,14 @@ function SMBiosTables() } } } + if (!retVal.AMT) + { + if (data[131].peek() && data[131].peek().slice(52, 56).toString() == 'vPro') + { + var settings = data[131].peek(); + if ((settings[20] & 0x08) == 0x08) { retVal.AMT = true; } + } + } return (retVal); }; this.smTableTypes = { diff --git a/agents/modules_meshcore/smbios.js b/agents/modules_meshcore/smbios.js index b149e90747..2391b8e96c 100644 --- a/agents/modules_meshcore/smbios.js +++ b/agents/modules_meshcore/smbios.js @@ -269,15 +269,18 @@ function SMBiosTables() this.amtInfo = function amtInfo(data) { if (!data) { throw ('no data'); } var retVal = { AMT: false }; - if (data[130] && data[130].peek().slice(0, 4).toString() == '$AMT') { + if (data[130] && data[130].peek().slice(0, 4).toString() == '$AMT') + { var amt = data[130].peek(); retVal.AMT = amt[4] ? true : false; - if (retVal.AMT) { + if (retVal.AMT) + { retVal.enabled = amt[5] ? true : false; retVal.storageRedirection = amt[6] ? true : false; retVal.serialOverLan = amt[7] ? true : false; retVal.kvm = amt[14] ? true : false; - if (data[131].peek() && data[131].peek().slice(52, 56).toString() == 'vPro') { + if (data[131].peek() && data[131].peek().slice(52, 56).toString() == 'vPro') + { var settings = data[131].peek(); if (settings[0] & 0x04) { retVal.TXT = (settings[0] & 0x08) ? true : false; } if (settings[0] & 0x10) { retVal.VMX = (settings[0] & 0x20) ? true : false; } @@ -295,6 +298,14 @@ function SMBiosTables() } } } + if (!retVal.AMT) + { + if (data[131].peek() && data[131].peek().slice(52, 56).toString() == 'vPro') + { + var settings = data[131].peek(); + if ((settings[20] & 0x08) == 0x08) { retVal.AMT = true; } + } + } return (retVal); }; this.smTableTypes = { From 1e7fabf511385502675974ad4f8792d9d792b60a Mon Sep 17 00:00:00 2001 From: silversword411 Date: Thu, 15 Sep 2022 17:07:00 -0400 Subject: [PATCH 23/41] docs - adding json notes to FAQ https://github.com/Ylianst/MeshCentral/issues/4551 --- docs/docs/meshcentral/faq.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/docs/docs/meshcentral/faq.md b/docs/docs/meshcentral/faq.md index f1e6e32138..421b99771c 100644 --- a/docs/docs/meshcentral/faq.md +++ b/docs/docs/meshcentral/faq.md @@ -1,5 +1,23 @@ # FAQ +## json config files + +Any item in the config.json file starting with an underscore character are ignored. + +Ignored + +```json +"_title": "MyServer" +``` + +Valid setting + +```json +"title": "MyServer" +``` + +json requires correct formatting, if in doubt copy/paste your json config into a web based format checker to make sure you have it right: + ## Help! I've been hacked there are weird agents appearing in my MeshCentral Console No, you haven't. From 35fc2fd41072e7700b8d6571f8597e8287bf302f Mon Sep 17 00:00:00 2001 From: silversword411 Date: Thu, 15 Sep 2022 17:44:46 -0400 Subject: [PATCH 24/41] docs - using more space on large screens for content --- docs/docs/stylesheets/extra.css | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/docs/stylesheets/extra.css b/docs/docs/stylesheets/extra.css index ef3b605001..721e0b3357 100644 --- a/docs/docs/stylesheets/extra.css +++ b/docs/docs/stylesheets/extra.css @@ -1,3 +1,8 @@ +/* Maximum space for text block */ +.md-grid { + max-width: 95%; /* or 100%, if you want to stretch to full-width */ + } + .md-header { background-color: #0b3e81 !important; color: white !important; From e84c79fa279aec1b64278b9dce56a589b8ff6be5 Mon Sep 17 00:00:00 2001 From: silversword411 Date: Thu, 15 Sep 2022 17:45:19 -0400 Subject: [PATCH 25/41] docs - missing link --- docs/docs/install/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/install/index.md b/docs/docs/install/index.md index f278b4b9e8..59e7b8daca 100644 --- a/docs/docs/install/index.md +++ b/docs/docs/install/index.md @@ -9,7 +9,7 @@ npm install meshcentral node node_modules/meshcentral ``` -That's it. MeshCentral will set itself up and start managing computers on your local network. By default it will be setup in LAN mode and agents you install will multicast on the local network to find the server. To setup the server so that agents use a well known DNS name and to start customizing your server, go in the "meshcentral-data" folder and edit the config.json file. The configuration file must be valid JSON, you can use this link to validate the file format. +That's it. MeshCentral will set itself up and start managing computers on your local network. By default it will be setup in LAN mode and agents you install will multicast on the local network to find the server. To setup the server so that agents use a well known DNS name and to start customizing your server, go in the "meshcentral-data" folder and edit the config.json file. The configuration file must be valid JSON, you can use this [link](https://duckduckgo.com/?va=j&t=hc&q=json+lint&ia=answer) to validate the file format. For Windows users, you can download the MeshCentral Installer that will automate installation of NodeJS and provide basic configuration of the server. This option is not recommended for advanced users. From 2fff692eaecc4a202ab340dd4482e58933e1ee43 Mon Sep 17 00:00:00 2001 From: silversword411 Date: Thu, 15 Sep 2022 17:45:46 -0400 Subject: [PATCH 26/41] docs - simplifying ssl LE instructions --- docs/docs/meshcentral/SSLnletsencrypt.md | 32 +++++++++++++++++++----- 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/docs/docs/meshcentral/SSLnletsencrypt.md b/docs/docs/meshcentral/SSLnletsencrypt.md index 03e653e831..742682a9bd 100644 --- a/docs/docs/meshcentral/SSLnletsencrypt.md +++ b/docs/docs/meshcentral/SSLnletsencrypt.md @@ -2,16 +2,36 @@ ## MeshCentral supports SSL using self generated certs, your own certs or Letsencrypt -### To enable Letsencrypt do the following in your config.json file: +### Enabling letsencrypt -1. Under Settings, change `"_redirPort"` to `"redirPort"` and `"_cert" to `"cert": "yourdomain.com", -2. Under letsencrypt change `"_letsencrypt"` to `"letsencrypt"`, enter your email address at `"email"` and yourdomain.com for `"names"` and change `"production"` to true. -3. Restart meshcentral and it will get a cert for you, the process will need to restart to apply the cert. +Make sure you match and/or adjust all the following settings appropriately in your config.json file: + +```json +{ + "settings": { + "redirPort" + "cert": "yourdomain.com" + }, + "domains": { + "letsencrypt": { + "__comment__": "Requires NodeJS 8.x or better, Go to https://letsdebug.net/ first before trying Let's Encrypt.", + "email": "myemail@myserver.com", + "names": "myserver.com,customer1.myserver.com", + "skipChallengeVerification": false, + "production": true + }, + } +} +``` + +If you need further clarification to know what each of these settings are + +Then restart meshcentral and it will get a cert for you, the process will need to restart to apply the cert. ### Useful resources/troubleshooting -To check letsencrypt is working properly please use https://letsdebug.net/ +To check letsencrypt is working properly please use https://letsdebug.net/. We are using the [HTTP-O1 challenge](https://letsencrypt.org/docs/challenge-types/#http-01-challenge) method with these instructions. -Also make sure you have port 80 open and pointing to your meshcentral server, IT WILL NOT work if port 80 isnt open and it HAS to be port 80. +Also make sure you have port 80 open and pointing to your meshcentral server, **IT WILL NOT WORK** if port 80 isn't open and it **HAS** to be port 80. You can read more about Letsencrypt and meshcentral [here](https://ylianst.github.io/MeshCentral/meshcentral/#lets-encrypt-support). From c8508f1c943ff93eca6745fe06f6f8a7484d4a7e Mon Sep 17 00:00:00 2001 From: Simon Smith Date: Sat, 17 Sep 2022 12:01:39 +0100 Subject: [PATCH 27/41] allow origin header to be relayed --- apprelays.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apprelays.js b/apprelays.js index 59b96827d0..84de05e0eb 100644 --- a/apprelays.js +++ b/apprelays.js @@ -282,7 +282,7 @@ module.exports.CreateWebRelay = function (parent, db, args, domain) { // Construct the HTTP request var request = req.method + ' ' + req.url + ' HTTP/' + req.httpVersion + '\r\n'; - const blockedHeaders = ['origin', 'cookie', 'upgrade-insecure-requests', 'sec-ch-ua', 'sec-ch-ua-mobile', 'dnt', 'sec-fetch-user', 'sec-ch-ua-platform', 'sec-fetch-site', 'sec-fetch-mode', 'sec-fetch-dest']; // These are headers we do not forward + const blockedHeaders = ['cookie', 'upgrade-insecure-requests', 'sec-ch-ua', 'sec-ch-ua-mobile', 'dnt', 'sec-fetch-user', 'sec-ch-ua-platform', 'sec-fetch-site', 'sec-fetch-mode', 'sec-fetch-dest']; // These are headers we do not forward for (var i in req.headers) { if (blockedHeaders.indexOf(i) == -1) { request += i + ': ' + req.headers[i] + '\r\n'; } } var cookieStr = ''; for (var i in parent.webCookies) { if (cookieStr != '') { cookieStr += '; ' } cookieStr += (i + '=' + parent.webCookies[i].value); } @@ -331,7 +331,7 @@ module.exports.CreateWebRelay = function (parent, db, args, domain) { // Construct the HTTP request var request = req.method + ' ' + req.url + ' HTTP/' + req.httpVersion + '\r\n'; - const blockedHeaders = ['origin', 'cookie', 'sec-websocket-extensions']; // These are headers we do not forward + const blockedHeaders = ['cookie', 'sec-websocket-extensions']; // These are headers we do not forward for (var i in req.headers) { if (blockedHeaders.indexOf(i) == -1) { request += i + ': ' + req.headers[i] + '\r\n'; } } var cookieStr = ''; for (var i in parent.webCookies) { if (cookieStr != '') { cookieStr += '; ' } cookieStr += (i + '=' + parent.webCookies[i].value); } From 5b9f1cfdc1dbd664a1f3811569b491c74e2e011e Mon Sep 17 00:00:00 2001 From: Marcin Wilk Date: Sat, 17 Sep 2022 13:55:41 +0200 Subject: [PATCH 28/41] Polish translation update --- translate/translate.json | 63 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/translate/translate.json b/translate/translate.json index 261547e3fc..7f21a2d948 100644 --- a/translate/translate.json +++ b/translate/translate.json @@ -475,6 +475,7 @@ }, { "en": "\" requested help.", + "pl": "\" prosi o pomoc.", "xloc": [ "device-help.html->2->3" ] @@ -5719,6 +5720,7 @@ { "en": "Account login token records", "nl": "Token vermeldingen voor accountaanmelding", + "pl": "Zapisy logowania tokenami użytkownika", "xloc": [ "default.handlebars->47->2918" ] @@ -9277,6 +9279,7 @@ { "en": "An unknown error occured.", "nl": "Er is een onbekende fout opgetreden.", + "pl": "Wystąpił nieznany błąd.", "xloc": [ "default.handlebars->47->2798" ] @@ -15168,6 +15171,7 @@ { "en": "Commands from file", "nl": "Opdrachten uit bestand", + "pl": "Komendy z pliku", "xloc": [ "default.handlebars->47->730" ] @@ -15175,6 +15179,7 @@ { "en": "Commands from file on server", "nl": "Opdrachten uit een bestand op de server", + "pl": "Komendy z pliku na serwerze", "xloc": [ "default.handlebars->47->731" ] @@ -15182,6 +15187,7 @@ { "en": "Commands from text box", "nl": "Opdrachten uit tekstvak", + "pl": "Komendy z okienka tekstowego", "xloc": [ "default.handlebars->47->729" ] @@ -15337,6 +15343,7 @@ { "en": "Configuration file records", "nl": "Configuratiebestand vermeldingen", + "pl": "Zapisy pliku konfiguracyjnego", "xloc": [ "default.handlebars->47->2911" ] @@ -18785,6 +18792,7 @@ { "en": "Database Records", "nl": "Database vermeldingen", + "pl": "Zapisy Bazy Danych", "xloc": [ "default.handlebars->47->2837" ] @@ -19631,6 +19639,7 @@ }, { "en": "Denied user login from {0}, {1}, {2}", + "pl": "Odmówiono zalogowania użytkownika z {0}, {1}, {2}", "xloc": [ "default.handlebars->47->2406" ] @@ -20410,12 +20419,14 @@ }, { "en": "Device \"", + "pl": "Urządzenie \"", "xloc": [ "device-help.html->2->3" ] }, { "en": "Device \"[[[DEVICENAME]]]\" requested assistance.", + "pl": "Urządzenie \"[[[DEVICENAME]]]\" prosiło o pomoc.", "xloc": [ "device-help.txt" ] @@ -20826,6 +20837,7 @@ { "en": "Device Push Notification Record", "nl": "Apparaat Push Notificatie vermelding", + "pl": "Zapis Powiadomień Push Urządzenia", "xloc": [ "default.handlebars->47->2920" ] @@ -20833,6 +20845,7 @@ { "en": "Device SMBIOS record", "nl": "Apparaat SMBIOS vermelding", + "pl": "Zapis SMBIOS urządzenia", "xloc": [ "default.handlebars->47->2919" ] @@ -21196,6 +21209,7 @@ { "en": "Device group record", "nl": "Apparaatgroep vermelding", + "pl": "Zapis grupy urządzeń", "xloc": [ "default.handlebars->47->2905" ] @@ -21278,6 +21292,7 @@ { "en": "Device information records", "nl": "Apparaatinformatie vermeldingen", + "pl": "Zapisy informacji urządzenia", "xloc": [ "default.handlebars->47->2907" ] @@ -21799,6 +21814,7 @@ { "en": "Device power transition records", "nl": "Apparaat aan/uit vermeldingen", + "pl": "Zapisy zmiany stanu zasilania", "xloc": [ "default.handlebars->47->2913" ] @@ -21806,6 +21822,7 @@ { "en": "Device record", "nl": "Apparaat vermelding", + "pl": "Zapis urządzenia", "xloc": [ "default.handlebars->47->2904" ] @@ -21863,6 +21880,7 @@ { "en": "Device sharing records", "nl": "Apparaten delings vermeldingen", + "pl": "Zapisy udostępniania urządzenia", "xloc": [ "default.handlebars->47->2917" ] @@ -21870,6 +21888,7 @@ { "en": "Device, users, groups and other records", "nl": "Apparaat, gebruikers, groepen en andere vermeldingen", + "pl": "Zapisy urządzenia, użytkowników, grup i inne", "xloc": [ "default.handlebars->47->2921" ] @@ -24995,6 +25014,7 @@ }, { "en": "Email Help Request", + "pl": "Prośba Pomocy Email", "xloc": [ "default.handlebars->47->1939", "default.handlebars->47->889" @@ -26971,6 +26991,7 @@ { "en": "Event records", "nl": "Gebeurtenis vermeldingen", + "pl": "Zapisy zdarzeń", "xloc": [ "default.handlebars->47->2914" ] @@ -29975,12 +29996,14 @@ }, { "en": "Go to first page", + "pl": "Idź do pierwszej strony", "xloc": [ "default.handlebars->container->column_l->p1->p1title->devListToolbarViewIcons" ] }, { "en": "Go to last page", + "pl": "Idź do ostatniej strony", "xloc": [ "default.handlebars->container->column_l->p1->p1title->devListToolbarViewIcons" ] @@ -30039,12 +30062,14 @@ }, { "en": "Go to next page", + "pl": "Idź do następnej strony", "xloc": [ "default.handlebars->container->column_l->p1->p1title->devListToolbarViewIcons" ] }, { "en": "Go to previous page", + "pl": "Idź do poprzedniej strony", "xloc": [ "default.handlebars->container->column_l->p1->p1title->devListToolbarViewIcons" ] @@ -30417,6 +30442,7 @@ }, { "en": "Group Type", + "pl": "Typ Grupy", "xloc": [ "default.handlebars->47->2576" ] @@ -30803,6 +30829,7 @@ }, { "en": "HTTP/", + "pl": "HTTP/", "xloc": [ "default.handlebars->47->1004", "default.handlebars->47->1981" @@ -30810,6 +30837,7 @@ }, { "en": "HTTP/{0} link", + "pl": "HTTP/{0} link", "xloc": [ "default.handlebars->47->298" ] @@ -30892,6 +30920,7 @@ }, { "en": "HTTPS/", + "pl": "HTTPS/", "xloc": [ "default.handlebars->47->1005", "default.handlebars->47->1982" @@ -30899,6 +30928,7 @@ }, { "en": "HTTPS/{0}", + "pl": "HTTPS/{0}", "xloc": [ "default.handlebars->47->299" ] @@ -31283,6 +31313,7 @@ }, { "en": "Help requests", + "pl": "Prośby pomocy", "xloc": [ "default.handlebars->47->1027", "default.handlebars->47->2179" @@ -31862,6 +31893,7 @@ { "en": "IP location information records", "nl": "IP locatiegegevens vermeldingen", + "pl": "Zapisy o informacji lokalizacji IP", "xloc": [ "default.handlebars->47->2908" ] @@ -33897,6 +33929,7 @@ }, { "en": "Intel® AMT Power on to BIOS", + "pl": "Intel® AMT Uruchom do BIOS", "xloc": [ "default.handlebars->47->1145" ] @@ -33956,6 +33989,7 @@ }, { "en": "Intel® AMT Reset to BIOS", + "pl": "Intel® AMT Resetuj do BIOS", "xloc": [ "default.handlebars->47->1144" ] @@ -37353,6 +37387,7 @@ { "en": "Last connection time records", "nl": "Laatste verbindingstijd vermeldingen", + "pl": "Zapisy czasu ostatnich połączeń", "xloc": [ "default.handlebars->47->2912" ] @@ -44056,6 +44091,7 @@ { "en": "Network interface information records", "nl": "Netwerkinterface informatie vermeldingen", + "pl": "Zapisy informacji o interfejsach sieciowych", "xloc": [ "default.handlebars->47->2910" ] @@ -49467,6 +49503,7 @@ }, { "en": "Perform Intel® AMT power on to BIOS?", + "pl": "Czy wykonać Intel® AMT uruchomienie do BIOS?", "xloc": [ "default.handlebars->47->1168" ] @@ -49499,6 +49536,7 @@ }, { "en": "Perform Intel® AMT reset to BIOS?", + "pl": "Czy wykonać Intel® AMT resetowanie do BIOS?", "xloc": [ "default.handlebars->47->1170" ] @@ -50327,6 +50365,7 @@ }, { "en": "Port", + "pl": "Port", "xloc": [ "default.handlebars->47->1126", "default.handlebars->47->1127" @@ -55531,12 +55570,14 @@ }, { "en": "Request:", + "pl": "Prośba:", "xloc": [ "device-help.html->2->5" ] }, { "en": "Request: \"[[[HELPREQUEST]]]\"", + "pl": "Prośba: \"[[[HELPREQUEST]]]\"", "xloc": [ "device-help.txt" ] @@ -56412,6 +56453,7 @@ { "en": "Run", "nL": "Uitvoeren", + "pl": "Wykonaj", "xloc": [ "default.handlebars->47->924" ] @@ -56471,6 +56513,7 @@ { "en": "Run a script on this computer", "nl": "Voer een script uit op deze computer", + "pl": "Wykonaj skrypt na tym komputerze", "xloc": [ "default.handlebars->container->column_l->p11->deskarea0->deskarea4->1" ] @@ -60000,6 +60043,7 @@ { "en": "Server is unable to get recordings from the database.", "nl": "Server kan geen opnamen uit de database halen.", + "pl": "Serwer nie może pobrać zapisów z bazy danych.", "xloc": [ "default.handlebars->47->2797" ] @@ -60007,6 +60051,7 @@ { "en": "Server is unable to read from the recordings folder.", "nl": "Server kan niet lezen uit de opnamemap.", + "pl": "Serwer nie może odczytać zapisów z folderu.", "xloc": [ "default.handlebars->47->2796" ] @@ -60014,6 +60059,7 @@ { "en": "Server statistics records", "nl": "Server statistieken vermeldingen", + "pl": "Zapisy statystyk serwera", "xloc": [ "default.handlebars->47->2915" ] @@ -65584,6 +65630,7 @@ { "en": "Text notes records", "nl": "Tekst notities vermeldingen", + "pl": "Zapisy notatek tekstowych", "xloc": [ "default.handlebars->47->2909" ] @@ -65962,6 +66009,7 @@ }, { "en": "This NodeJS version does not support OpenID.", + "pl": "Obecna wersja NodeJS nie wspiera OpenID.", "xloc": [ "default.handlebars->47->107" ] @@ -68753,6 +68801,7 @@ { "en": "Unable to load agent icon file: {0}.", "nl": "Kan agent pictogram bestand niet laden: {0}.", + "pl": "Nie moge załadować pliku ikony agenta: {0}.", "xloc": [ "default.handlebars->47->105" ] @@ -68760,6 +68809,7 @@ { "en": "Unable to load agent logo file: {0}.", "nl": "Kan agent logo bestand niet laden: {0}.", + "pl": "Nie moge załadować pliku logo agenta: {0}.", "xloc": [ "default.handlebars->47->106" ] @@ -70417,6 +70467,7 @@ }, { "en": "User Authentication Log", + "pl": "Dziennik Autentykacji Użytkownika", "xloc": [ "default.handlebars->47->3053" ] @@ -71117,6 +71168,7 @@ { "en": "User group records", "nl": "Gebruikersgroep vermeldingen", + "pl": "Zapisy grupy użytkownika", "xloc": [ "default.handlebars->47->2916" ] @@ -71229,6 +71281,7 @@ { "en": "User records", "nl": "Gebruikers vermeldingen", + "pl": "Zapisy użytkownika", "xloc": [ "default.handlebars->47->2906" ] @@ -71261,12 +71314,14 @@ }, { "en": "User:", + "pl": "Użytkownik:", "xloc": [ "device-help.html->2->5" ] }, { "en": "User: \"[[[HELPUSERNAME]]]\"", + "pl": "Użytkownik: \"[[[HELPUSERNAME]]]\"", "xloc": [ "device-help.txt" ] @@ -74984,6 +75039,7 @@ }, { "en": "[[[DEVICENAME]]]", + "pl": "[[[DEVICENAME]]]", "xloc": [ "device-help.html->2->3->1" ] @@ -75015,12 +75071,14 @@ }, { "en": "[[[HELPREQUEST]]]", + "pl": "[[[HELPREQUEST]]]", "xloc": [ "device-help.html->2->5->4" ] }, { "en": "[[[HELPUSERNAME]]]", + "pl": "[[[HELPUSERNAME]]]", "xloc": [ "device-help.html->2->5->1" ] @@ -75054,6 +75112,7 @@ }, { "en": "[[[SERVERNAME]]] - \"[[[DEVICENAME]]]\" Help Request", + "pl": "[[[SERVERNAME]]] - \"[[[DEVICENAME]]]\" Prośba Pomocy", "xloc": [ "device-help.html->0" ] @@ -75165,6 +75224,7 @@ }, { "en": "[[[SERVERNAME]]] - Device Help Request", + "pl": "[[[SERVERNAME]]] - Prośba Pomocy Urządzenia", "xloc": [ "device-help.txt" ] @@ -75224,6 +75284,7 @@ }, { "en": "[[[SERVERNAME]]] - Help Request", + "pl": "[[[SERVERNAME]]] - Prośba Pomocy", "xloc": [ "device-help.html->2->1->1->0->1->1" ] @@ -75282,6 +75343,7 @@ }, { "en": "[[[SERVERURL]]]?viewmode=10&gotonode=[[[NODEID]]]", + "pl": "[[[SERVERURL]]]?viewmode=10&gotonode=[[[NODEID]]]", "xloc": [ "device-help.txt" ] @@ -77501,6 +77563,7 @@ }, { "en": "to navigate to this device.", + "pl": "by nawigować do tego urządzenia.", "xloc": [ "device-help.html->2->7" ] From 4cdfd2314731767d3d55ccc6bf12ff98fd23accf Mon Sep 17 00:00:00 2001 From: Anton Andreevich Moroz Date: Mon, 19 Sep 2022 15:50:46 +0300 Subject: [PATCH 29/41] Add support create agentless gpoups in meshctrl.js --- meshctrl.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/meshctrl.js b/meshctrl.js index 57b3c838ab..33a5b6f13e 100644 --- a/meshctrl.js +++ b/meshctrl.js @@ -579,6 +579,7 @@ if (args['_'].length == 0) { console.log("\r\nOptional arguments:\r\n"); console.log(" --desc [description] - New group description."); console.log(" --amtonly - New group is agent-less, Intel AMT only."); + console.log(" --agentless - New group is agent-less only."); console.log(" --features [number] - Set device group features, sum of numbers below."); console.log(" 1 = Auto-Remove 2 = Hostname Sync"); console.log(" 4 = Record Sessions"); @@ -1356,6 +1357,7 @@ function serverConnect() { var op = { action: 'createmesh', meshname: args.name, meshtype: 2, responseid: 'meshctrl' }; if (args.desc) { op.desc = args.desc; } if (args.amtonly) { op.meshtype = 1; } + if (args.agentless) { op.meshtype = 3; } if (args.features) { op.flags = parseInt(args.features); } if (args.consent) { op.consent = parseInt(args.consent); } ws.send(JSON.stringify(op)); From 1a061ca38fe2d30176df668c42d2f29b5782572e Mon Sep 17 00:00:00 2001 From: Bryan Roe Date: Tue, 20 Sep 2022 08:35:56 -0700 Subject: [PATCH 30/41] Updated GUI check failure case, to only display help when no parameters are passed --- agents/meshinstall-linux.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/agents/meshinstall-linux.js b/agents/meshinstall-linux.js index a2123e20a1..1ad8e5cc73 100644 --- a/agents/meshinstall-linux.js +++ b/agents/meshinstall-linux.js @@ -156,7 +156,7 @@ if (process.argv.includes('-translations')) console.log(JSON.stringify(translation)); process.exit(); } -if (process.argv.includes('-help') || (process.platform == 'linux' && process.env['XAUTHORITY']==null && process.env['DISPLAY'] == null)) +if (process.argv.includes('-help') || (process.platform == 'linux' && process.env['XAUTHORITY'] == null && process.env['DISPLAY'] == null && process.argv.length == 1)) { console.log("\n" + translation[lang].commands + ": "); if ((msh.InstallFlags & 1) == 1) From d1f19b762f7139f96b63dc2d668ad0ef73f917b6 Mon Sep 17 00:00:00 2001 From: dinger1986 Date: Tue, 20 Sep 2022 16:47:12 +0100 Subject: [PATCH 31/41] Update SSLnletsencrypt.md --- docs/docs/meshcentral/SSLnletsencrypt.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/meshcentral/SSLnletsencrypt.md b/docs/docs/meshcentral/SSLnletsencrypt.md index 742682a9bd..68b0c9441f 100644 --- a/docs/docs/meshcentral/SSLnletsencrypt.md +++ b/docs/docs/meshcentral/SSLnletsencrypt.md @@ -24,7 +24,7 @@ Make sure you match and/or adjust all the following settings appropriately in yo } ``` -If you need further clarification to know what each of these settings are +If you need further clarification to know what each of these settings are check out [the config template](https://github.com/Ylianst/MeshCentral/blob/master/meshcentral-config-schema.json). Then restart meshcentral and it will get a cert for you, the process will need to restart to apply the cert. From 32e86cef66fcff17473ac8f50a25896cf73ffb16 Mon Sep 17 00:00:00 2001 From: dinger1986 Date: Tue, 20 Sep 2022 16:48:34 +0100 Subject: [PATCH 32/41] Update SSLnletsencrypt.md --- docs/docs/meshcentral/SSLnletsencrypt.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/meshcentral/SSLnletsencrypt.md b/docs/docs/meshcentral/SSLnletsencrypt.md index 68b0c9441f..fe8d3f786f 100644 --- a/docs/docs/meshcentral/SSLnletsencrypt.md +++ b/docs/docs/meshcentral/SSLnletsencrypt.md @@ -24,7 +24,7 @@ Make sure you match and/or adjust all the following settings appropriately in yo } ``` -If you need further clarification to know what each of these settings are check out [the config template](https://github.com/Ylianst/MeshCentral/blob/master/meshcentral-config-schema.json). +If you need further clarification to know what each of these settings are, check out [the config schema](https://github.com/Ylianst/MeshCentral/blob/master/meshcentral-config-schema.json). Then restart meshcentral and it will get a cert for you, the process will need to restart to apply the cert. From d5ca347dbebd18c3a857a4e5b2333d7f5b645262 Mon Sep 17 00:00:00 2001 From: petervanv <58996467+petervanv@users.noreply.github.com> Date: Tue, 20 Sep 2022 19:23:43 +0200 Subject: [PATCH 33/41] Dutch language update 1.0.85 line up polish translation --- translate/translate.json | 177 +++++++++++++++++++++++++++++++-------- 1 file changed, 142 insertions(+), 35 deletions(-) diff --git a/translate/translate.json b/translate/translate.json index 7f21a2d948..a76fd1371d 100644 --- a/translate/translate.json +++ b/translate/translate.json @@ -475,7 +475,8 @@ }, { "en": "\" requested help.", - "pl": "\" prosi o pomoc.", + "nl": "\" vraagt om hulp.", + "pl": "\" prosi o pomoc.", "xloc": [ "device-help.html->2->3" ] @@ -19639,7 +19640,8 @@ }, { "en": "Denied user login from {0}, {1}, {2}", - "pl": "Odmówiono zalogowania użytkownika z {0}, {1}, {2}", + "nl": "Geweigerde gebruikerslogin van {0}, {1}, {2}", + "pl": "Odmówiono zalogowania użytkownika z {0}, {1}, {2}", "xloc": [ "default.handlebars->47->2406" ] @@ -20419,14 +20421,16 @@ }, { "en": "Device \"", - "pl": "Urządzenie \"", + "nl": "Apparaat \"", + "pl": "Urządzenie \"", "xloc": [ "device-help.html->2->3" ] }, { "en": "Device \"[[[DEVICENAME]]]\" requested assistance.", - "pl": "Urządzenie \"[[[DEVICENAME]]]\" prosiło o pomoc.", + "nl": "Apparaat \"[[[DEVICENAME]]]\" heeft assistentie gevraagd", + "pl": "Urządzenie \"[[[DEVICENAME]]]\" prosiło o pomoc.", "xloc": [ "device-help.txt" ] @@ -25014,7 +25018,8 @@ }, { "en": "Email Help Request", - "pl": "Prośba Pomocy Email", + "nl": "E-mail hulpverzoek", + "pl": "Prośba Pomocy Email", "xloc": [ "default.handlebars->47->1939", "default.handlebars->47->889" @@ -29996,14 +30001,16 @@ }, { "en": "Go to first page", - "pl": "Idź do pierwszej strony", + "nl": "Ga naar de eerste pagina", + "pl": "Idź do pierwszej strony", "xloc": [ "default.handlebars->container->column_l->p1->p1title->devListToolbarViewIcons" ] }, { "en": "Go to last page", - "pl": "Idź do ostatniej strony", + "nl": "Ga naar de laatste pagina ", + "pl": "Idź do ostatniej strony", "xloc": [ "default.handlebars->container->column_l->p1->p1title->devListToolbarViewIcons" ] @@ -30062,14 +30069,16 @@ }, { "en": "Go to next page", - "pl": "Idź do następnej strony", + "nl": "Ga naar de volgende pagina", + "pl": "Idź do następnej strony", "xloc": [ "default.handlebars->container->column_l->p1->p1title->devListToolbarViewIcons" ] }, { "en": "Go to previous page", - "pl": "Idź do poprzedniej strony", + "nl": "Ga naar de vorige pagina", + "pl": "Idź do poprzedniej strony", "xloc": [ "default.handlebars->container->column_l->p1->p1title->devListToolbarViewIcons" ] @@ -30442,7 +30451,8 @@ }, { "en": "Group Type", - "pl": "Typ Grupy", + "nl": "Groepstype", + "pl": "Typ Grupy", "xloc": [ "default.handlebars->47->2576" ] @@ -30829,7 +30839,23 @@ }, { "en": "HTTP/", - "pl": "HTTP/", + "nl": "HTTP/", + "cs": "HTTP/", + "es": "HTTP/", + "de": "HTTP/", + "da": "HTTP/", + "fi": "HTTP/", + "fr": "HTTP/", + "hi": "HTTP/", + "it": "HTTP/", + "ja": "HTTP/", + "ko": "HTTP/", + "pt": "HTTP/", + "pt-br": "HTTP/", + "pl": "HTTP/", + "sv": "HTTP/", + "ru": "HTTP/", + "tr": "HTTP/", "xloc": [ "default.handlebars->47->1004", "default.handlebars->47->1981" @@ -30837,7 +30863,8 @@ }, { "en": "HTTP/{0} link", - "pl": "HTTP/{0} link", + "nl": "HTTP/{0} link", + "pl": "HTTP/{0} link", "xloc": [ "default.handlebars->47->298" ] @@ -30920,7 +30947,23 @@ }, { "en": "HTTPS/", - "pl": "HTTPS/", + "nl": "HTTPS/", + "cs": "HTTPS/", + "es": "HTTPS/", + "de": "HTTPS/", + "da": "HTTPS/", + "fi": "HTTPS/", + "fr": "HTTPS/", + "hi": "HTTPS/", + "it": "HTTPS/", + "ja": "HTTPS/", + "ko": "HTTPS/", + "pt": "HTTPS/", + "pt-br": "HTTPS/", + "sv": "HTTPS/", + "ru": "HTTPS/", + "tr": "HTTPS/", + "pl": "HTTPS/", "xloc": [ "default.handlebars->47->1005", "default.handlebars->47->1982" @@ -30928,7 +30971,23 @@ }, { "en": "HTTPS/{0}", - "pl": "HTTPS/{0}", + "nl": "HTTPS/{0}", + "pl": "HTTPS/{0}", + "cs": "HTTPS/{0}", + "es": "HTTPS/{0}", + "de": "HTTPS/{0}", + "da": "HTTPS/{0}", + "fi": "HTTPS/{0}", + "fr": "HTTPS/{0}", + "hi": "HTTPS/{0}", + "it": "HTTPS/{0}", + "ja": "HTTPS/{0}", + "ko": "HTTPS/{0}", + "pt": "HTTPS/{0}", + "pt-br": "HTTPS/{0}", + "sv": "HTTPS/{0}", + "ru": "HTTPS/{0}", + "tr": "HTTPS/{0}", "xloc": [ "default.handlebars->47->299" ] @@ -31313,7 +31372,8 @@ }, { "en": "Help requests", - "pl": "Prośby pomocy", + "nl": "Hulpverzoeken", + "pl": "Prośby pomocy", "xloc": [ "default.handlebars->47->1027", "default.handlebars->47->2179" @@ -33929,7 +33989,8 @@ }, { "en": "Intel® AMT Power on to BIOS", - "pl": "Intel® AMT Uruchom do BIOS", + "nl": "Intel® AMT opstarten naar de BIOS", + "pl": "Intel® AMT Uruchom do BIOS", "xloc": [ "default.handlebars->47->1145" ] @@ -33989,7 +34050,8 @@ }, { "en": "Intel® AMT Reset to BIOS", - "pl": "Intel® AMT Resetuj do BIOS", + "en": "Intel® AMT reset naar de BIOS", + "pl": "Intel® AMT Resetuj do BIOS", "xloc": [ "default.handlebars->47->1144" ] @@ -49503,7 +49565,8 @@ }, { "en": "Perform Intel® AMT power on to BIOS?", - "pl": "Czy wykonać Intel® AMT uruchomienie do BIOS?", + "nl": "Perform Intel® AMT opstarten naar de BIOS?", + "pl": "Czy wykonać Intel® AMT uruchomienie do BIOS?", "xloc": [ "default.handlebars->47->1168" ] @@ -49536,7 +49599,8 @@ }, { "en": "Perform Intel® AMT reset to BIOS?", - "pl": "Czy wykonać Intel® AMT resetowanie do BIOS?", + "nl": "Perform Intel® AMT resetten naar de BIOS?", + "pl": "Czy wykonać Intel® AMT resetowanie do BIOS?", "xloc": [ "default.handlebars->47->1170" ] @@ -50365,7 +50429,8 @@ }, { "en": "Port", - "pl": "Port", + "en": "Poort", + "pl": "Port", "xloc": [ "default.handlebars->47->1126", "default.handlebars->47->1127" @@ -55570,14 +55635,16 @@ }, { "en": "Request:", - "pl": "Prośba:", + "en": "Verzoek:", + "pl": "Prośba:", "xloc": [ "device-help.html->2->5" ] }, { "en": "Request: \"[[[HELPREQUEST]]]\"", - "pl": "Prośba: \"[[[HELPREQUEST]]]\"", + "nl": "Verzoek: \"[[[HELPREQUEST]]]\"", + "pl": "Prośba: \"[[[HELPREQUEST]]]\"", "xloc": [ "device-help.txt" ] @@ -66009,7 +66076,8 @@ }, { "en": "This NodeJS version does not support OpenID.", - "pl": "Obecna wersja NodeJS nie wspiera OpenID.", + "nl": "Deze NodeJS-versie ondersteunt OpenID niet.", + "pl": "Obecna wersja NodeJS nie wspiera OpenID.", "xloc": [ "default.handlebars->47->107" ] @@ -70467,7 +70535,8 @@ }, { "en": "User Authentication Log", - "pl": "Dziennik Autentykacji Użytkownika", + "nl": "Gebruikersauthenticatielogboek", + "pl": "Dziennik Autentykacji Użytkownika", "xloc": [ "default.handlebars->47->3053" ] @@ -71314,14 +71383,16 @@ }, { "en": "User:", - "pl": "Użytkownik:", + "nl": "Gebruiker:", + "pl": "Użytkownik:", "xloc": [ "device-help.html->2->5" ] }, { "en": "User: \"[[[HELPUSERNAME]]]\"", - "pl": "Użytkownik: \"[[[HELPUSERNAME]]]\"", + "en": "Gebruiker: \"[[[HELPUSERNAME]]]\"", + "pl": "Użytkownik: \"[[[HELPUSERNAME]]]\"", "xloc": [ "device-help.txt" ] @@ -75039,7 +75110,8 @@ }, { "en": "[[[DEVICENAME]]]", - "pl": "[[[DEVICENAME]]]", + "nl": "[[[DEVICENAME]]]", + "pl": "[[[DEVICENAME]]]", "xloc": [ "device-help.html->2->3->1" ] @@ -75071,14 +75143,44 @@ }, { "en": "[[[HELPREQUEST]]]", - "pl": "[[[HELPREQUEST]]]", + "nl": "[[[HELPREQUEST]]]", + "pl": "[[[HELPREQUEST]]]", + "cs": "[[[HELPREQUEST]]]", + "de": "[[[HELPREQUEST]]]", + "es": "[[[HELPREQUEST]]]", + "fi": "[[[HELPREQUEST]]]", + "it": "[[[HELPREQUEST]]]", + "hi": "[[[HELPREQUEST]]]", + "fr": "[[[HELPREQUEST]]]", + "ja": "[[[HELPREQUEST]]]", + "ko": "[[[HELPREQUEST]]]", + "pt": "[[[HELPREQUEST]]]", + "pt-br": "[[[HELPREQUEST]]]", + "ru": "[[[HELPREQUEST]]]", + "sv": "[[[HELPREQUEST]]]", + "tr": "[[[HELPREQUEST]]]", "xloc": [ "device-help.html->2->5->4" ] }, { "en": "[[[HELPUSERNAME]]]", - "pl": "[[[HELPUSERNAME]]]", + "nl": "[[[HELPUSERNAME]]]", + "pl": "[[[HELPUSERNAME]]]", + "cs": "[[[HELPUSERNAME]]]", + "de": "[[[HELPUSERNAME]]]", + "es": "[[[HELPUSERNAME]]]", + "fi": "[[[HELPUSERNAME]]]", + "it": "[[[HELPUSERNAME]]]", + "hi": "[[[HELPUSERNAME]]]", + "fr": "[[[HELPUSERNAME]]]", + "ja": "[[[HELPUSERNAME]]]", + "ko": "[[[HELPUSERNAME]]]", + "pt": "[[[HELPUSERNAME]]]", + "pt-br": "[[[HELPUSERNAME]]]", + "ru": "[[[HELPUSERNAME]]]", + "sv": "[[[HELPUSERNAME]]]", + "tr": "[[[HELPUSERNAME]]]", "xloc": [ "device-help.html->2->5->1" ] @@ -75112,7 +75214,8 @@ }, { "en": "[[[SERVERNAME]]] - \"[[[DEVICENAME]]]\" Help Request", - "pl": "[[[SERVERNAME]]] - \"[[[DEVICENAME]]]\" Prośba Pomocy", + "nl": "[[[SERVERNAME]]] - \"[[[DEVICENAME]]]\" Verzoek om hulp", + "pl": "[[[SERVERNAME]]] - \"[[[DEVICENAME]]]\" Prośba Pomocy", "xloc": [ "device-help.html->0" ] @@ -75224,7 +75327,8 @@ }, { "en": "[[[SERVERNAME]]] - Device Help Request", - "pl": "[[[SERVERNAME]]] - Prośba Pomocy Urządzenia", + "nl": "[[[SERVERNAME]]] - Een verzoek om het apparaat te helpen", + "pl": "[[[SERVERNAME]]] - Prośba Pomocy Urządzenia", "xloc": [ "device-help.txt" ] @@ -75284,7 +75388,8 @@ }, { "en": "[[[SERVERNAME]]] - Help Request", - "pl": "[[[SERVERNAME]]] - Prośba Pomocy", + "nl": "[[[SERVERNAME]]] - Verzoek om hulp", + "pl": "[[[SERVERNAME]]] - Prośba Pomocy", "xloc": [ "device-help.html->2->1->1->0->1->1" ] @@ -75343,7 +75448,8 @@ }, { "en": "[[[SERVERURL]]]?viewmode=10&gotonode=[[[NODEID]]]", - "pl": "[[[SERVERURL]]]?viewmode=10&gotonode=[[[NODEID]]]", + "nl": "[[[SERVERURL]]]?viewmode=10&gotonode=[[[NODEID]]]", + "pl": "[[[SERVERURL]]]?viewmode=10&gotonode=[[[NODEID]]]", "xloc": [ "device-help.txt" ] @@ -77563,7 +77669,8 @@ }, { "en": "to navigate to this device.", - "pl": "by nawigować do tego urządzenia.", + "en": "naar dit apparaat navigeren.", + "pl": "by nawigować do tego urządzenia.", "xloc": [ "device-help.html->2->7" ] @@ -79761,4 +79868,4 @@ ] } ] -} \ No newline at end of file +} From 334c03ab4e21d7bb3b4f51b28ae31df020a8a1f7 Mon Sep 17 00:00:00 2001 From: petervanv <58996467+petervanv@users.noreply.github.com> Date: Tue, 20 Sep 2022 21:18:29 +0200 Subject: [PATCH 34/41] Dutch language update 1.085 V2 line up polish language translation --- translate/translate.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/translate/translate.json b/translate/translate.json index a76fd1371d..31d75e3bc9 100644 --- a/translate/translate.json +++ b/translate/translate.json @@ -34050,7 +34050,7 @@ }, { "en": "Intel® AMT Reset to BIOS", - "en": "Intel® AMT reset naar de BIOS", + "nl": "Intel® AMT reset naar de BIOS", "pl": "Intel® AMT Resetuj do BIOS", "xloc": [ "default.handlebars->47->1144" @@ -50429,7 +50429,7 @@ }, { "en": "Port", - "en": "Poort", + "nl": "Poort", "pl": "Port", "xloc": [ "default.handlebars->47->1126", @@ -55635,7 +55635,7 @@ }, { "en": "Request:", - "en": "Verzoek:", + "nl": "Verzoek:", "pl": "Prośba:", "xloc": [ "device-help.html->2->5" @@ -71391,7 +71391,7 @@ }, { "en": "User: \"[[[HELPUSERNAME]]]\"", - "en": "Gebruiker: \"[[[HELPUSERNAME]]]\"", + "nl": "Gebruiker: \"[[[HELPUSERNAME]]]\"", "pl": "Użytkownik: \"[[[HELPUSERNAME]]]\"", "xloc": [ "device-help.txt" @@ -77669,7 +77669,7 @@ }, { "en": "to navigate to this device.", - "en": "naar dit apparaat navigeren.", + "nl": "naar dit apparaat navigeren.", "pl": "by nawigować do tego urządzenia.", "xloc": [ "device-help.html->2->7" From 6c3497848874d1f378264b7e155fe2359198fdfc Mon Sep 17 00:00:00 2001 From: Bryan Roe Date: Thu, 22 Sep 2022 12:46:00 -0700 Subject: [PATCH 35/41] Fixed bug where custom MSH fields specified by server were not picked up by installer --- agents/meshinstall-linux.js | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/agents/meshinstall-linux.js b/agents/meshinstall-linux.js index 1ad8e5cc73..403d374413 100644 --- a/agents/meshinstall-linux.js +++ b/agents/meshinstall-linux.js @@ -103,14 +103,13 @@ if (msh.agentName) { connectArgs.push('--agentName="' + msh.agentName + '"'); } function _install(parms) { + var i; var mstr = require('fs').createWriteStream(process.execPath + '.msh', { flags: 'wb' }); - mstr.write('MeshName=' + msh.MeshName + '\n'); - mstr.write('MeshType=' + msh.MeshType + '\n'); - mstr.write('MeshID=' + msh.MeshID + '\n'); - mstr.write('ServerID=' + msh.ServerID + '\n'); - mstr.write('MeshServer=' + msh.MeshServer + '\n'); - if (msh.agentName) { mstr.write('agentName=' + msh.agentName + '\n'); } - if (msh.meshServiceName) { mstr.write('meshServiceName=' + msh.meshServiceName + '\n'); } + + for (i in msh) + { + mstr.write(i + '=' + msh[i] + '\n'); + } mstr.end(); if (parms == null) { parms = []; } From 7353de17b9708f15e6a930a7864ba0285c0584f5 Mon Sep 17 00:00:00 2001 From: silversword411 Date: Thu, 22 Sep 2022 16:26:44 -0400 Subject: [PATCH 36/41] docs - adding uninstall commands https://github.com/Ylianst/MeshCentral/issues/4576 --- docs/docs/meshcentral/agents.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/docs/meshcentral/agents.md b/docs/docs/meshcentral/agents.md index 1ba89e6125..43279e6ae7 100644 --- a/docs/docs/meshcentral/agents.md +++ b/docs/docs/meshcentral/agents.md @@ -25,6 +25,8 @@ xxx Path: `c:\Program Files\Mesh Agent\meshagent.msh` ## Linux / BSD +Uninstall: `sudo /usr/local/mesh_services/meshagent/[agent-name]/meshagent -fulluninstall` + ## Apple macOS Binary Installer Default Install Path: `/usr/local/mesh_services/meshagent/meshagent` @@ -38,6 +40,10 @@ launchctl stop meshagent launchctl start meshagent ``` +Install: + +Uninstall: `sudo /usr/local/mesh_services/meshagent/[agent-name]/meshagent -fulluninstall` + ## Apple macOS Universal For OSx 11+ including Big Sur, Monterey and later From e7574b5089adc1c659a6ee9f6220e3f83f8329ed Mon Sep 17 00:00:00 2001 From: Simon Smith Date: Thu, 29 Sep 2022 20:07:50 +0100 Subject: [PATCH 37/41] fix minifycore default --- meshcentral.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meshcentral.js b/meshcentral.js index fa7f304b30..11f181e462 100644 --- a/meshcentral.js +++ b/meshcentral.js @@ -1420,7 +1420,7 @@ function CreateMeshCentralServer(config, args) { if (obj.args.mpsaliasport != null && (typeof obj.args.mpsaliasport != 'number')) obj.args.mpsaliasport = null; if (obj.args.rediraliasport != null && (typeof obj.args.rediraliasport != 'number')) obj.args.rediraliasport = null; if (obj.args.redirport == null) obj.args.redirport = 80; - if (obj.args.minifycore === 0) obj.args.minifycore = false; + if (obj.args.minifycore == null) obj.args.minifycore = false; if (typeof args.agentidletimeout != 'number') { args.agentidletimeout = 150000; } else { args.agentidletimeout *= 1000 } // Default agent idle timeout is 2m, 30sec. if ((obj.args.lanonly != true) && (obj.args.webrtconfig == null)) { obj.args.webrtconfig = { iceservers: [{ urls: 'stun:stun.l.google.com:19302' }, { urls: 'stun:stun.services.mozilla.com' }] }; } // Setup default WebRTC STUN servers if (typeof obj.args.ignoreagenthashcheck == 'string') { if (obj.args.ignoreagenthashcheck == '') { delete obj.args.ignoreagenthashcheck; } else { obj.args.ignoreagenthashcheck = obj.args.ignoreagenthashcheck.split(','); } } From dee3f58892fc3473a7a1bd92ca5b757d46453c37 Mon Sep 17 00:00:00 2001 From: silversword411 Date: Fri, 30 Sep 2022 13:02:07 -0400 Subject: [PATCH 38/41] fixing typos --- .vscode/settings.json | 4 ++++ meshcentral-config-schema.json | 10 +++++----- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index b94c4dc42d..93c4d0d5bb 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -5,6 +5,7 @@ "accountcreate", "accountid", "accountremove", + "acebase", "acmd", "acmepath", "actiontype", @@ -599,6 +600,7 @@ "postflight", "poweraction", "powerevents", + "Preconfigured", "Proto", "publicid", "pushlogin", @@ -662,6 +664,7 @@ "rport", "rtpass", "rtuser", + "runas", "runasuser", "runasuseronly", "runcommand", @@ -822,6 +825,7 @@ "usercount", "userex", "userfiles", + "userfirst", "usergroupchange", "usergroups", "userid", diff --git a/meshcentral-config-schema.json b/meshcentral-config-schema.json index 916034ad4b..c35ac0ac96 100644 --- a/meshcentral-config-schema.json +++ b/meshcentral-config-schema.json @@ -349,7 +349,7 @@ "loginKey": { "type": [ "string", "array" ], "items": { "type": "string" }, "default": null, "description": "Requires that users add the value ?key=xxx in the URL in order to see the web site." }, "agentKey": { "type": [ "string", "array" ], "items": { "type": "string" }, "default": null, "description": "Requires that agents add the value ?key=xxx in the URL in order to connect. This is not automatic and needs to be manually added in the meshagent.msh file." }, "ipkvm": { "type": "boolean", "default": false, "description": "Set to true to enable IP KVM device support in this domain." }, - "minify": { "type": "boolean", "default": false, "description": "When enabled, the server will send reduced sided web pages." }, + "minify": { "type": "boolean", "default": false, "description": "When enabled, the server will send reduced sized web pages." }, "newAccounts": { "type": "boolean", "default": false, "description": "When set to true, allow new user accounts to be created from the login page." }, "newAccountsPass": { "type": "string", "default": null, "description": "When set this password will be required in order to create a new account from the login screen." }, "newAccountsCaptcha": { "type": "boolean", "default": false, "description": "When set to true, users will get a CAPTCHA when creating a new account from the login screen." }, @@ -403,12 +403,12 @@ "enum": [ "bat", "ps1", "sh", "agent" ] }, "runas": { - "description": "How to run this script, does not appy to agent scripts.", + "description": "How to run this script, does not apply to agent scripts.", "type": "string", "enum": ["agent", "userfirst", "user"] }, "cmd": { - "description": "The command or \\r\\n seperated commands to run, if set do not use the file key.", + "description": "The command or \\r\\n separated commands to run, if set do not use the file key.", "type": "string" }, "file": { @@ -555,13 +555,13 @@ "ldapSyncWithUserGroups": { "type": [ "boolean", "object" ], "default": false, - "description": "When set to true or set to an object, MeshCentral will syncronized LDAP user memberships to MeshCentral user groups.", + "description": "When set to true or set to an object, MeshCentral will synchronize LDAP user memberships to MeshCentral user groups.", "additionalProperties": false, "properties": { "filter": { "type": [ "string", "array" ], "default": null, - "description": "When set to a string or array of strings, only LDAP membership groups that includes one of the strings will be syncronized with MeshCentral user groups." + "description": "When set to a string or array of strings, only LDAP membership groups that includes one of the strings will be synchronized with MeshCentral user groups." } } }, From 64c81569c3cd462bdc21d37c6bcf5515e29e80d8 Mon Sep 17 00:00:00 2001 From: silversword411 Date: Fri, 30 Sep 2022 13:03:24 -0400 Subject: [PATCH 39/41] docs - updating config --- docs/docs/meshcentral/config.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/docs/meshcentral/config.md b/docs/docs/meshcentral/config.md index 8c5f35e6db..439a1dc5d1 100644 --- a/docs/docs/meshcentral/config.md +++ b/docs/docs/meshcentral/config.md @@ -356,7 +356,7 @@ See description for information about each item. "loginKey": { "type": [ "string", "array" ], "items": { "type": "string" }, "default": null, "description": "Requires that users add the value ?key=xxx in the URL in order to see the web site." }, "agentKey": { "type": [ "string", "array" ], "items": { "type": "string" }, "default": null, "description": "Requires that agents add the value ?key=xxx in the URL in order to connect. This is not automatic and needs to be manually added in the meshagent.msh file." }, "ipkvm": { "type": "boolean", "default": false, "description": "Set to true to enable IP KVM device support in this domain." }, - "minify": { "type": "boolean", "default": false, "description": "When enabled, the server will send reduced sided web pages." }, + "minify": { "type": "boolean", "default": false, "description": "When enabled, the server will send reduced sized web pages." }, "newAccounts": { "type": "boolean", "default": false, "description": "When set to true, allow new user accounts to be created from the login page." }, "newAccountsPass": { "type": "string", "default": null, "description": "When set this password will be required in order to create a new account from the login screen." }, "newAccountsCaptcha": { "type": "boolean", "default": false, "description": "When set to true, users will get a CAPTCHA when creating a new account from the login screen." }, @@ -410,12 +410,12 @@ See description for information about each item. "enum": [ "bat", "ps1", "sh", "agent" ] }, "runas": { - "description": "How to run this script, does not appy to agent scripts.", + "description": "How to run this script, does not apply to agent scripts.", "type": "string", "enum": ["agent", "userfirst", "user"] }, "cmd": { - "description": "The command or \\r\\n seperated commands to run, if set do not use the file key.", + "description": "The command or \\r\\n separated commands to run, if set do not use the file key.", "type": "string" }, "file": { @@ -562,13 +562,13 @@ See description for information about each item. "ldapSyncWithUserGroups": { "type": [ "boolean", "object" ], "default": false, - "description": "When set to true or set to an object, MeshCentral will syncronized LDAP user memberships to MeshCentral user groups.", + "description": "When set to true or set to an object, MeshCentral will synchronize LDAP user memberships to MeshCentral user groups.", "additionalProperties": false, "properties": { "filter": { "type": [ "string", "array" ], "default": null, - "description": "When set to a string or array of strings, only LDAP membership groups that includes one of the strings will be syncronized with MeshCentral user groups." + "description": "When set to a string or array of strings, only LDAP membership groups that includes one of the strings will be synchronized with MeshCentral user groups." } } }, From 06ec0caec46056513c300366c215f464577d4bec Mon Sep 17 00:00:00 2001 From: Bryan Roe Date: Fri, 14 Oct 2022 11:18:49 -0700 Subject: [PATCH 40/41] Added workaround for 32 bit windows agent on 64 bit windows, to inject sysnative when callind readdirSync() on %windir% Updated documentation for windows terminal. --- agents/meshcore.js | 21 ++ agents/modules_meshcore/win-terminal.js | 255 ++++++++++++++---- .../modules_meshcore/win-virtual-terminal.js | 60 +++-- 3 files changed, 262 insertions(+), 74 deletions(-) diff --git a/agents/meshcore.js b/agents/meshcore.js index 6337f74114..b8cb47c26e 100644 --- a/agents/meshcore.js +++ b/agents/meshcore.js @@ -47,6 +47,27 @@ var MESHRIGHT_NODESKTOP = 65536; var pendingSetClip = false; // This is a temporary hack to prevent multiple setclips at the same time to stop the agent from crashing. +function __readdirSync_fix(path) +{ + var sysnative = false; + pathstr = require('fs')._fixwinpath(path); + if (pathstr.split('\\*').join('').toLowerCase() == process.env['windir'].toLowerCase()) { sysnative = true; } + var ret = __readdirSync_old(path); + if (sysnative) { ret.push('sysnative'); } + return (ret); +} + +if (process.platform == 'win32' && require('_GenericMarshal').PointerSize == 4 && require('os').arch() == 'x64') +{ + if(require('fs').readdirSync.version == null) + { + require('fs').__readdirSync_old = require('fs').readdirSync; + require('fs').readdirSync = __readdirSync_fix; + } +} + + + function bcdOK() { if (process.platform != 'win32') { return (false); } if (require('os').arch() == 'x64') { diff --git a/agents/modules_meshcore/win-terminal.js b/agents/modules_meshcore/win-terminal.js index a0e76864c1..1c6e8e20a2 100644 --- a/agents/modules_meshcore/win-terminal.js +++ b/agents/modules_meshcore/win-terminal.js @@ -1,5 +1,5 @@ /* -Copyright 2018 Intel Corporation +Copyright 2018-2022 Intel Corporation Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -89,21 +89,50 @@ function windows_terminal() { var newCsbi = GM.CreateVariable(22); if (this._kernel32.GetConsoleScreenBufferInfo(this._stdoutput, newCsbi).Val == 0) { return; } - if (newCsbi.Deref(4, 2).toBuffer().readUInt16LE() != this.currentX || newCsbi.Deref(6, 2).toBuffer().readUInt16LE() != this.currentY) { - //wchar_t mywbuf[512]; - //swprintf(mywbuf, 512, TEXT("csbi.dwCursorPosition.X = %d, csbi.dwCursorPosition.Y = %d, newCsbi.dwCursorPosition.X = %d, newCsbi.dwCursorPosition.Y = %d\r\n"), csbi.dwCursorPosition.X, csbi.dwCursorPosition.Y, newCsbi.dwCursorPosition.X, newCsbi.dwCursorPosition.Y); - //OutputDebugString(mywbuf); - - //m_viewOffset = newCsbi.srWindow.Top; - //WriteMoveCursor((SerialAgent *)this->sa, (char)(newCsbi.dwCursorPosition.Y - m_viewOffset), (char)(newCsbi.dwCursorPosition.X - m_viewOffset)); - //LowStackSendData((SerialAgent *)(this->sa), "", 0); - + if (newCsbi.Deref(4, 2).toBuffer().readUInt16LE() != this.currentX || newCsbi.Deref(6, 2).toBuffer().readUInt16LE() != this.currentY) + { + // + // Reference for CONSOLE_SCREEN_BUFFER_INFO can be found at: + // https://learn.microsoft.com/en-us/windows/console/console-screen-buffer-info-str + // + this.currentX = newCsbi.Deref(4, 2).toBuffer().readUInt16LE(); this.currentY = newCsbi.Deref(6, 2).toBuffer().readUInt16LE(); } } - this.ClearScreen = function () { + this.ClearScreen = function () + { + // + // Reference for CONSOLE_SCREEN_BUFFER_INFO can be found at: + // https://learn.microsoft.com/en-us/windows/console/console-screen-buffer-info-str + // + + // + // Reference for GetConsoleScreenBufferInfo can be found at: + // https://learn.microsoft.com/en-us/windows/console/getconsolescreenbufferinfo + // + + // + // Reference for FillConsoleOutputCharacter can be found at: + // https://learn.microsoft.com/en-us/windows/console/fillconsoleoutputcharacter + // + + // + // Reference for FillConsoleOutputAttribute can be found at: + // https://learn.microsoft.com/en-us/windows/console/fillconsoleoutputattribute + // + + // + // Reference for SetConsoleCursorPosition can be found at: + // https://learn.microsoft.com/en-us/windows/console/setconsolecursorposition + // + + // + // Reference for SetConsoleWindowInfo can be fount at: + // https://learn.microsoft.com/en-us/windows/console/setconsolewindowinfo + // + var CONSOLE_SCREEN_BUFFER_INFO = GM.CreateVariable(22); if (this._kernel32.GetConsoleScreenBufferInfo(this._stdoutput, CONSOLE_SCREEN_BUFFER_INFO).Val == 0) { return; } @@ -132,6 +161,7 @@ function windows_terminal() { this._kernel32.SetConsoleWindowInfo(this._stdoutput, 1, rect); } + // This does a rudimentary check if the platform is capable of PowerShell this.PowerShellCapable = function() { if (require('os').arch() == 'x64') @@ -144,6 +174,7 @@ function windows_terminal() { } } + // Starts a Legacy Windows Terminal Session this.StartEx = function Start(CONSOLE_SCREEN_WIDTH, CONSOLE_SCREEN_HEIGHT, terminalTarget) { // The older windows terminal does not support @@ -164,7 +195,9 @@ function windows_terminal() { this._stdinput = this._kernel32.GetStdHandle(STD_INPUT_HANDLE); this._stdoutput = this._kernel32.GetStdHandle(STD_OUTPUT_HANDLE); this._connected = false; - var coordScreen = GM.CreateVariable(4); + + // Coord structure can be found at: https://learn.microsoft.com/en-us/windows/console/coord-str + var coordScreen = GM.CreateVariable(4); coordScreen.Deref(0, 2).toBuffer().writeUInt16LE(CONSOLE_SCREEN_WIDTH); coordScreen.Deref(2, 2).toBuffer().writeUInt16LE(CONSOLE_SCREEN_HEIGHT); @@ -172,10 +205,21 @@ function windows_terminal() { rect.Deref(4, 2).toBuffer().writeUInt16LE(CONSOLE_SCREEN_WIDTH - 1); rect.Deref(6, 2).toBuffer().writeUInt16LE(CONSOLE_SCREEN_HEIGHT - 1); - if (this._kernel32.SetConsoleWindowInfo(this._stdoutput, 1, rect).Val == 0) { + // + // Reference for SetConsoleWindowInfo can be found at: + // https://learn.microsoft.com/en-us/windows/console/setconsolewindowinfo + // + if (this._kernel32.SetConsoleWindowInfo(this._stdoutput, 1, rect).Val == 0) + { throw ('Failed to set Console Screen Size'); } - if (this._kernel32.SetConsoleScreenBufferSize(this._stdoutput, coordScreen.Deref(0, 4).toBuffer().readUInt32LE()).Val == 0) { + + // + // Reference for SetConsoleScreenBufferSize can be found at: + // https://learn.microsoft.com/en-us/windows/console/setconsolescreenbuffersize + // + if (this._kernel32.SetConsoleScreenBufferSize(this._stdoutput, coordScreen.Deref(0, 4).toBuffer().readUInt32LE()).Val == 0) + { throw ('Failed to set Console Buffer Size'); } @@ -278,8 +322,16 @@ function windows_terminal() { return (this.stopping); } + // + // This function uses the SetWinEventHook() method, so we can hook + // All events between EVENT_CONSOLE_CARET and EVENT_CONSOLE_END_APPLICATION + // this._hookThread = function () { + // + // Reference for SetWinEventHook() can be found at: + // https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-setwineventhook + // var ret = new promise(function (res, rej) { this._res = res; this._rej = rej; }); ret.userArgs = []; for (var a in arguments) @@ -292,24 +344,43 @@ function windows_terminal() { var p = this._user32.SetWinEventHook.async(EVENT_CONSOLE_CARET, EVENT_CONSOLE_END_APPLICATION, 0, this._ConsoleWinEventProc, 0, 0, WINEVENT_OUTOFCONTEXT | WINEVENT_SKIPOWNPROCESS); p.ready = ret; p.terminal = this; - p.then(function (hwinEventHook) { - if (hwinEventHook.Val == 0) { + p.then(function (hwinEventHook) + { + if (hwinEventHook.Val == 0) + { this.ready._rej('Error calling SetWinEventHook'); - } else { + } else + { this.terminal.hwinEventHook = hwinEventHook; this.ready._res(); this.terminal._GetMessage(); } }); - this._ConsoleWinEventProc.on('GlobalCallback', function (hhook, dwEvent, hwnd, idObject, idChild, idEventThread, swmsEventTime) { + // + // This is the WINEVENTPROC callback for the WinEventHook we set + // + this._ConsoleWinEventProc.on('GlobalCallback', function (hhook, dwEvent, hwnd, idObject, idChild, idEventThread, swmsEventTime) + { + // + // Reference for WINEVENTPROC can be found at: + // https://learn.microsoft.com/en-us/windows/win32/api/winuser/nc-winuser-wineventproc + // if (!this.terminal.hwinEventHook || this.terminal.hwinEventHook.Val != hhook.Val) { return; } var buffer = null; - switch (dwEvent.Val) { + // + // Reference for Console WinEvents can be found at: + // https://learn.microsoft.com/en-us/windows/console/console-winevents + // + + switch (dwEvent.Val) + { case EVENT_CONSOLE_CARET: + // The console caret has moved break; case EVENT_CONSOLE_UPDATE_REGION: + // More than one character has changed if (!this.terminal.connected) { this.terminal.connected = true; this.terminal._stream._promise._res(); @@ -321,25 +392,30 @@ function windows_terminal() { } break; case EVENT_CONSOLE_UPDATE_SIMPLE: + // A single character has changed //console.log('UPDATE SIMPLE: [X: ' + LOWORD(idObject.Val) + ' Y: ' + HIWORD(idObject.Val) + ' Char: ' + LOWORD(idChild.Val) + ' Attr: ' + HIWORD(idChild.Val) + ']'); var simplebuffer = { data: [ Buffer.alloc(1, LOWORD(idChild.Val)) ], attributes: [ HIWORD(idChild.Val) ], width: 1, height: 1, x: LOWORD(idObject.Val), y: HIWORD(idObject.Val) }; this.terminal._SendDataBuffer(simplebuffer); break; case EVENT_CONSOLE_UPDATE_SCROLL: + // The console has scrolled //console.log('UPDATE SCROLL: [dx: ' + idObject.Val + ' dy: ' + idChild.Val + ']'); this.terminal._SendScroll(idObject.Val, idChild.Val); break; case EVENT_CONSOLE_LAYOUT: + // The console layout has changed. //console.log('CONSOLE_LAYOUT'); //snprintf( Buf, 512, "Event Console LAYOUT!\r\n"); //SendLayout(); break; case EVENT_CONSOLE_START_APPLICATION: + // A new console process has started //console.log('START APPLICATION: [PID: ' + idObject.Val + ' CID: ' + idChild.Val + ']'); //snprintf( Buf, 512, "Event Console START APPLICATION!\r\nProcess ID: %d - Child ID: %d\r\n\r\n", (int)idObject, (int)idChild); //SendConsoleEvent(dwEvent, idObject, idChild); break; case EVENT_CONSOLE_END_APPLICATION: + // A console process has exited if (idObject.Val == this.terminal._hProcessID) { //console.log('END APPLICATION: [PID: ' + idObject.Val + ' CID: ' + idChild.Val + ']'); @@ -360,18 +436,44 @@ function windows_terminal() { return (ret); } - this._GetMessage = function () { + // Retrieves a message from the calling thread's message queue + this._GetMessage = function () + { + // + // Reference for GetMessage() can be found at: + // https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getmessage + // + + // + // Reference for TranslateMessage() can be found at: + // https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-translatemessage + // + + // + // Reference for DispatchMessage() can be found at: + // https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-dispatchmessage + // + if (this._user32.abort) { console.log('aborting loop'); return; } - this._user32.GetMessageA.async(this._user32.SetWinEventHook.async, MSG, 0, 0, 0).then(function (ret) { + this._user32.GetMessageA.async(this._user32.SetWinEventHook.async, MSG, 0, 0, 0).then(function (ret) + { //console.log('GetMessage Response'); - if (ret.Val != 0) { - if (ret.Val == -1) { + if (ret.Val != 0) + { + if (ret.Val == -1) + { // handle the error and possibly exit - } else { + } + else + { + // Translates virtual-key messages into character messages //console.log('TranslateMessage'); - this.nativeProxy._user32.TranslateMessage.async(this.nativeProxy.user32.SetWinEventHook.async, MSG).then(function () { + this.nativeProxy._user32.TranslateMessage.async(this.nativeProxy.user32.SetWinEventHook.async, MSG).then(function () + { + // Dispatches a message to a window procedure //console.log('DispatchMessage'); - this.nativeProxy._user32.DispatchMessageA.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); @@ -384,7 +486,8 @@ function windows_terminal() { 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) { + if (this.nativeProxy.terminal._kernel32.TerminateProcess(this.nativeProxy.terminal._hProcess, 1067).Val == 0) + { var e = this.nativeProxy.terminal._kernel32.GetLastError().Val; console.log('Unable to kill Terminal Process, error: ' + e); } @@ -394,22 +497,38 @@ function windows_terminal() { console.log('REJECTED_UnhookWinEvent: ' + err); }); } - }, function (err) { + }, function (err) + { // Get Message Failed console.log('REJECTED_GETMessage: ' + err); }); } - this._WriteBuffer = function (buf) { - for (var i = 0; i < buf.length; ++i) { - if (typeof (buf) == 'string') { + + this._WriteBuffer = function (buf) + { + for (var i = 0; i < buf.length; ++i) + { + if (typeof (buf) == 'string') + { this._WriteCharacter(buf.charCodeAt(i), false); - } else { + } else + { this._WriteCharacter(buf[i], false); } } } this._WriteCharacter = function (key, bControlKey) { + // + // Reference for WriteConsoleInput() can be found at: + // https://learn.microsoft.com/en-us/windows/console/writeconsoleinput + // + + // + // Reference for INPUT_RECORD can be found at: + // https://learn.microsoft.com/en-us/windows/console/input-record-str + // + var rec = GM.CreateVariable(20); rec.Deref(0, 2).toBuffer().writeUInt16LE(KEY_EVENT); // rec.EventType rec.Deref(4, 4).toBuffer().writeUInt16LE(1); // rec.Event.KeyEvent.bKeyDown @@ -427,62 +546,78 @@ function windows_terminal() { } // Get the current visible screen buffer - this._GetScreenBuffer = function (sx, sy, ex, ey) { + this._GetScreenBuffer = function (sx, sy, ex, ey) + { + // + // Reference for GetConsoleScreenBufferInfo() can be found at: + // https://learn.microsoft.com/en-us/windows/console/getconsolescreenbufferinfo + // + + // + // Reference for ReadConsoleOutput() can be found at: + // https://learn.microsoft.com/en-us/windows/console/readconsoleoutput + // + var info = GM.CreateVariable(22); if (this._kernel32.GetConsoleScreenBufferInfo(this._stdoutput, info).Val == 0) { throw ('Error getting screen buffer info'); } - + var nWidth = info.Deref(14, 2).toBuffer().readUInt16LE() - info.Deref(10, 2).toBuffer().readUInt16LE() + 1; var nHeight = info.Deref(16, 2).toBuffer().readUInt16LE() - info.Deref(12, 2).toBuffer().readUInt16LE() + 1; - - if (arguments[3] == null) { + + if (arguments[3] == null) + { // Use Default Parameters sx = 0; sy = 0; ex = nWidth - 1; ey = nHeight - 1; - } else { + } else + { if (this._scrx != 0) { sx += this._scrx; ex += this._scrx; } if (this._scry != 0) { sy += this._scry; ey += this._scry; } this._scrx = this._scry = 0; } - + var nBuffer = GM.CreateVariable((ex - sx + 1) * (ey - sy + 1) * 4); var size = GM.CreateVariable(4); size.Deref(0, 2).toBuffer().writeUInt16LE(ex - sx + 1, 0); size.Deref(2, 2).toBuffer().writeUInt16LE(ey - sy + 1, 0); - + var startCoord = GM.CreateVariable(4); startCoord.Deref(0, 2).toBuffer().writeUInt16LE(0, 0); startCoord.Deref(2, 2).toBuffer().writeUInt16LE(0, 0); - + var region = GM.CreateVariable(8); region.buffer = region.toBuffer(); region.buffer.writeUInt16LE(sx, 0); region.buffer.writeUInt16LE(sy, 2); region.buffer.writeUInt16LE(ex, 4); region.buffer.writeUInt16LE(ey, 6); - - if (this._kernel32.ReadConsoleOutputA(this._stdoutput, nBuffer, size.Deref(0, 4).toBuffer().readUInt32LE(), startCoord.Deref(0, 4).toBuffer().readUInt32LE(), region).Val == 0) { + + if (this._kernel32.ReadConsoleOutputA(this._stdoutput, nBuffer, size.Deref(0, 4).toBuffer().readUInt32LE(), startCoord.Deref(0, 4).toBuffer().readUInt32LE(), region).Val == 0) + { throw ('Unable to read Console Output'); } - + // Lets convert the buffer into something simpler //var retVal = { data: Buffer.alloc((dw - dx + 1) * (dh - dy + 1)), attributes: Buffer.alloc((dw - dx + 1) * (dh - dy + 1)), width: dw - dx + 1, height: dh - dy + 1, x: dx, y: dy }; - + var retVal = { data: [], attributes: [], width: ex - sx + 1, height: ey - sy + 1, x: sx, y: sy }; var x, y, line, ifo, tmp, lineWidth = ex - sx + 1; - - for (y = 0; y <= (ey - sy) ; ++y) { + + for (y = 0; y <= (ey - sy) ; ++y) + { retVal.data.push(Buffer.alloc(lineWidth)); retVal.attributes.push(Buffer.alloc(lineWidth)); - + line = nBuffer.Deref(y * lineWidth * 4, lineWidth * 4).toBuffer(); - for (x = 0; x < lineWidth; ++x) { + for (x = 0; x < lineWidth; ++x) + { retVal.data.peek()[x] = line[x * 4]; retVal.attributes.peek()[x] = line[2 + (x * 4)]; } } - + return (retVal); } @@ -507,6 +642,11 @@ function windows_terminal() { this._SendScroll = function _SendScroll(dx, dy) { + // + // Reference for GetConsoleScreenBufferInfo() can be found at: + // https://learn.microsoft.com/en-us/windows/console/getconsolescreenbufferinfo + // + if (this._scrollTimer || this._stream == null) { return; } var info = GM.CreateVariable(22); @@ -546,12 +686,15 @@ function LOWORD(val) { return (val & 0xFFFF); } function HIWORD(val) { return ((val >> 16) & 0xFFFF); } function GetEsc(op, args) { return (Buffer.from('\x1B[' + args.join(';') + op)); } function MeshConsole(msg) { require('MeshAgent').SendCommand({ "action": "msg", "type": "console", "value": JSON.stringify(msg) }); } -function TranslateLine(x, y, data, attributes) { +function TranslateLine(x, y, data, attributes) +{ var i, fcolor, bcolor, rcolor, fbright, bbright, lastAttr, fc, bc, rc, fb, bb, esc = [], output = [GetEsc('H', [y, x])]; - if (typeof attributes == 'number') { attributes = [ attributes ]; } // If we get a single attribute, turn it into an array. + if (typeof attributes == 'number') { attributes = [attributes]; } // If we get a single attribute, turn it into an array. - for (i = 0; i < data.length; i++) { - if (lastAttr != attributes[i]) { // To boost performance, if the attribute is the same as the last one, skip this entire part. + for (i = 0; i < data.length; i++) + { + if (lastAttr != attributes[i]) + { // To boost performance, if the attribute is the same as the last one, skip this entire part. fc = (attributes[i] & 0x0007); fc = ((fc & 0x0001) << 2) + (fc & 0x0002) + ((fc & 0x0004) >> 2); // Foreground color bc = (attributes[i] & 0x0070) >> 4; @@ -559,19 +702,19 @@ function TranslateLine(x, y, data, attributes) { rc = (attributes[i] & 0x4000); // Reverse color set fb = (attributes[i] & 0x0008) >> 3; // Bright foreground set bb = (attributes[i] & 0x0080); // Bright background set - + if (rc != rcolor) { if (rc != 0) { esc.push(7); } else { esc.push(0); fcolor = 7; bcolor = 0; fbright = 0; bbright = 0; } rcolor = rc; } // Reverse Color if (fc != fcolor) { esc.push(fc + 30); fcolor = fc; } // Set the foreground color if needed if (bc != bcolor) { esc.push(bc + 40); bcolor = bc; } // Set the background color if needed if (fb != fbright) { esc.push(2 - fb); fbright = fb; } // Set the bright foreground color if needed - if (bb != bbright) { if (bb == 0) { esc.push(bcolor + 40); } else { esc.push(bcolor + 100); bbright = bb; } } // Set bright Background color if needed + if (bb != bbright) { if (bb == 0) { esc.push(bcolor + 40); } else { esc.push(bcolor + 100); bbright = bb; } } // Set bright Background color if needed if (esc.length > 0) { output.push(GetEsc('m', esc)); esc = []; } lastAttr = attributes[i]; } output.push(Buffer.from(String.fromCharCode(data[i]))); } - + return Buffer.concat(output); } diff --git a/agents/modules_meshcore/win-virtual-terminal.js b/agents/modules_meshcore/win-virtual-terminal.js index 8709af71c2..818ab6a0b5 100644 --- a/agents/modules_meshcore/win-virtual-terminal.js +++ b/agents/modules_meshcore/win-virtual-terminal.js @@ -47,20 +47,20 @@ function vt() var GM = require('_GenericMarshal'); var k32 = GM.CreateNativeProxy('kernel32.dll'); - k32.CreateMethod('CancelIoEx'); - k32.CreateMethod('CreatePipe'); - k32.CreateMethod('CreateProcessW'); - k32.CreateMethod('CreatePseudoConsole'); - k32.CreateMethod('CloseHandle'); - k32.CreateMethod('ClosePseudoConsole'); - k32.CreateMethod('GetProcessHeap'); - k32.CreateMethod('HeapAlloc'); - k32.CreateMethod('InitializeProcThreadAttributeList'); - k32.CreateMethod('ResizePseudoConsole'); - k32.CreateMethod('UpdateProcThreadAttribute'); - k32.CreateMethod('WriteFile'); - k32.CreateMethod('ReadFile'); - k32.CreateMethod('TerminateProcess'); + k32.CreateMethod('CancelIoEx'); // https://learn.microsoft.com/en-us/windows/win32/fileio/cancelioex-func + k32.CreateMethod('CreatePipe'); // https://learn.microsoft.com/en-us/windows/win32/api/namedpipeapi/nf-namedpipeapi-createpipe + k32.CreateMethod('CreateProcessW'); // https://learn.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-createprocessw + k32.CreateMethod('CreatePseudoConsole'); // https://learn.microsoft.com/en-us/windows/console/createpseudoconsole + k32.CreateMethod('CloseHandle'); // https://learn.microsoft.com/en-us/windows/win32/api/handleapi/nf-handleapi-closehandle + k32.CreateMethod('ClosePseudoConsole'); // https://learn.microsoft.com/en-us/windows/console/closepseudoconsole + k32.CreateMethod('GetProcessHeap'); // https://learn.microsoft.com/en-us/windows/win32/api/heapapi/nf-heapapi-getprocessheap + k32.CreateMethod('HeapAlloc'); // https://learn.microsoft.com/en-us/windows/win32/api/heapapi/nf-heapapi-heapalloc + k32.CreateMethod('InitializeProcThreadAttributeList'); // https://learn.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-initializeprocthreadattributelist + k32.CreateMethod('ResizePseudoConsole'); // https://learn.microsoft.com/en-us/windows/console/resizepseudoconsole + k32.CreateMethod('UpdateProcThreadAttribute'); // https://learn.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-updateprocthreadattribute + k32.CreateMethod('WriteFile'); // https://learn.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-writefile + k32.CreateMethod('ReadFile'); // https://learn.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-readfile + k32.CreateMethod('TerminateProcess'); // https://learn.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-terminateprocess var ret = { _h: GM.CreatePointer(), _consoleInput: GM.CreatePointer(), _consoleOutput: GM.CreatePointer(), _input: GM.CreatePointer(), _output: GM.CreatePointer(), k32: k32 }; var attrSize = GM.CreateVariable(8); @@ -77,18 +77,31 @@ function vt() throw ('Error calling CreatePseudoConsole()'); } + // + // Reference for STARTUPINFOEXW + // https://learn.microsoft.com/en-us/windows/win32/api/winbase/ns-winbase-startupinfoexw + // + + // + // Reference for STARTUPINFOW + // https://learn.microsoft.com/en-us/windows/win32/api/processthreadsapi/ns-processthreadsapi-startupinfow + // + k32.InitializeProcThreadAttributeList(0, 1, 0, attrSize); attrList = GM.CreateVariable(attrSize.toBuffer().readUInt32LE()); - var startupinfoex = GM.CreateVariable(GM.PointerSize == 8 ? 112 : 72); - startupinfoex.toBuffer().writeUInt32LE(GM.PointerSize == 8 ? 112 : 72, 0); - attrList.pointerBuffer().copy(startupinfoex.Deref(GM.PointerSize == 8 ? 104 : 68, GM.PointerSize).toBuffer()); + var startupinfoex = GM.CreateVariable(GM.PointerSize == 8 ? 112 : 72); // Create Structure, 64 bits is 112 bytes, 32 bits is 72 bytes + startupinfoex.toBuffer().writeUInt32LE(GM.PointerSize == 8 ? 112 : 72, 0); // Write buffer size + attrList.pointerBuffer().copy(startupinfoex.Deref(GM.PointerSize == 8 ? 104 : 68, GM.PointerSize).toBuffer()); // Write the reference to STARTUPINFOEX if (k32.InitializeProcThreadAttributeList(attrList, 1, 0, attrSize).Val != 0) { if (k32.UpdateProcThreadAttribute(attrList, 0, PROC_THREAD_ATTRIBUTE_PSEUDOCONSOLE, ret._h.Deref(), GM.PointerSize, 0, 0).Val != 0) { - if (k32.CreateProcessW(0, GM.CreateVariable(path, { wide: true }), 0, 0, 1, EXTENDED_STARTUPINFO_PRESENT, 0, 0, startupinfoex, pi).Val != 0) + if (k32.CreateProcessW(0, GM.CreateVariable(path, { wide: true }), 0, 0, 1, EXTENDED_STARTUPINFO_PRESENT, 0, 0, startupinfoex, pi).Val != 0) // Create the process to run in the pseudoconsole { + // + // Create a Stream Object, to be able to read/write data to the pseudoconsole + // ret._startupinfoex = startupinfoex; ret._process = pi.Deref(0); ret._pid = pi.Deref(GM.PointerSize == 4 ? 8 : 16, 4).toBuffer().readUInt32LE(); @@ -111,6 +124,10 @@ function vt() flush(); } }); + + // + // The ProcessInfo object is signaled when the process exits + // ds._obj = ret; ret._waiter = require('DescriptorEvents').addDescriptor(pi.Deref(0)); ret._waiter.ds = ds; @@ -151,6 +168,7 @@ function vt() ds._rpbufRead = GM.CreateVariable(4); ds.__read = function __read() { + // Asyncronously read data from the pseudoconsole this._rp = this.terminal.k32.ReadFile.async(this.terminal._output.Deref(), this._rpbuf, this._rpbuf._size, this._rpbufRead, 0); this._rp.then(function () { @@ -173,6 +191,8 @@ function vt() } throw ('Internal Error'); } + + // This evaluates whether or not the powershell binary exists this.PowerShellCapable = function () { if (require('os').arch() == 'x64') @@ -184,10 +204,14 @@ function vt() return (require('fs').existsSync(process.env['windir'] + '\\System32\\WindowsPowerShell\\v1.0\\powershell.exe')); } } + + // Start the PseudoConsole with the Command Prompt this.Start = function Start(CONSOLE_SCREEN_WIDTH, CONSOLE_SCREEN_HEIGHT) { return (this.Create(process.env['windir'] + '\\System32\\cmd.exe', CONSOLE_SCREEN_WIDTH, CONSOLE_SCREEN_HEIGHT)); } + + // Start the PseduoConsole with PowerShell this.StartPowerShell = function StartPowerShell(CONSOLE_SCREEN_WIDTH, CONSOLE_SCREEN_HEIGHT) { if (require('os').arch() == 'x64') From 3c5bc7ef3c65e851436a754426defb5d8eab7826 Mon Sep 17 00:00:00 2001 From: Bryan Roe Date: Wed, 19 Oct 2022 23:28:13 -0700 Subject: [PATCH 41/41] Updated 'sysnative' workaround for 32 bit agent on 64 bit windows, to include description explaining what is going on. --- agents/meshcore.js | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/agents/meshcore.js b/agents/meshcore.js index b8cb47c26e..d2fca767a7 100644 --- a/agents/meshcore.js +++ b/agents/meshcore.js @@ -47,6 +47,10 @@ var MESHRIGHT_NODESKTOP = 65536; var pendingSetClip = false; // This is a temporary hack to prevent multiple setclips at the same time to stop the agent from crashing. +// +// This is a helper function used by the 32 bit Windows Agent, when running on 64 bit windows. It will check if the agent is already patched for this +// and will use this helper if it is not. This helper will inject 'sysnative' into the results when calling readdirSync() on %windir%. +// function __readdirSync_fix(path) { var sysnative = false; @@ -59,15 +63,16 @@ function __readdirSync_fix(path) if (process.platform == 'win32' && require('_GenericMarshal').PointerSize == 4 && require('os').arch() == 'x64') { - if(require('fs').readdirSync.version == null) + if (require('fs').readdirSync.version == null) { + // + // 32 Bit Windows Agent on 64 bit Windows has not been patched for sysnative issue, so lets use our own solution + // require('fs').__readdirSync_old = require('fs').readdirSync; require('fs').readdirSync = __readdirSync_fix; } } - - function bcdOK() { if (process.platform != 'win32') { return (false); } if (require('os').arch() == 'x64') {