Compare commits
21 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
2cf0f06601 | ||
![]() |
753242a949 | ||
![]() |
2e0a42a6a1 | ||
![]() |
08488cee15 | ||
![]() |
e0f2957e96 | ||
![]() |
4f91148753 | ||
![]() |
90d0bbf020 | ||
![]() |
5e70db3d7d | ||
![]() |
0777195423 | ||
![]() |
9f22576136 | ||
![]() |
6302b9f5ef | ||
![]() |
9f3f5c2f9b | ||
![]() |
2cff41f719 | ||
![]() |
c4b006b212 | ||
![]() |
6c1fa2f061 | ||
![]() |
830f418888 | ||
![]() |
f00b03b973 | ||
![]() |
8e6858778b | ||
![]() |
e51e4ccf83 | ||
![]() |
150e1eda22 | ||
![]() |
7f9e3f0f7d |
2
.github/workflows/ci.yml
vendored
2
.github/workflows/ci.yml
vendored
@@ -18,7 +18,7 @@ jobs:
|
||||
|
||||
- uses: actions/setup-go@v4
|
||||
with:
|
||||
go-version: '1.20.4'
|
||||
go-version: '1.20.7'
|
||||
|
||||
- name: Ensure linux agent compiles
|
||||
run: |
|
||||
|
14
LICENSE.md
14
LICENSE.md
@@ -1,11 +1,11 @@
|
||||
### Tactical RMM License Version 1.0
|
||||
|
||||
Text of license:   Copyright © 2022 AmidaWare LLC. All rights reserved.<br>
|
||||
Text of license:   Copyright © 2023 AmidaWare Inc. All rights reserved.<br>
|
||||
          Amending the text of this license is not permitted.
|
||||
|
||||
Trade Mark:    "Tactical RMM" is a trade mark of AmidaWare LLC.
|
||||
Trade Mark:    "Tactical RMM" is a trade mark of AmidaWare Inc.
|
||||
|
||||
Licensor:      AmidaWare LLC of 1968 S Coast Hwy PMB 3847 Laguna Beach, CA, USA.
|
||||
Licensor:      AmidaWare Inc. of 1968 S Coast Hwy PMB 3847 Laguna Beach, CA, USA.
|
||||
|
||||
Licensed Software:  The software known as Tactical RMM Version v0.12.0 (and all subsequent releases and versions) and the Tactical RMM Agent v2.0.0 (and all subsequent releases and versions).
|
||||
|
||||
@@ -26,7 +26,7 @@ This license does not allow the functionality of the Licensed Software (whether
|
||||
* the offering of installation and/or configuration services;
|
||||
* the offer for sale, distribution or sale of any service or product (whether or not branded as Tactical RMM).
|
||||
|
||||
The prior written approval of AmidaWare LLC must be obtained for all commercial use and/or for-profit service use of the (i) Licensed Software (whether in whole or in part), (ii) a modified version of the Licensed Software and/or (iii) a derivative work.
|
||||
The prior written approval of AmidaWare Inc. must be obtained for all commercial use and/or for-profit service use of the (i) Licensed Software (whether in whole or in part), (ii) a modified version of the Licensed Software and/or (iii) a derivative work.
|
||||
|
||||
The terms of this license apply to all copies of the Licensed Software (including modified versions) and derivative works.
|
||||
|
||||
@@ -38,7 +38,7 @@ If a derivative work is created which is based on or otherwise incorporates all
|
||||
### 4. Copyright Notice
|
||||
The following copyright notice shall be included in all copies of the Licensed Software:
|
||||
|
||||
   Copyright © 2022 AmidaWare LLC.
|
||||
   Copyright © 2023 AmidaWare Inc.
|
||||
|
||||
   Licensed under the Tactical RMM License Version 1.0 (the “License”).<br>
|
||||
   You may only use the Licensed Software in accordance with the License.<br>
|
||||
@@ -54,13 +54,13 @@ THE FOLLOWING EXCLUSIONS SHALL APPLY TO THE FULLEST EXTENT PERMISSIBLE AT LAW.
|
||||
This license shall terminate with immediate effect if there is a material breach of any of its terms.
|
||||
|
||||
### 8. No partnership, agency or joint venture
|
||||
Nothing in this license agreement is intended to, or shall be deemed to, establish any partnership or joint venture or any relationship of agency between AmidaWare LLC and any other person.
|
||||
Nothing in this license agreement is intended to, or shall be deemed to, establish any partnership or joint venture or any relationship of agency between AmidaWare Inc. and any other person.
|
||||
|
||||
### 9. No endorsement
|
||||
The names of the authors and/or the copyright holders must not be used to promote or endorse any products or services which are in any way derived from the Licensed Software without prior written consent.
|
||||
|
||||
### 10. Trademarks
|
||||
No permission is granted to use the trademark “Tactical RMM” or any other trade name, trademark, service mark or product name of AmidaWare LLC except to the extent necessary to comply with the notice requirements in Section 4 (Copyright Notice).
|
||||
No permission is granted to use the trademark “Tactical RMM” or any other trade name, trademark, service mark or product name of AmidaWare Inc. except to the extent necessary to comply with the notice requirements in Section 4 (Copyright Notice).
|
||||
|
||||
### 11. Entire agreement
|
||||
This license contains the whole agreement relating to its subject matter.
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright 2022 AmidaWare LLC.
|
||||
Copyright 2023 AmidaWare Inc.
|
||||
|
||||
Licensed under the Tactical RMM License Version 1.0 (the “License”).
|
||||
You may only use the Licensed Software in accordance with the License.
|
||||
@@ -14,6 +14,7 @@ package agent
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"crypto/tls"
|
||||
"errors"
|
||||
"fmt"
|
||||
"math"
|
||||
@@ -73,6 +74,7 @@ type Agent struct {
|
||||
NatsProxyPort string
|
||||
NatsPingInterval int
|
||||
NatsWSCompression bool
|
||||
Insecure bool
|
||||
}
|
||||
|
||||
const (
|
||||
@@ -104,6 +106,11 @@ func New(logger *logrus.Logger, version string) *Agent {
|
||||
winTempDir := defaultWinTmpDir
|
||||
winRunAsUserTmpDir := defaultWinTmpDir
|
||||
|
||||
hostname, err := os.Hostname()
|
||||
if err != nil {
|
||||
hostname = info.Hostname
|
||||
}
|
||||
|
||||
var pybin string
|
||||
switch runtime.GOARCH {
|
||||
case "amd64":
|
||||
@@ -120,12 +127,20 @@ func New(logger *logrus.Logger, version string) *Agent {
|
||||
headers["Authorization"] = fmt.Sprintf("Token %s", ac.Token)
|
||||
}
|
||||
|
||||
insecure := ac.Insecure == "true"
|
||||
|
||||
restyC := resty.New()
|
||||
restyC.SetBaseURL(ac.BaseURL)
|
||||
restyC.SetCloseConnection(true)
|
||||
restyC.SetHeaders(headers)
|
||||
restyC.SetTimeout(15 * time.Second)
|
||||
restyC.SetDebug(logger.IsLevelEnabled(logrus.DebugLevel))
|
||||
if insecure {
|
||||
insecureConf := &tls.Config{
|
||||
InsecureSkipVerify: true,
|
||||
}
|
||||
restyC.SetTLSClientConfig(insecureConf)
|
||||
}
|
||||
|
||||
if len(ac.Proxy) > 0 {
|
||||
restyC.SetProxy(ac.Proxy)
|
||||
@@ -201,7 +216,7 @@ func New(logger *logrus.Logger, version string) *Agent {
|
||||
}
|
||||
|
||||
return &Agent{
|
||||
Hostname: info.Hostname,
|
||||
Hostname: hostname,
|
||||
BaseURL: ac.BaseURL,
|
||||
AgentID: ac.AgentID,
|
||||
ApiURL: ac.APIURL,
|
||||
@@ -231,6 +246,7 @@ func New(logger *logrus.Logger, version string) *Agent {
|
||||
NatsProxyPort: natsProxyPort,
|
||||
NatsPingInterval: natsPingInterval,
|
||||
NatsWSCompression: natsWsCompression,
|
||||
Insecure: insecure,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -254,7 +270,7 @@ type CmdOptions struct {
|
||||
func (a *Agent) NewCMDOpts() *CmdOptions {
|
||||
return &CmdOptions{
|
||||
Shell: "/bin/bash",
|
||||
Timeout: 30,
|
||||
Timeout: 60,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -322,38 +338,46 @@ func (a *Agent) CmdV2(c *CmdOptions) CmdStatus {
|
||||
}
|
||||
}()
|
||||
|
||||
statusChan := make(chan gocmd.Status, 1)
|
||||
// workaround for https://github.com/golang/go/issues/22315
|
||||
for i := 0; i < 5; i++ {
|
||||
<-envCmd.Start()
|
||||
|
||||
<-doneChan
|
||||
|
||||
status := envCmd.Status()
|
||||
|
||||
if errors.Is(status.Error, syscall.ETXTBSY) {
|
||||
a.Logger.Errorln("CmdV2 syscall.ETXTBSY, retrying...")
|
||||
time.Sleep(500 * time.Millisecond)
|
||||
} else {
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
go func() {
|
||||
select {
|
||||
case <-doneChan:
|
||||
for i := 0; i < 5; i++ {
|
||||
finalStatus := <-envCmd.Start()
|
||||
if errors.Is(finalStatus.Error, syscall.ETXTBSY) {
|
||||
a.Logger.Errorln("CmdV2 syscall.ETXTBSY, retrying...")
|
||||
time.Sleep(500 * time.Millisecond)
|
||||
continue
|
||||
}
|
||||
statusChan <- finalStatus
|
||||
return
|
||||
case <-ctx.Done():
|
||||
a.Logger.Debugf("Command timed out after %d seconds\n", c.Timeout)
|
||||
pid := envCmd.Status().PID
|
||||
a.Logger.Debugln("Killing process with PID", pid)
|
||||
KillProc(int32(pid))
|
||||
}
|
||||
}()
|
||||
|
||||
var finalStatus gocmd.Status
|
||||
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
a.Logger.Debugf("Command timed out after %d seconds\n", c.Timeout)
|
||||
pid := envCmd.Status().PID
|
||||
a.Logger.Debugln("Killing process with PID", pid)
|
||||
KillProc(int32(pid))
|
||||
finalStatus.Exit = 98
|
||||
ret := CmdStatus{
|
||||
Status: finalStatus,
|
||||
Stdout: CleanString(stdoutBuf.String()),
|
||||
Stderr: fmt.Sprintf("%s\nTimed out after %d seconds", CleanString(stderrBuf.String()), c.Timeout),
|
||||
}
|
||||
a.Logger.Debugf("%+v\n", ret)
|
||||
return ret
|
||||
case finalStatus = <-statusChan:
|
||||
// done
|
||||
}
|
||||
|
||||
// Wait for goroutine to print everything
|
||||
<-doneChan
|
||||
|
||||
ret := CmdStatus{
|
||||
Status: envCmd.Status(),
|
||||
Status: finalStatus,
|
||||
Stdout: CleanString(stdoutBuf.String()),
|
||||
Stderr: CleanString(stderrBuf.String()),
|
||||
}
|
||||
@@ -464,6 +488,12 @@ func (a *Agent) setupNatsOptions() []nats.Option {
|
||||
a.Logger.Errorln("NATS error:", err)
|
||||
a.Logger.Errorf("%+v\n", sub)
|
||||
}))
|
||||
if a.Insecure {
|
||||
insecureConf := &tls.Config{
|
||||
InsecureSkipVerify: true,
|
||||
}
|
||||
opts = append(opts, nats.Secure(insecureConf))
|
||||
}
|
||||
return opts
|
||||
}
|
||||
|
||||
|
@@ -2,7 +2,7 @@
|
||||
// +build !windows
|
||||
|
||||
/*
|
||||
Copyright 2022 AmidaWare LLC.
|
||||
Copyright 2023 AmidaWare Inc.
|
||||
|
||||
Licensed under the Tactical RMM License Version 1.0 (the “License”).
|
||||
You may only use the Licensed Software in accordance with the License.
|
||||
@@ -16,6 +16,7 @@ package agent
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"crypto/tls"
|
||||
"errors"
|
||||
"fmt"
|
||||
"os"
|
||||
@@ -160,6 +161,7 @@ func NewAgentConfig() *rmm.AgentConfig {
|
||||
NatsProxyPort: viper.GetString("natsproxyport"),
|
||||
NatsStandardPort: viper.GetString("natsstandardport"),
|
||||
NatsPingInterval: viper.GetInt("natspinginterval"),
|
||||
Insecure: viper.GetString("insecure"),
|
||||
}
|
||||
return ret
|
||||
}
|
||||
@@ -248,6 +250,12 @@ func (a *Agent) AgentUpdate(url, inno, version string) error {
|
||||
if len(a.Proxy) > 0 {
|
||||
rClient.SetProxy(a.Proxy)
|
||||
}
|
||||
if a.Insecure {
|
||||
insecureConf := &tls.Config{
|
||||
InsecureSkipVerify: true,
|
||||
}
|
||||
rClient.SetTLSClientConfig(insecureConf)
|
||||
}
|
||||
|
||||
r, err := rClient.R().SetOutput(f.Name()).Get(url)
|
||||
if err != nil {
|
||||
@@ -273,7 +281,7 @@ func (a *Agent) AgentUpdate(url, inno, version string) error {
|
||||
se := a.NewCMDOpts()
|
||||
se.Command = fmt.Sprintf("restorecon -rv %s", self)
|
||||
out := a.CmdV2(se)
|
||||
a.Logger.Debugln("%+v\n", out)
|
||||
a.Logger.Debugf("%+v\n", out)
|
||||
}
|
||||
|
||||
opts := a.NewCMDOpts()
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright 2022 AmidaWare LLC.
|
||||
Copyright 2023 AmidaWare Inc.
|
||||
|
||||
Licensed under the Tactical RMM License Version 1.0 (the “License”).
|
||||
You may only use the Licensed Software in accordance with the License.
|
||||
@@ -14,6 +14,7 @@ package agent
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"crypto/tls"
|
||||
"errors"
|
||||
"fmt"
|
||||
"os"
|
||||
@@ -68,6 +69,7 @@ func NewAgentConfig() *rmm.AgentConfig {
|
||||
natsStandardPort, _, _ := k.GetStringValue("NatsStandardPort")
|
||||
natsPingInterval, _, _ := k.GetStringValue("NatsPingInterval")
|
||||
npi, _ := strconv.Atoi(natsPingInterval)
|
||||
insecure, _, _ := k.GetStringValue("Insecure")
|
||||
|
||||
return &rmm.AgentConfig{
|
||||
BaseURL: baseurl,
|
||||
@@ -85,6 +87,7 @@ func NewAgentConfig() *rmm.AgentConfig {
|
||||
NatsProxyPort: natsProxyPort,
|
||||
NatsStandardPort: natsStandardPort,
|
||||
NatsPingInterval: npi,
|
||||
Insecure: insecure,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -158,23 +161,37 @@ func (a *Agent) RunScript(code string, shell string, args []string, timeout int,
|
||||
defer cancel()
|
||||
|
||||
var timedOut = false
|
||||
var token *wintoken.Token
|
||||
var envBlock *uint16
|
||||
usingEnvVars := len(envVars) > 0
|
||||
cmd := exec.Command(exe, cmdArgs...)
|
||||
if runasuser {
|
||||
token, err := wintoken.GetInteractiveToken(wintoken.TokenImpersonation)
|
||||
if err != nil {
|
||||
return "", err.Error(), 66, err
|
||||
token, err = wintoken.GetInteractiveToken(wintoken.TokenImpersonation)
|
||||
if err == nil {
|
||||
defer token.Close()
|
||||
cmd.SysProcAttr = &syscall.SysProcAttr{Token: syscall.Token(token.Token()), HideWindow: true}
|
||||
|
||||
if usingEnvVars {
|
||||
envBlock, err = CreateEnvironmentBlock(syscall.Token(token.Token()))
|
||||
if err == nil {
|
||||
defer DestroyEnvironmentBlock(envBlock)
|
||||
userEnv := EnvironmentBlockToSlice(envBlock)
|
||||
cmd.Env = userEnv
|
||||
} else {
|
||||
cmd.Env = os.Environ()
|
||||
}
|
||||
}
|
||||
}
|
||||
defer token.Close()
|
||||
cmd.SysProcAttr = &syscall.SysProcAttr{Token: syscall.Token(token.Token()), HideWindow: true}
|
||||
} else if usingEnvVars {
|
||||
cmd.Env = os.Environ()
|
||||
}
|
||||
|
||||
if usingEnvVars {
|
||||
cmd.Env = append(cmd.Env, envVars...)
|
||||
}
|
||||
cmd.Stdout = &outb
|
||||
cmd.Stderr = &errb
|
||||
|
||||
if len(envVars) > 0 {
|
||||
cmd.Env = os.Environ()
|
||||
cmd.Env = append(cmd.Env, envVars...)
|
||||
}
|
||||
|
||||
if cmdErr := cmd.Start(); cmdErr != nil {
|
||||
a.Logger.Debugln(cmdErr)
|
||||
return "", cmdErr.Error(), 65, cmdErr
|
||||
@@ -616,6 +633,12 @@ func (a *Agent) AgentUpdate(url, inno, version string) error {
|
||||
if len(a.Proxy) > 0 {
|
||||
rClient.SetProxy(a.Proxy)
|
||||
}
|
||||
if a.Insecure {
|
||||
insecureConf := &tls.Config{
|
||||
InsecureSkipVerify: true,
|
||||
}
|
||||
rClient.SetTLSClientConfig(insecureConf)
|
||||
}
|
||||
r, err := rClient.R().SetOutput(updater).Get(url)
|
||||
if err != nil {
|
||||
a.Logger.Errorln(err)
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright 2022 AmidaWare LLC.
|
||||
Copyright 2023 AmidaWare Inc.
|
||||
|
||||
Licensed under the Tactical RMM License Version 1.0 (the “License”).
|
||||
You may only use the Licensed Software in accordance with the License.
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright 2022 AmidaWare LLC.
|
||||
Copyright 2023 AmidaWare Inc.
|
||||
|
||||
Licensed under the Tactical RMM License Version 1.0 (the “License”).
|
||||
You may only use the Licensed Software in accordance with the License.
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright 2022 AmidaWare LLC.
|
||||
Copyright 2023 AmidaWare Inc.
|
||||
|
||||
Licensed under the Tactical RMM License Version 1.0 (the “License”).
|
||||
You may only use the Licensed Software in accordance with the License.
|
||||
|
24
agent/embed_darwin.go
Normal file
24
agent/embed_darwin.go
Normal file
@@ -0,0 +1,24 @@
|
||||
//go:build darwin
|
||||
// +build darwin
|
||||
|
||||
/*
|
||||
Copyright 2023 Amidaware Inc.
|
||||
|
||||
Licensed under the Tactical RMM License Version 1.0 (the “License”).
|
||||
You may only use the Licensed Software in accordance with the License.
|
||||
A copy of the License is available at:
|
||||
|
||||
https://license.tacticalrmm.com
|
||||
|
||||
*/
|
||||
|
||||
package agent
|
||||
|
||||
import _ "embed"
|
||||
|
||||
//go:embed scripts/macos_fix_mesh_install.sh
|
||||
var ventura_mesh_fix string
|
||||
|
||||
func (a *Agent) FixVenturaMesh() {
|
||||
a.RunScript(ventura_mesh_fix, "foo", []string{}, 45, false, []string{})
|
||||
}
|
17
agent/embed_stub.go
Normal file
17
agent/embed_stub.go
Normal file
@@ -0,0 +1,17 @@
|
||||
//go:build !darwin
|
||||
// +build !darwin
|
||||
|
||||
/*
|
||||
Copyright 2023 Amidaware Inc.
|
||||
|
||||
Licensed under the Tactical RMM License Version 1.0 (the “License”).
|
||||
You may only use the Licensed Software in accordance with the License.
|
||||
A copy of the License is available at:
|
||||
|
||||
https://license.tacticalrmm.com
|
||||
|
||||
*/
|
||||
|
||||
package agent
|
||||
|
||||
func (a *Agent) FixVenturaMesh() {}
|
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright 2022 AmidaWare LLC.
|
||||
Copyright 2023 AmidaWare Inc.
|
||||
|
||||
Licensed under the Tactical RMM License Version 1.0 (the “License”).
|
||||
You may only use the Licensed Software in accordance with the License.
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright 2022 AmidaWare LLC.
|
||||
Copyright 2023 AmidaWare Inc.
|
||||
|
||||
Licensed under the Tactical RMM License Version 1.0 (the “License”).
|
||||
You may only use the Licensed Software in accordance with the License.
|
||||
@@ -12,6 +12,7 @@ https://license.tacticalrmm.com
|
||||
package agent
|
||||
|
||||
import (
|
||||
"crypto/tls"
|
||||
"fmt"
|
||||
"io"
|
||||
"net/url"
|
||||
@@ -28,25 +29,27 @@ import (
|
||||
)
|
||||
|
||||
type Installer struct {
|
||||
Headers map[string]string
|
||||
RMM string
|
||||
ClientID int
|
||||
SiteID int
|
||||
Description string
|
||||
AgentType string
|
||||
Power bool
|
||||
RDP bool
|
||||
Ping bool
|
||||
Token string
|
||||
LocalMesh string
|
||||
Cert string
|
||||
Proxy string
|
||||
Timeout time.Duration
|
||||
SaltMaster string
|
||||
Silent bool
|
||||
NoMesh bool
|
||||
MeshDir string
|
||||
MeshNodeID string
|
||||
Headers map[string]string
|
||||
RMM string
|
||||
ClientID int
|
||||
SiteID int
|
||||
Description string
|
||||
AgentType string
|
||||
Power bool
|
||||
RDP bool
|
||||
Ping bool
|
||||
Token string
|
||||
LocalMesh string
|
||||
Cert string
|
||||
Proxy string
|
||||
Timeout time.Duration
|
||||
SaltMaster string
|
||||
Silent bool
|
||||
NoMesh bool
|
||||
MeshDir string
|
||||
MeshNodeID string
|
||||
Insecure bool
|
||||
NatsStandardPort string
|
||||
}
|
||||
|
||||
func (a *Agent) Install(i *Installer) {
|
||||
@@ -97,6 +100,14 @@ func (a *Agent) Install(i *Installer) {
|
||||
iClient.SetProxy(i.Proxy)
|
||||
}
|
||||
|
||||
insecureConf := &tls.Config{
|
||||
InsecureSkipVerify: true,
|
||||
}
|
||||
|
||||
if i.Insecure {
|
||||
iClient.SetTLSClientConfig(insecureConf)
|
||||
}
|
||||
|
||||
creds, cerr := iClient.R().Get(fmt.Sprintf("%s/api/v3/installer/", baseURL))
|
||||
if cerr != nil {
|
||||
a.installerMsg(cerr.Error(), "error", i.Silent)
|
||||
@@ -133,6 +144,10 @@ func (a *Agent) Install(i *Installer) {
|
||||
rClient.SetProxy(i.Proxy)
|
||||
}
|
||||
|
||||
if i.Insecure {
|
||||
rClient.SetTLSClientConfig(insecureConf)
|
||||
}
|
||||
|
||||
var installerMeshSystemEXE string
|
||||
if len(i.MeshDir) > 0 {
|
||||
installerMeshSystemEXE = filepath.Join(i.MeshDir, "MeshAgent.exe")
|
||||
@@ -186,6 +201,7 @@ func (a *Agent) Install(i *Installer) {
|
||||
} else {
|
||||
opts := a.NewCMDOpts()
|
||||
opts.Command = fmt.Sprintf("%s -install --installPath=%s", meshOutput, nixMeshDir)
|
||||
opts.Timeout = i.Timeout
|
||||
out := a.CmdV2(opts)
|
||||
if out.Status.Exit != 0 {
|
||||
a.Logger.Fatalln("Error installing mesh agent:", out.Stderr)
|
||||
@@ -229,7 +245,7 @@ func (a *Agent) Install(i *Installer) {
|
||||
a.Logger.Debugln("Agent token:", agentToken)
|
||||
a.Logger.Debugln("Agent PK:", agentPK)
|
||||
|
||||
createAgentConfig(baseURL, a.AgentID, i.SaltMaster, agentToken, strconv.Itoa(agentPK), i.Cert, i.Proxy, i.MeshDir)
|
||||
createAgentConfig(baseURL, a.AgentID, i.SaltMaster, agentToken, strconv.Itoa(agentPK), i.Cert, i.Proxy, i.MeshDir, i.NatsStandardPort, i.Insecure)
|
||||
time.Sleep(1 * time.Second)
|
||||
// refresh our agent with new values
|
||||
a = New(a.Logger, a.Version)
|
||||
|
@@ -2,7 +2,7 @@
|
||||
// +build !windows
|
||||
|
||||
/*
|
||||
Copyright 2022 AmidaWare LLC.
|
||||
Copyright 2023 AmidaWare Inc.
|
||||
|
||||
Licensed under the Tactical RMM License Version 1.0 (the “License”).
|
||||
You may only use the Licensed Software in accordance with the License.
|
||||
@@ -33,7 +33,7 @@ func (a *Agent) installerMsg(msg, alert string, silent bool) {
|
||||
}
|
||||
}
|
||||
|
||||
func createAgentConfig(baseurl, agentid, apiurl, token, agentpk, cert, proxy, meshdir string) {
|
||||
func createAgentConfig(baseurl, agentid, apiurl, token, agentpk, cert, proxy, meshdir, natsport string, insecure bool) {
|
||||
viper.SetConfigType("json")
|
||||
viper.Set("baseurl", baseurl)
|
||||
viper.Set("agentid", agentid)
|
||||
@@ -43,6 +43,10 @@ func createAgentConfig(baseurl, agentid, apiurl, token, agentpk, cert, proxy, me
|
||||
viper.Set("cert", cert)
|
||||
viper.Set("proxy", proxy)
|
||||
viper.Set("meshdir", meshdir)
|
||||
viper.Set("natsstandardport", natsport)
|
||||
if insecure {
|
||||
viper.Set("insecure", "true")
|
||||
}
|
||||
viper.SetConfigPermissions(0660)
|
||||
err := viper.SafeWriteConfigAs(etcConfig)
|
||||
if err != nil {
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright 2022 AmidaWare LLC.
|
||||
Copyright 2023 AmidaWare Inc.
|
||||
|
||||
Licensed under the Tactical RMM License Version 1.0 (the “License”).
|
||||
You may only use the Licensed Software in accordance with the License.
|
||||
@@ -21,7 +21,7 @@ import (
|
||||
"golang.org/x/sys/windows/registry"
|
||||
)
|
||||
|
||||
func createAgentConfig(baseurl, agentid, apiurl, token, agentpk, cert, proxy, meshdir string) {
|
||||
func createAgentConfig(baseurl, agentid, apiurl, token, agentpk, cert, proxy, meshdir, natsport string, insecure bool) {
|
||||
k, _, err := registry.CreateKey(registry.LOCAL_MACHINE, `SOFTWARE\TacticalRMM`, registry.ALL_ACCESS)
|
||||
if err != nil {
|
||||
log.Fatalln("Error creating registry key:", err)
|
||||
@@ -73,6 +73,20 @@ func createAgentConfig(baseurl, agentid, apiurl, token, agentpk, cert, proxy, me
|
||||
log.Fatalln("Error creating MeshDir registry key:", err)
|
||||
}
|
||||
}
|
||||
|
||||
if len(natsport) > 0 {
|
||||
err = k.SetStringValue("NatsStandardPort", natsport)
|
||||
if err != nil {
|
||||
log.Fatalln("Error creating NatsStandardPort registry key:", err)
|
||||
}
|
||||
}
|
||||
|
||||
if insecure {
|
||||
err = k.SetStringValue("Insecure", "true")
|
||||
if err != nil {
|
||||
log.Fatalln("Error creating Insecure registry key:", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (a *Agent) checkExistingAndRemove(silent bool) {
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright 2022 AmidaWare LLC.
|
||||
Copyright 2023 AmidaWare Inc.
|
||||
|
||||
Licensed under the Tactical RMM License Version 1.0 (the “License”).
|
||||
You may only use the Licensed Software in accordance with the License.
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright 2022 AmidaWare LLC.
|
||||
Copyright 2023 AmidaWare Inc.
|
||||
|
||||
Licensed under the Tactical RMM License Version 1.0 (the “License”).
|
||||
You may only use the Licensed Software in accordance with the License.
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright 2022 AmidaWare LLC.
|
||||
Copyright 2023 AmidaWare Inc.
|
||||
|
||||
Licensed under the Tactical RMM License Version 1.0 (the “License”).
|
||||
You may only use the Licensed Software in accordance with the License.
|
||||
|
90
agent/scripts/macos_fix_mesh_install.sh
Normal file
90
agent/scripts/macos_fix_mesh_install.sh
Normal file
@@ -0,0 +1,90 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# source: https://github.com/amidaware/community-scripts/blob/main/scripts_staging/macos_fix_mesh_install.sh
|
||||
# author: https://github.com/NiceGuyIT
|
||||
|
||||
# This script fixes MeshAgent issue #161: MacOS Ventura - Not starting meshagent on boot (Maybe Solved)
|
||||
# https://github.com/Ylianst/MeshAgent/issues/161
|
||||
#
|
||||
# The following actions are taken:
|
||||
# 1) Add the eXecute bit for directory traversal for the installation directory. This allows regular users
|
||||
# access to run the binary inside the directory, fixing the "meshagent" LaunchAgent integration with the
|
||||
# user.
|
||||
# 2) Rename the LaunchAgent "meshagent.plist" to prevent conflicts with the LaunchDaemon "meshagent.plist".
|
||||
# This may not be needed but is done for good measure.
|
||||
# 3) Rename the service Label inside the plist. Using "defaults" causes the plist to be rewritten in plist
|
||||
# format, not ascii.
|
||||
#
|
||||
# Here's the original plist from my install.
|
||||
# <?xml version="1.0" encoding="UTF-8"?>
|
||||
# <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
# <plist version="1.0">
|
||||
# <dict>
|
||||
# <key>Label</key>
|
||||
# <string>meshagent</string>
|
||||
# <key>ProgramArguments</key>
|
||||
# <array>
|
||||
# <string>/opt/tacticalmesh/meshagent</string>
|
||||
# <string>-kvm1</string>
|
||||
# </array>
|
||||
#
|
||||
# <key>WorkingDirectory</key>
|
||||
# <string>/opt/tacticalmesh</string>
|
||||
#
|
||||
# <key>RunAtLoad</key>
|
||||
# <true/>
|
||||
# <key>LimitLoadToSessionType</key>
|
||||
# <array>
|
||||
# <string>LoginWindow</string>
|
||||
# </array>
|
||||
# <key>KeepAlive</key>
|
||||
# <dict>
|
||||
# <key>Crashed</key>
|
||||
# <true/>
|
||||
# </dict>
|
||||
# </dict>
|
||||
# </plist>
|
||||
|
||||
|
||||
mesh_install_dir="/opt/tacticalmesh/"
|
||||
mesh_agent_plist_old="/Library/LaunchAgents/meshagent.plist"
|
||||
mesh_agent_plist="/Library/LaunchAgents/meshagent-agent.plist"
|
||||
mesh_daemon_plist="/Library/LaunchDaemons/meshagent.plist"
|
||||
|
||||
if [ ! -f "${mesh_daemon_plist}" ]
|
||||
then
|
||||
echo "meshagent LaunchDaemon does not exist to cause the duplicate service name issue. Exiting."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if /usr/bin/stat -f "%Sp" "${mesh_install_dir}" | grep -v 'x$' >/dev/null
|
||||
then
|
||||
echo "Fixing permissions on meshagent installation directory: ${mesh_install_dir}"
|
||||
chmod o+X "${mesh_install_dir}"
|
||||
else
|
||||
echo "No action taken. Permissions on meshagent installation directory have already been fixed."
|
||||
fi
|
||||
echo
|
||||
|
||||
if [ -f "${mesh_agent_plist_old}" ]
|
||||
then
|
||||
echo "Renaming agent plist: ${mesh_agent_plist_old}"
|
||||
mv "${mesh_agent_plist_old}" "${mesh_agent_plist}"
|
||||
else
|
||||
echo "No action taken. meshagent.plist was already renamed: ${mesh_agent_plist}"
|
||||
fi
|
||||
echo
|
||||
|
||||
# New file has to exist before renaming the label.
|
||||
if [ -f "${mesh_agent_plist}" ]
|
||||
then
|
||||
label=$(defaults read "${mesh_agent_plist}" Label)
|
||||
if [ "${label}" != "meshagent-agent" ]
|
||||
then
|
||||
echo "Renaming meshagent label in plist: ${mesh_agent_plist}"
|
||||
echo "Warning: This will convert the plist from a text file to a binary plist file."
|
||||
defaults write "${mesh_agent_plist}" Label "meshagent-agent"
|
||||
else
|
||||
echo "No action taken. meshagent label was already renamed: ${label}"
|
||||
fi
|
||||
fi
|
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright 2022 AmidaWare LLC.
|
||||
Copyright 2023 AmidaWare Inc.
|
||||
|
||||
Licensed under the Tactical RMM License Version 1.0 (the “License”).
|
||||
You may only use the Licensed Software in accordance with the License.
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright 2022 AmidaWare LLC.
|
||||
Copyright 2023 AmidaWare Inc.
|
||||
|
||||
Licensed under the Tactical RMM License Version 1.0 (the “License”).
|
||||
You may only use the Licensed Software in accordance with the License.
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright 2022 AmidaWare LLC.
|
||||
Copyright 2023 AmidaWare Inc.
|
||||
|
||||
Licensed under the Tactical RMM License Version 1.0 (the “License”).
|
||||
You may only use the Licensed Software in accordance with the License.
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright 2022 AmidaWare LLC.
|
||||
Copyright 2023 AmidaWare Inc.
|
||||
|
||||
Licensed under the Tactical RMM License Version 1.0 (the “License”).
|
||||
You may only use the Licensed Software in accordance with the License.
|
||||
@@ -80,6 +80,10 @@ func (a *Agent) AgentSvc(nc *nats.Conn) {
|
||||
a.SendSoftware()
|
||||
}
|
||||
|
||||
if runtime.GOOS == "darwin" {
|
||||
go a.FixVenturaMesh()
|
||||
}
|
||||
|
||||
checkInHelloTicker := time.NewTicker(time.Duration(conf.Hello) * time.Second)
|
||||
checkInAgentInfoTicker := time.NewTicker(time.Duration(conf.AgentInfo) * time.Second)
|
||||
checkInWinSvcTicker := time.NewTicker(time.Duration(conf.WinSvc) * time.Second)
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright 2022 AmidaWare LLC.
|
||||
Copyright 2023 AmidaWare Inc.
|
||||
|
||||
Licensed under the Tactical RMM License Version 1.0 (the “License”).
|
||||
You may only use the Licensed Software in accordance with the License.
|
||||
@@ -24,11 +24,14 @@ var _ unsafe.Pointer
|
||||
var (
|
||||
modadvapi32 = windows.NewLazySystemDLL("advapi32.dll")
|
||||
modkernel32 = windows.NewLazySystemDLL("kernel32.dll")
|
||||
userenv = windows.NewLazyDLL("userenv.dll")
|
||||
|
||||
procFormatMessageW = modkernel32.NewProc("FormatMessageW")
|
||||
procGetOldestEventLogRecord = modadvapi32.NewProc("GetOldestEventLogRecord")
|
||||
procLoadLibraryExW = modkernel32.NewProc("LoadLibraryExW")
|
||||
procReadEventLogW = modadvapi32.NewProc("ReadEventLogW")
|
||||
procCreateEnvironmentBlock = userenv.NewProc("CreateEnvironmentBlock")
|
||||
procDestroyEnvironmentBlock = userenv.NewProc("DestroyEnvironmentBlock")
|
||||
)
|
||||
|
||||
// https://docs.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-eventlogrecord
|
||||
@@ -114,3 +117,47 @@ func ReadEventLog(eventLog w32.HANDLE, readFlags ReadFlag, recordOffset uint32,
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func CreateEnvironmentBlock(token syscall.Token) (*uint16, error) {
|
||||
var envBlock *uint16
|
||||
|
||||
ret, _, err := procCreateEnvironmentBlock.Call(
|
||||
uintptr(unsafe.Pointer(&envBlock)),
|
||||
uintptr(token),
|
||||
0,
|
||||
)
|
||||
if ret == 0 {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return envBlock, nil
|
||||
}
|
||||
|
||||
func DestroyEnvironmentBlock(envBlock *uint16) error {
|
||||
ret, _, err := procDestroyEnvironmentBlock.Call(uintptr(unsafe.Pointer(envBlock)))
|
||||
if ret == 0 {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func EnvironmentBlockToSlice(envBlock *uint16) []string {
|
||||
var envs []string
|
||||
|
||||
for {
|
||||
len := 0
|
||||
for *(*uint16)(unsafe.Pointer(uintptr(unsafe.Pointer(envBlock)) + uintptr(len*2))) != 0 {
|
||||
len++
|
||||
}
|
||||
|
||||
if len == 0 {
|
||||
break
|
||||
}
|
||||
|
||||
env := syscall.UTF16ToString((*[1 << 29]uint16)(unsafe.Pointer(envBlock))[:len])
|
||||
envs = append(envs, env)
|
||||
envBlock = (*uint16)(unsafe.Pointer(uintptr(unsafe.Pointer(envBlock)) + uintptr((len+1)*2)))
|
||||
}
|
||||
|
||||
return envs
|
||||
}
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright 2022 AmidaWare LLC.
|
||||
Copyright 2023 AmidaWare Inc.
|
||||
|
||||
Licensed under the Tactical RMM License Version 1.0 (the “License”).
|
||||
You may only use the Licensed Software in accordance with the License.
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright 2022 AmidaWare LLC.
|
||||
Copyright 2023 AmidaWare Inc.
|
||||
|
||||
Licensed under the Tactical RMM License Version 1.0 (the “License”).
|
||||
You may only use the Licensed Software in accordance with the License.
|
||||
@@ -128,7 +128,6 @@ func (a *Agent) PublicIP() string {
|
||||
|
||||
// GenerateAgentID creates and returns a unique agent id
|
||||
func GenerateAgentID() string {
|
||||
rand.Seed(time.Now().UnixNano())
|
||||
letters := []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
|
||||
b := make([]rune, 40)
|
||||
for i := range b {
|
||||
@@ -297,7 +296,6 @@ func ByteCountSI(b uint64) string {
|
||||
}
|
||||
|
||||
func randRange(min, max int) int {
|
||||
rand.Seed(time.Now().UnixNano())
|
||||
return rand.Intn(max-min) + min
|
||||
}
|
||||
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright 2022 AmidaWare LLC.
|
||||
Copyright 2023 AmidaWare Inc.
|
||||
|
||||
Licensed under the Tactical RMM License Version 1.0 (the “License”).
|
||||
You may only use the Licensed Software in accordance with the License.
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright 2022 AmidaWare LLC.
|
||||
Copyright 2023 AmidaWare Inc.
|
||||
|
||||
Licensed under the Tactical RMM License Version 1.0 (the “License”).
|
||||
You may only use the Licensed Software in accordance with the License.
|
||||
|
@@ -3,7 +3,7 @@
|
||||
<assemblyIdentity
|
||||
type="win32"
|
||||
name="TacticalRMM"
|
||||
version="2.4.9.0"
|
||||
version="2.5.0.0"
|
||||
processorArchitecture="*"/>
|
||||
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
|
||||
<security>
|
||||
|
@@ -1,6 +1,6 @@
|
||||
#define MyAppName "Tactical RMM Agent"
|
||||
#define MyAppVersion "2.4.9"
|
||||
#define MyAppPublisher "AmidaWare LLC"
|
||||
#define MyAppVersion "2.5.0"
|
||||
#define MyAppPublisher "AmidaWare Inc"
|
||||
#define MyAppURL "https://github.com/amidaware"
|
||||
#define MyAppExeName "tacticalrmm.exe"
|
||||
#define MESHEXE "meshagent.exe"
|
||||
|
35
go.mod
35
go.mod
@@ -4,34 +4,34 @@ go 1.20
|
||||
|
||||
require (
|
||||
github.com/StackExchange/wmi v1.2.1
|
||||
github.com/elastic/go-sysinfo v1.10.2
|
||||
github.com/elastic/go-sysinfo v1.11.1
|
||||
github.com/go-ole/go-ole v1.2.6
|
||||
github.com/go-ping/ping v1.1.0
|
||||
github.com/go-resty/resty/v2 v2.7.0
|
||||
github.com/gonutz/w32/v2 v2.4.0
|
||||
github.com/iamacarpet/go-win64api v0.0.0-20220531131246-e84054eb584d
|
||||
github.com/nats-io/nats-server/v2 v2.9.17 // indirect
|
||||
github.com/nats-io/nats.go v1.26.0
|
||||
github.com/iamacarpet/go-win64api v0.0.0-20230324134531-ef6dbdd6db97
|
||||
github.com/nats-io/nats-server/v2 v2.9.20 // indirect
|
||||
github.com/nats-io/nats.go v1.28.0
|
||||
github.com/rickb777/date v1.19.1
|
||||
github.com/shirou/gopsutil/v3 v3.23.4
|
||||
github.com/sirupsen/logrus v1.9.0
|
||||
github.com/shirou/gopsutil/v3 v3.23.6
|
||||
github.com/sirupsen/logrus v1.9.3
|
||||
github.com/ugorji/go/codec v1.2.11
|
||||
github.com/wh1te909/go-win64api v0.0.0-20210906074314-ab23795a6ae5
|
||||
github.com/wh1te909/go-win64api v0.0.0-20230802051600-21b24f62e846
|
||||
github.com/wh1te909/trmm-shared v0.0.0-20220227075846-f9f757361139
|
||||
golang.org/x/net v0.9.0 // indirect
|
||||
golang.org/x/sys v0.7.0
|
||||
golang.org/x/net v0.10.0 // indirect
|
||||
golang.org/x/sys v0.9.0
|
||||
)
|
||||
|
||||
require (
|
||||
github.com/amidaware/taskmaster v0.0.0-20220111015025-c9cd178bbbf2
|
||||
github.com/go-cmd/cmd v1.4.1
|
||||
github.com/go-cmd/cmd v1.4.2
|
||||
)
|
||||
|
||||
require (
|
||||
github.com/fourcorelabs/wintoken v1.0.0
|
||||
github.com/jaypipes/ghw v0.10.0
|
||||
github.com/jaypipes/ghw v0.12.0
|
||||
github.com/kardianos/service v1.2.2
|
||||
github.com/spf13/viper v1.15.0
|
||||
github.com/spf13/viper v1.16.0
|
||||
)
|
||||
|
||||
require (
|
||||
@@ -52,23 +52,22 @@ require (
|
||||
github.com/nats-io/nkeys v0.4.4 // indirect
|
||||
github.com/nats-io/nuid v1.0.1 // indirect
|
||||
github.com/nu7hatch/gouuid v0.0.0-20131221200532-179d4d0c4d8d // indirect
|
||||
github.com/pelletier/go-toml/v2 v2.0.6 // indirect
|
||||
github.com/pelletier/go-toml/v2 v2.0.8 // indirect
|
||||
github.com/pkg/errors v0.9.1 // indirect
|
||||
github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c // indirect
|
||||
github.com/prometheus/procfs v0.8.0 // indirect
|
||||
github.com/rickb777/plural v1.4.1 // indirect
|
||||
github.com/rogpeppe/go-internal v1.8.1 // indirect
|
||||
github.com/scjalliance/comshim v0.0.0-20190308082608-cf06d2532c4e // indirect
|
||||
github.com/shoenig/go-m1cpu v0.1.6 // indirect
|
||||
github.com/spf13/afero v1.9.3 // indirect
|
||||
github.com/spf13/cast v1.5.0 // indirect
|
||||
github.com/spf13/afero v1.9.5 // indirect
|
||||
github.com/spf13/cast v1.5.1 // indirect
|
||||
github.com/spf13/jwalterweatherman v1.1.0 // indirect
|
||||
github.com/spf13/pflag v1.0.5 // indirect
|
||||
github.com/subosito/gotenv v1.4.2 // indirect
|
||||
github.com/tklauser/go-sysconf v0.3.11 // indirect
|
||||
github.com/tklauser/numcpus v0.6.0 // indirect
|
||||
github.com/yusufpapurcu/wmi v1.2.2 // indirect
|
||||
golang.org/x/crypto v0.8.0 // indirect
|
||||
github.com/yusufpapurcu/wmi v1.2.3 // indirect
|
||||
golang.org/x/crypto v0.9.0 // indirect
|
||||
golang.org/x/sync v0.1.0 // indirect
|
||||
golang.org/x/text v0.9.0 // indirect
|
||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
|
||||
|
95
go.sum
95
go.sum
@@ -62,8 +62,10 @@ github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m3
|
||||
github.com/docker/docker v23.0.3+incompatible h1:9GhVsShNWz1hO//9BNg/dpMnZW25KydO4wtVxWAIbho=
|
||||
github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ=
|
||||
github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4=
|
||||
github.com/elastic/go-sysinfo v1.10.2 h1:DK4pBq7AHwUY+3gcBykvFmWJQWEtv01Jes3v7ss1RVI=
|
||||
github.com/elastic/go-sysinfo v1.10.2/go.mod h1:6KQb31j0QeWBDF88jIdWSxE8cwoOB9tO4Y4osN7Q70E=
|
||||
github.com/elastic/go-sysinfo v1.11.0 h1:QW+6BF1oxBoAprH3w2yephF7xLkrrSXj7gl2xC2BM4w=
|
||||
github.com/elastic/go-sysinfo v1.11.0/go.mod h1:6KQb31j0QeWBDF88jIdWSxE8cwoOB9tO4Y4osN7Q70E=
|
||||
github.com/elastic/go-sysinfo v1.11.1 h1:g9mwl05njS4r69TisC+vwHWTSKywZFYYUu3so3T/Lao=
|
||||
github.com/elastic/go-sysinfo v1.11.1/go.mod h1:6KQb31j0QeWBDF88jIdWSxE8cwoOB9tO4Y4osN7Q70E=
|
||||
github.com/elastic/go-windows v1.0.1 h1:AlYZOldA+UJ0/2nBuqWdo90GFCgG9xuyw9SYzGUtJm0=
|
||||
github.com/elastic/go-windows v1.0.1/go.mod h1:FoVvqWSun28vaDQPbj2Elfc0JahhPB7WQEGa3c814Ss=
|
||||
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
||||
@@ -74,15 +76,15 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.m
|
||||
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
|
||||
github.com/fourcorelabs/wintoken v1.0.0 h1:dskUYLAFHNy1cbS5MXsNFXauQzxieTrZlffQZ0Yu19I=
|
||||
github.com/fourcorelabs/wintoken v1.0.0/go.mod h1:jKyXHt079W09KwEMbUC9g+R2KDs5kVvSKPUiF5p0ejs=
|
||||
github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE=
|
||||
github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY=
|
||||
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
|
||||
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
|
||||
github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY=
|
||||
github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw=
|
||||
github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk=
|
||||
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
|
||||
github.com/go-cmd/cmd v1.4.1 h1:JUcEIE84v8DSy02XTZpUDeGKExk2oW3DA10hTjbQwmc=
|
||||
github.com/go-cmd/cmd v1.4.1/go.mod h1:tbBenttXtZU4c5djS1o7PWL5pd2xAr5sIqH1kGdNiRc=
|
||||
github.com/go-cmd/cmd v1.4.2 h1:pnX38iIJHh4huzBSqfkAZkfXrVwM/5EccAJmrVqMnbg=
|
||||
github.com/go-cmd/cmd v1.4.2/go.mod h1:u3hxg/ry+D5kwh8WvUkHLAMe2zQCaXd00t35WfQaOFk=
|
||||
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
|
||||
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
|
||||
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
|
||||
@@ -94,7 +96,7 @@ github.com/go-ping/ping v1.1.0 h1:3MCGhVX4fyEUuhsfwPrsEdQw6xspHkv5zHsiSoDFZYw=
|
||||
github.com/go-ping/ping v1.1.0/go.mod h1:xIFjORFzTxqIV/tDVGO4eDy/bLuSyawEeojSm3GfRGk=
|
||||
github.com/go-resty/resty/v2 v2.7.0 h1:me+K9p3uhSmXtrBZ4k9jcEAfJmuC8IivWHwaLZwPrFY=
|
||||
github.com/go-resty/resty/v2 v2.7.0/go.mod h1:9PWDzw47qPphMRFfhsyk0NnSgvluHcljSMVIq3w7q0I=
|
||||
github.com/go-test/deep v1.0.7 h1:/VSMRlnY/JSyqxQUzQLKVMAskpY/NZKFA5j2P+0pP2M=
|
||||
github.com/go-test/deep v1.1.0 h1:WOcxcdHcvdgThNXjw0t76K42FXTU7HpNQWHpA2HHNlg=
|
||||
github.com/godbus/dbus v4.1.0+incompatible/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw=
|
||||
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
|
||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
|
||||
@@ -123,7 +125,7 @@ github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvq
|
||||
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
|
||||
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
|
||||
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
|
||||
github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=
|
||||
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
|
||||
github.com/gonutz/w32/v2 v2.4.0 h1:k+R8/ddsnb9dwVDsTDWvkJGFmYJDI3ZMgcKgdpLuMpw=
|
||||
github.com/gonutz/w32/v2 v2.4.0/go.mod h1:MgtHx0AScDVNKyB+kjyPder4xIi3XAcHS6LDDU2DmdE=
|
||||
github.com/google/aukera v0.0.0-20201117230544-d145c8357fea/go.mod h1:oXqTZORBzdwQ6L32YjJmaPajqIV/hoGEouwpFMf4cJE=
|
||||
@@ -181,12 +183,12 @@ github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
|
||||
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
|
||||
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
|
||||
github.com/iamacarpet/go-win64api v0.0.0-20210311141720-fe38760bed28/go.mod h1:oGJx9dz0Ny7HC7U55RZ0Smd6N9p3hXP/+hOFtuYrAxM=
|
||||
github.com/iamacarpet/go-win64api v0.0.0-20220531131246-e84054eb584d h1:oEqcxSYuVSzQiXfTdp1BTJoowIUTPLCA3fOnfyZO50w=
|
||||
github.com/iamacarpet/go-win64api v0.0.0-20220531131246-e84054eb584d/go.mod h1:B7zFQPAznj+ujXel5X+LUoK3LgY6VboCdVYHZNn7gpg=
|
||||
github.com/iamacarpet/go-win64api v0.0.0-20230324134531-ef6dbdd6db97 h1:VjwKCN2PMLlMKM2k9AW8QQsfmEH43ldlX+JGeWW9cEE=
|
||||
github.com/iamacarpet/go-win64api v0.0.0-20230324134531-ef6dbdd6db97/go.mod h1:B7zFQPAznj+ujXel5X+LUoK3LgY6VboCdVYHZNn7gpg=
|
||||
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
|
||||
github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
|
||||
github.com/jaypipes/ghw v0.10.0 h1:UHu9UX08Py315iPojADFPOkmjTsNzHj4g4adsNKKteY=
|
||||
github.com/jaypipes/ghw v0.10.0/go.mod h1:jeJGbkRB2lL3/gxYzNYzEDETV1ZJ56OKr+CSeSEym+g=
|
||||
github.com/jaypipes/ghw v0.12.0 h1:xU2/MDJfWmBhJnujHY9qwXQLs3DBsf0/Xa9vECY0Tho=
|
||||
github.com/jaypipes/ghw v0.12.0/go.mod h1:jeJGbkRB2lL3/gxYzNYzEDETV1ZJ56OKr+CSeSEym+g=
|
||||
github.com/jaypipes/pcidb v1.0.0 h1:vtZIfkiCUE42oYbJS0TAq9XSfSmcsgo9IdxSm9qzYU8=
|
||||
github.com/jaypipes/pcidb v1.0.0/go.mod h1:TnYUvqhPBzCKnH34KrIX22kAeEbDCSRJ9cqLRCuNDfk=
|
||||
github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
|
||||
@@ -202,7 +204,7 @@ github.com/klauspost/compress v1.16.5/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQs
|
||||
github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
|
||||
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
||||
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
|
||||
github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0=
|
||||
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
|
||||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
||||
@@ -217,10 +219,10 @@ github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrk
|
||||
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
|
||||
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
|
||||
github.com/nats-io/jwt/v2 v2.4.1 h1:Y35W1dgbbz2SQUYDPCaclXcuqleVmpbRa7646Jf2EX4=
|
||||
github.com/nats-io/nats-server/v2 v2.9.17 h1:gFpUQ3hqIDJrnqog+Bl5vaXg+RhhYEZIElasEuRn2tw=
|
||||
github.com/nats-io/nats-server/v2 v2.9.17/go.mod h1:eQysm3xDZmIjfkjr7DuD9DjRFpnxQc2vKVxtEg0Dp6s=
|
||||
github.com/nats-io/nats.go v1.26.0 h1:fWJTYPnZ8DzxIaqIHOAMfColuznchnd5Ab5dbJpgPIE=
|
||||
github.com/nats-io/nats.go v1.26.0/go.mod h1:XpbWUlOElGwTYbMR7imivs7jJj9GtK7ypv321Wp6pjc=
|
||||
github.com/nats-io/nats-server/v2 v2.9.20 h1:bt1dW6xsL1hWWwv7Hovm+EJt5L6iplyqlgEFkoEUk0k=
|
||||
github.com/nats-io/nats-server/v2 v2.9.20/go.mod h1:aTb/xtLCGKhfTFLxP591CMWfkdgBmcUUSkiSOe5A3gw=
|
||||
github.com/nats-io/nats.go v1.28.0 h1:Th4G6zdsz2d0OqXdfzKLClo6bOfoI/b1kInhRtFIy5c=
|
||||
github.com/nats-io/nats.go v1.28.0/go.mod h1:XpbWUlOElGwTYbMR7imivs7jJj9GtK7ypv321Wp6pjc=
|
||||
github.com/nats-io/nkeys v0.4.4 h1:xvBJ8d69TznjcQl9t6//Q5xXuVhyYiSos6RPtvQNTwA=
|
||||
github.com/nats-io/nkeys v0.4.4/go.mod h1:XUkxdLPTufzlihbamfzQ7mw/VGx6ObUs+0bN5sNvt64=
|
||||
github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw=
|
||||
@@ -235,9 +237,8 @@ github.com/onsi/gomega v1.10.2/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1y
|
||||
github.com/onsi/gomega v1.19.0 h1:4ieX6qQjPP/BfC3mpsAtIGGlxTWPeA3Inl/7DtXw1tw=
|
||||
github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
|
||||
github.com/opencontainers/image-spec v1.0.2 h1:9yCKha/T5XdGtO0q9Q9a6T5NUCsTn/DrBg0D7ufOcFM=
|
||||
github.com/pelletier/go-toml/v2 v2.0.6 h1:nrzqCb7j9cDFj2coyLNLaZuJTLjWjlaz6nvTvIwycIU=
|
||||
github.com/pelletier/go-toml/v2 v2.0.6/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek=
|
||||
github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
|
||||
github.com/pelletier/go-toml/v2 v2.0.8 h1:0ctb6s9mE31h0/lhu+J6OPmVeDxJn+kYnJc2jZR9tGQ=
|
||||
github.com/pelletier/go-toml/v2 v2.0.8/go.mod h1:vuYfssBdrU2XDZ9bYydBu6t+6a6PYNcZljzZR9VXg+4=
|
||||
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
|
||||
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||
@@ -258,29 +259,27 @@ github.com/rickb777/plural v1.4.1 h1:5MMLcbIaapLFmvDGRT5iPk8877hpTPt8Y9cdSKRw9sU
|
||||
github.com/rickb777/plural v1.4.1/go.mod h1:kdmXUpmKBJTS0FtG/TFumd//VBWsNTD7zOw7x4umxNw=
|
||||
github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro=
|
||||
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
|
||||
github.com/rogpeppe/go-internal v1.8.1 h1:geMPLpDpQOgVyCg5z5GoRwLHepNdb71NXb67XFkP+Eg=
|
||||
github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o=
|
||||
github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8=
|
||||
github.com/scjalliance/comshim v0.0.0-20190308082608-cf06d2532c4e h1:+/AzLkOdIXEPrAQtwAeWOBnPQ0BnYlBW0aCZmSb47u4=
|
||||
github.com/scjalliance/comshim v0.0.0-20190308082608-cf06d2532c4e/go.mod h1:9Tc1SKnfACJb9N7cw2eyuI6xzy845G7uZONBsi5uPEA=
|
||||
github.com/shirou/gopsutil/v3 v3.23.4 h1:hZwmDxZs7Ewt75DV81r4pFMqbq+di2cbt9FsQBqLD2o=
|
||||
github.com/shirou/gopsutil/v3 v3.23.4/go.mod h1:ZcGxyfzAMRevhUR2+cfhXDH6gQdFYE/t8j1nsU4mPI8=
|
||||
github.com/shoenig/go-m1cpu v0.1.5/go.mod h1:Wwvst4LR89UxjeFtLRMrpgRiyY4xPsejnVZym39dbAQ=
|
||||
github.com/shirou/gopsutil/v3 v3.23.6 h1:5y46WPI9QBKBbK7EEccUPNXpJpNrvPuTD0O2zHEHT08=
|
||||
github.com/shirou/gopsutil/v3 v3.23.6/go.mod h1:j7QX50DrXYggrpN30W0Mo+I4/8U2UUIQrnrhqUeWrAU=
|
||||
github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM=
|
||||
github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ=
|
||||
github.com/shoenig/test v0.6.3/go.mod h1:byHiCGXqrVaflBLAMq/srcZIHynQPQgeyvkvXnjqq0k=
|
||||
github.com/shoenig/test v0.6.4 h1:kVTaSd7WLz5WZ2IaoM0RSzRsUD+m8wRR+5qvntpn4LU=
|
||||
github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0=
|
||||
github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
|
||||
github.com/spf13/afero v1.9.3 h1:41FoI0fD7OR7mGcKE/aOiLkGreyf8ifIOQmJANWogMk=
|
||||
github.com/spf13/afero v1.9.3/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y=
|
||||
github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w=
|
||||
github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU=
|
||||
github.com/shoenig/test v0.6.4/go.mod h1:byHiCGXqrVaflBLAMq/srcZIHynQPQgeyvkvXnjqq0k=
|
||||
github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
|
||||
github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
|
||||
github.com/spf13/afero v1.9.5 h1:stMpOSZFs//0Lv29HduCmli3GUfpFoF3Y1Q/aXj/wVM=
|
||||
github.com/spf13/afero v1.9.5/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ=
|
||||
github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA=
|
||||
github.com/spf13/cast v1.5.1/go.mod h1:b9PdjNptOpzXr7Rq1q9gJML/2cdGQAo69NKzQ10KN48=
|
||||
github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk=
|
||||
github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo=
|
||||
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
|
||||
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
|
||||
github.com/spf13/viper v1.15.0 h1:js3yy885G8xwJa6iOISGFwd+qlUo5AvyXb7CiihdtiU=
|
||||
github.com/spf13/viper v1.15.0/go.mod h1:fFcTBJxvhhzSJiZy8n+PeW6t8l+KeT/uTARa0jHOQLA=
|
||||
github.com/spf13/viper v1.16.0 h1:rGGH0XDZhdUOryiDWjmIvUSWpbNqisK8Wk0Vyefw8hc=
|
||||
github.com/spf13/viper v1.16.0/go.mod h1:yg78JgCJcbrQOvV9YLXgkLaZqUidkY9K+Dd1FofRzQg=
|
||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
|
||||
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
|
||||
@@ -291,9 +290,9 @@ github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5
|
||||
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
|
||||
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
|
||||
github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8=
|
||||
github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
|
||||
github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
|
||||
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
|
||||
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
|
||||
github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8=
|
||||
github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0=
|
||||
github.com/tklauser/go-sysconf v0.3.11 h1:89WgdJhk5SNwJfu+GKyYveZ4IaJ7xAkecBo+KdJV0CM=
|
||||
@@ -304,14 +303,16 @@ github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4d
|
||||
github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=
|
||||
github.com/wh1te909/go-win64api v0.0.0-20210906074314-ab23795a6ae5 h1:8tp/+fGR+qjDQ00vm0ZorHzskquo76MY9/ChmFFunEA=
|
||||
github.com/wh1te909/go-win64api v0.0.0-20210906074314-ab23795a6ae5/go.mod h1:qypF+Tf23flzLX5IXuodDb1314BrDrsbwK/OhTh6HBM=
|
||||
github.com/wh1te909/go-win64api v0.0.0-20230802051600-21b24f62e846 h1:w/2L2xArf30zPrE/8IsqbKrU1FecRtR68Kbw/jj6ep4=
|
||||
github.com/wh1te909/go-win64api v0.0.0-20230802051600-21b24f62e846/go.mod h1:qypF+Tf23flzLX5IXuodDb1314BrDrsbwK/OhTh6HBM=
|
||||
github.com/wh1te909/trmm-shared v0.0.0-20220227075846-f9f757361139 h1:PfOl03o+Y+svWrfXAAu1QWUDePu1yqTq0pf4rpnN8eA=
|
||||
github.com/wh1te909/trmm-shared v0.0.0-20220227075846-f9f757361139/go.mod h1:ILUz1utl5KgwrxmNHv0RpgMtKeh8gPAABvK2MiXBqv8=
|
||||
github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||
github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg=
|
||||
github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
|
||||
github.com/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFiw=
|
||||
github.com/yusufpapurcu/wmi v1.2.3/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
|
||||
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
|
||||
go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
|
||||
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
|
||||
@@ -324,9 +325,9 @@ golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8U
|
||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
|
||||
golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||
golang.org/x/crypto v0.8.0 h1:pd9TJtTueMTVQXzk8E2XESSMQDj/U7OUu0PqJqPXQjQ=
|
||||
golang.org/x/crypto v0.8.0/go.mod h1:mRqEX+O9/h5TFCrQhkgjo2yKi0yYA+9ecGkdQoHrywE=
|
||||
golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||
golang.org/x/crypto v0.9.0 h1:LF6fAI+IutBocDJ2OT0Q1g8plpYljMZ4+lty+dsqw3g=
|
||||
golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0=
|
||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
|
||||
@@ -398,8 +399,9 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v
|
||||
golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc=
|
||||
golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||
golang.org/x/net v0.0.0-20211029224645-99673261e6eb/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||
golang.org/x/net v0.9.0 h1:aWJ/m6xSmxWBx+V0XRHTlrYrPG56jKsLdTFmsSsCzOM=
|
||||
golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns=
|
||||
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||
golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M=
|
||||
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
|
||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||
@@ -474,8 +476,8 @@ golang.org/x/sys v0.0.0-20211107104306-e0b2ad06fe42/go.mod h1:oPkhp1MJrh7nUepCBc
|
||||
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.7.0 h1:3jlCCIQZPdOYu1h8BkNvLz8Kgwtae2cagcG/VamtZRU=
|
||||
golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.9.0 h1:KS/R3tvhPqvJvwcKfnBHJwwthS11LRhmM5D59eEXa0s=
|
||||
golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
@@ -484,6 +486,7 @@ golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
|
||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
||||
golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE=
|
||||
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
|
||||
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||
@@ -630,7 +633,7 @@ google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2
|
||||
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
|
||||
google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
|
||||
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
|
||||
google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w=
|
||||
google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
|
||||
|
44
main.go
44
main.go
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright 2022 AmidaWare LLC.
|
||||
Copyright 2023 AmidaWare Inc.
|
||||
|
||||
Licensed under the Tactical RMM License Version 1.0 (the “License”).
|
||||
You may only use the Licensed Software in accordance with the License.
|
||||
@@ -25,7 +25,7 @@ import (
|
||||
)
|
||||
|
||||
var (
|
||||
version = "2.4.9"
|
||||
version = "2.5.0"
|
||||
log = logrus.New()
|
||||
logFile *os.File
|
||||
)
|
||||
@@ -53,6 +53,8 @@ func main() {
|
||||
cert := flag.String("cert", "", "Path to domain CA .pem")
|
||||
silent := flag.Bool("silent", false, "Do not popup any message boxes during installation")
|
||||
proxy := flag.String("proxy", "", "Use a http proxy")
|
||||
insecure := flag.Bool("insecure", false, "Insecure for testing only")
|
||||
natsport := flag.String("natsport", "", "nats standard port")
|
||||
flag.Parse()
|
||||
|
||||
if *ver {
|
||||
@@ -119,6 +121,8 @@ func main() {
|
||||
a.RunMigrations()
|
||||
case "recovermesh":
|
||||
a.RecoverMesh()
|
||||
case "macventurafix":
|
||||
a.FixVenturaMesh()
|
||||
case "taskrunner":
|
||||
if len(os.Args) < 5 || *taskPK == 0 {
|
||||
return
|
||||
@@ -139,23 +143,25 @@ func main() {
|
||||
return
|
||||
}
|
||||
a.Install(&agent.Installer{
|
||||
RMM: *api,
|
||||
ClientID: *clientID,
|
||||
SiteID: *siteID,
|
||||
Description: *desc,
|
||||
AgentType: *atype,
|
||||
Power: *power,
|
||||
RDP: *rdp,
|
||||
Ping: *ping,
|
||||
Token: *token,
|
||||
LocalMesh: *localMesh,
|
||||
Cert: *cert,
|
||||
Proxy: *proxy,
|
||||
Timeout: *timeout,
|
||||
Silent: *silent,
|
||||
NoMesh: *noMesh,
|
||||
MeshDir: *meshDir,
|
||||
MeshNodeID: *meshNodeID,
|
||||
RMM: *api,
|
||||
ClientID: *clientID,
|
||||
SiteID: *siteID,
|
||||
Description: *desc,
|
||||
AgentType: *atype,
|
||||
Power: *power,
|
||||
RDP: *rdp,
|
||||
Ping: *ping,
|
||||
Token: *token,
|
||||
LocalMesh: *localMesh,
|
||||
Cert: *cert,
|
||||
Proxy: *proxy,
|
||||
Timeout: *timeout,
|
||||
Silent: *silent,
|
||||
NoMesh: *noMesh,
|
||||
MeshDir: *meshDir,
|
||||
MeshNodeID: *meshNodeID,
|
||||
Insecure: *insecure,
|
||||
NatsStandardPort: *natsport,
|
||||
})
|
||||
default:
|
||||
agent.ShowStatus(version)
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright 2022 AmidaWare LLC.
|
||||
Copyright 2023 AmidaWare Inc.
|
||||
|
||||
Licensed under the Tactical RMM License Version 1.0 (the “License”).
|
||||
You may only use the Licensed Software in accordance with the License.
|
||||
@@ -48,6 +48,7 @@ type AgentConfig struct {
|
||||
NatsProxyPort string
|
||||
NatsStandardPort string
|
||||
NatsPingInterval int
|
||||
Insecure string
|
||||
}
|
||||
|
||||
type RunScriptResp struct {
|
||||
|
@@ -2,14 +2,14 @@
|
||||
"FixedFileInfo": {
|
||||
"FileVersion": {
|
||||
"Major": 2,
|
||||
"Minor": 4,
|
||||
"Patch": 9,
|
||||
"Minor": 5,
|
||||
"Patch": 0,
|
||||
"Build": 0
|
||||
},
|
||||
"ProductVersion": {
|
||||
"Major": 2,
|
||||
"Minor": 4,
|
||||
"Patch": 9,
|
||||
"Minor": 5,
|
||||
"Patch": 0,
|
||||
"Build": 0
|
||||
},
|
||||
"FileFlagsMask": "3f",
|
||||
@@ -20,16 +20,16 @@
|
||||
},
|
||||
"StringFileInfo": {
|
||||
"Comments": "",
|
||||
"CompanyName": "AmidaWare LLC",
|
||||
"CompanyName": "AmidaWare Inc",
|
||||
"FileDescription": "Tactical RMM Agent",
|
||||
"FileVersion": "v2.4.9.0",
|
||||
"FileVersion": "v2.5.0.0",
|
||||
"InternalName": "tacticalrmm.exe",
|
||||
"LegalCopyright": "Copyright (c) 2023 AmidaWare LLC",
|
||||
"LegalCopyright": "Copyright (c) 2023 AmidaWare Inc",
|
||||
"LegalTrademarks": "",
|
||||
"OriginalFilename": "tacticalrmm.exe",
|
||||
"PrivateBuild": "",
|
||||
"ProductName": "Tactical RMM Agent",
|
||||
"ProductVersion": "v2.4.9.0",
|
||||
"ProductVersion": "v2.5.0.0",
|
||||
"SpecialBuild": ""
|
||||
},
|
||||
"VarFileInfo": {
|
||||
|
Reference in New Issue
Block a user