diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 89684ea..002baba 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -18,7 +18,7 @@ jobs:
- uses: actions/setup-go@v4
with:
- go-version: '1.20.3'
+ go-version: '1.20.4'
- name: Ensure linux agent compiles
run: |
diff --git a/agent/agent.go b/agent/agent.go
index f3cbadc..75d087b 100644
--- a/agent/agent.go
+++ b/agent/agent.go
@@ -40,37 +40,39 @@ import (
// Agent struct
type Agent struct {
- Hostname string
- Arch string
- AgentID string
- BaseURL string
- ApiURL string
- Token string
- AgentPK int
- Cert string
- ProgramDir string
- EXE string
- SystemDrive string
- MeshInstaller string
- MeshSystemEXE string
- MeshSVC string
- PyBin string
- Headers map[string]string
- Logger *logrus.Logger
- Version string
- Debug bool
- rClient *resty.Client
- Proxy string
- LogTo string
- LogFile *os.File
- Platform string
- GoArch string
- ServiceConfig *service.Config
- NatsServer string
- NatsProxyPath string
- NatsProxyPort string
- NatsPingInterval int
- NatsWSCompression bool
+ Hostname string
+ Arch string
+ AgentID string
+ BaseURL string
+ ApiURL string
+ Token string
+ AgentPK int
+ Cert string
+ ProgramDir string
+ EXE string
+ SystemDrive string
+ WinTmpDir string
+ WinRunAsUserTmpDir string
+ MeshInstaller string
+ MeshSystemEXE string
+ MeshSVC string
+ PyBin string
+ Headers map[string]string
+ Logger *logrus.Logger
+ Version string
+ Debug bool
+ rClient *resty.Client
+ Proxy string
+ LogTo string
+ LogFile *os.File
+ Platform string
+ GoArch string
+ ServiceConfig *service.Config
+ NatsServer string
+ NatsProxyPath string
+ NatsProxyPort string
+ NatsPingInterval int
+ NatsWSCompression bool
}
const (
@@ -88,7 +90,7 @@ const (
defaultMacMeshSvcDir = "/usr/local/mesh_services"
)
-var winTempDir = filepath.Join(os.Getenv("PROGRAMDATA"), "TacticalRMM")
+var defaultWinTmpDir = filepath.Join(os.Getenv("PROGRAMDATA"), "TacticalRMM")
var winMeshDir = filepath.Join(os.Getenv("PROGRAMFILES"), "Mesh Agent")
var natsCheckin = []string{"agent-hello", "agent-agentinfo", "agent-disks", "agent-winsvc", "agent-publicip", "agent-wmi"}
var limitNatsData = []string{"agent-winsvc", "agent-wmi"}
@@ -99,6 +101,8 @@ func New(logger *logrus.Logger, version string) *Agent {
pd := filepath.Join(os.Getenv("ProgramFiles"), progFilesName)
exe := filepath.Join(pd, winExeName)
sd := os.Getenv("SystemDrive")
+ winTempDir := defaultWinTmpDir
+ winRunAsUserTmpDir := defaultWinTmpDir
var pybin string
switch runtime.GOARCH {
@@ -130,6 +134,14 @@ func New(logger *logrus.Logger, version string) *Agent {
restyC.SetRootCertificate(ac.Cert)
}
+ if len(ac.WinTmpDir) > 0 {
+ winTempDir = ac.WinTmpDir
+ }
+
+ if len(ac.WinRunAsUserTmpDir) > 0 {
+ winRunAsUserTmpDir = ac.WinRunAsUserTmpDir
+ }
+
var MeshSysExe string
switch runtime.GOOS {
case "windows":
@@ -189,34 +201,36 @@ func New(logger *logrus.Logger, version string) *Agent {
}
return &Agent{
- Hostname: info.Hostname,
- BaseURL: ac.BaseURL,
- AgentID: ac.AgentID,
- ApiURL: ac.APIURL,
- Token: ac.Token,
- AgentPK: ac.PK,
- Cert: ac.Cert,
- ProgramDir: pd,
- EXE: exe,
- SystemDrive: sd,
- MeshInstaller: "meshagent.exe",
- MeshSystemEXE: MeshSysExe,
- MeshSVC: meshSvcName,
- PyBin: pybin,
- Headers: headers,
- Logger: logger,
- Version: version,
- Debug: logger.IsLevelEnabled(logrus.DebugLevel),
- rClient: restyC,
- Proxy: ac.Proxy,
- Platform: runtime.GOOS,
- GoArch: runtime.GOARCH,
- ServiceConfig: svcConf,
- NatsServer: natsServer,
- NatsProxyPath: natsProxyPath,
- NatsProxyPort: natsProxyPort,
- NatsPingInterval: natsPingInterval,
- NatsWSCompression: natsWsCompression,
+ Hostname: info.Hostname,
+ BaseURL: ac.BaseURL,
+ AgentID: ac.AgentID,
+ ApiURL: ac.APIURL,
+ Token: ac.Token,
+ AgentPK: ac.PK,
+ Cert: ac.Cert,
+ ProgramDir: pd,
+ EXE: exe,
+ SystemDrive: sd,
+ WinTmpDir: winTempDir,
+ WinRunAsUserTmpDir: winRunAsUserTmpDir,
+ MeshInstaller: "meshagent.exe",
+ MeshSystemEXE: MeshSysExe,
+ MeshSVC: meshSvcName,
+ PyBin: pybin,
+ Headers: headers,
+ Logger: logger,
+ Version: version,
+ Debug: logger.IsLevelEnabled(logrus.DebugLevel),
+ rClient: restyC,
+ Proxy: ac.Proxy,
+ Platform: runtime.GOOS,
+ GoArch: runtime.GOARCH,
+ ServiceConfig: svcConf,
+ NatsServer: natsServer,
+ NatsProxyPath: natsProxyPath,
+ NatsProxyPort: natsProxyPort,
+ NatsPingInterval: natsPingInterval,
+ NatsWSCompression: natsWsCompression,
}
}
@@ -457,7 +471,7 @@ func (a *Agent) GetUninstallExe() string {
func (a *Agent) CleanupAgentUpdates() {
// TODO remove a.ProgramDir, updates are now in winTempDir
- dirs := [3]string{winTempDir, os.Getenv("TMP"), a.ProgramDir}
+ dirs := [3]string{a.WinTmpDir, os.Getenv("TMP"), a.ProgramDir}
for _, dir := range dirs {
err := os.Chdir(dir)
if err != nil {
@@ -491,7 +505,7 @@ func (a *Agent) CleanupAgentUpdates() {
func (a *Agent) RunPythonCode(code string, timeout int, args []string) (string, error) {
content := []byte(code)
- tmpfn, _ := ioutil.TempFile(winTempDir, "*.py")
+ tmpfn, _ := ioutil.TempFile(a.WinTmpDir, "*.py")
if _, err := tmpfn.Write(content); err != nil {
a.Logger.Debugln(err)
return "", err
@@ -537,8 +551,8 @@ func (a *Agent) RunPythonCode(code string, timeout int, args []string) (string,
}
func createWinTempDir() error {
- if !trmm.FileExists(winTempDir) {
- err := os.Mkdir(winTempDir, 0775)
+ if !trmm.FileExists(defaultWinTmpDir) {
+ err := os.Mkdir(defaultWinTmpDir, 0775)
if err != nil {
return err
}
diff --git a/agent/agent_unix.go b/agent/agent_unix.go
index 42f51ee..aa633b3 100644
--- a/agent/agent_unix.go
+++ b/agent/agent_unix.go
@@ -16,6 +16,7 @@ package agent
import (
"bufio"
+ "errors"
"fmt"
"os"
"path/filepath"
@@ -218,12 +219,12 @@ func (a *Agent) seEnforcing() bool {
return out.Status.Exit == 0 && strings.Contains(out.Stdout, "Enforcing")
}
-func (a *Agent) AgentUpdate(url, inno, version string) {
+func (a *Agent) AgentUpdate(url, inno, version string) error {
self, err := os.Executable()
if err != nil {
a.Logger.Errorln("AgentUpdate() os.Executable():", err)
- return
+ return err
}
// more reliable method to get current working directory than os.Getwd()
@@ -233,7 +234,7 @@ func (a *Agent) AgentUpdate(url, inno, version string) {
f, err := os.CreateTemp(cwd, "trmm")
if err != nil {
a.Logger.Errorln("AgentUpdate() os.CreateTemp:", err)
- return
+ return err
}
defer os.Remove(f.Name())
@@ -252,12 +253,12 @@ func (a *Agent) AgentUpdate(url, inno, version string) {
if err != nil {
a.Logger.Errorln("AgentUpdate() download:", err)
f.Close()
- return
+ return err
}
if r.IsError() {
a.Logger.Errorln("AgentUpdate() status code:", r.StatusCode())
f.Close()
- return
+ return errors.New("err")
}
f.Close()
@@ -265,7 +266,7 @@ func (a *Agent) AgentUpdate(url, inno, version string) {
err = os.Rename(f.Name(), self)
if err != nil {
a.Logger.Errorln("AgentUpdate() os.Rename():", err)
- return
+ return err
}
if runtime.GOOS == "linux" && a.seEnforcing() {
@@ -283,10 +284,11 @@ func (a *Agent) AgentUpdate(url, inno, version string) {
case "darwin":
opts.Command = "launchctl kickstart -k system/tacticalagent"
default:
- return
+ return nil
}
a.CmdV2(opts)
+ return nil
}
func (a *Agent) AgentUninstall(code string) {
diff --git a/agent/agent_windows.go b/agent/agent_windows.go
index b19a185..fd6fb19 100644
--- a/agent/agent_windows.go
+++ b/agent/agent_windows.go
@@ -62,6 +62,8 @@ func NewAgentConfig() *rmm.AgentConfig {
cert, _, _ := k.GetStringValue("Cert")
proxy, _, _ := k.GetStringValue("Proxy")
customMeshDir, _, _ := k.GetStringValue("MeshDir")
+ winTmpDir, _, _ := k.GetStringValue("WinTmpDir")
+ winRunAsUserTmpDir, _, _ := k.GetStringValue("WinRunAsUserTmpDir")
natsProxyPath, _, _ := k.GetStringValue("NatsProxyPath")
natsProxyPort, _, _ := k.GetStringValue("NatsProxyPort")
natsStandardPort, _, _ := k.GetStringValue("NatsStandardPort")
@@ -69,19 +71,21 @@ func NewAgentConfig() *rmm.AgentConfig {
npi, _ := strconv.Atoi(natsPingInterval)
return &rmm.AgentConfig{
- BaseURL: baseurl,
- AgentID: agentid,
- APIURL: apiurl,
- Token: token,
- AgentPK: agentpk,
- PK: pk,
- Cert: cert,
- Proxy: proxy,
- CustomMeshDir: customMeshDir,
- NatsProxyPath: natsProxyPath,
- NatsProxyPort: natsProxyPort,
- NatsStandardPort: natsStandardPort,
- NatsPingInterval: npi,
+ BaseURL: baseurl,
+ AgentID: agentid,
+ APIURL: apiurl,
+ Token: token,
+ AgentPK: agentpk,
+ PK: pk,
+ Cert: cert,
+ Proxy: proxy,
+ CustomMeshDir: customMeshDir,
+ WinTmpDir: winTmpDir,
+ WinRunAsUserTmpDir: winRunAsUserTmpDir,
+ NatsProxyPath: natsProxyPath,
+ NatsProxyPort: natsProxyPort,
+ NatsStandardPort: natsStandardPort,
+ NatsPingInterval: npi,
}
}
@@ -114,7 +118,13 @@ func (a *Agent) RunScript(code string, shell string, args []string, timeout int,
ext = "*.bat"
}
- tmpfn, err := ioutil.TempFile(winTempDir, ext)
+ tmpDir := a.WinTmpDir
+
+ if runasuser {
+ tmpDir = a.WinRunAsUserTmpDir
+ }
+
+ tmpfn, err := ioutil.TempFile(tmpDir, ext)
if err != nil {
a.Logger.Errorln(err)
return "", err.Error(), 85, err
@@ -133,7 +143,7 @@ func (a *Agent) RunScript(code string, shell string, args []string, timeout int,
switch shell {
case "powershell":
exe = getPowershellExe()
- cmdArgs = []string{"-NonInteractive", "-NoProfile", "-ExecutionPolicy", "Bypass", tmpfn.Name()}
+ cmdArgs = []string{"-NonInteractive", "-NoProfile", "-ExecutionPolicy", "Bypass", "-File", tmpfn.Name()}
case "python":
exe = a.PyBin
cmdArgs = []string{tmpfn.Name()}
@@ -587,15 +597,16 @@ func (a *Agent) UninstallCleanup() {
a.PatchMgmnt(false)
a.CleanupAgentUpdates()
CleanupSchedTasks()
- os.RemoveAll(winTempDir)
+ os.RemoveAll(a.WinTmpDir)
+ os.RemoveAll(a.WinRunAsUserTmpDir)
}
-func (a *Agent) AgentUpdate(url, inno, version string) {
+func (a *Agent) AgentUpdate(url, inno, version string) error {
time.Sleep(time.Duration(randRange(1, 15)) * time.Second)
a.KillHungUpdates()
time.Sleep(1 * time.Second)
a.CleanupAgentUpdates()
- updater := filepath.Join(winTempDir, inno)
+ updater := filepath.Join(a.WinTmpDir, inno)
a.Logger.Infof("Agent updating from %s to %s", a.Version, version)
a.Logger.Debugln("Downloading agent update from", url)
@@ -609,16 +620,14 @@ func (a *Agent) AgentUpdate(url, inno, version string) {
r, err := rClient.R().SetOutput(updater).Get(url)
if err != nil {
a.Logger.Errorln(err)
- CMD("net", []string{"start", winSvcName}, 10, false)
- return
+ return err
}
if r.IsError() {
a.Logger.Errorln("Download failed with status code", r.StatusCode())
- CMD("net", []string{"start", winSvcName}, 10, false)
- return
+ return err
}
- innoLogFile := filepath.Join(winTempDir, fmt.Sprintf("tacticalagent_update_v%s.txt", version))
+ innoLogFile := filepath.Join(a.WinTmpDir, fmt.Sprintf("tacticalagent_update_v%s.txt", version))
args := []string{"/C", updater, "/VERYSILENT", fmt.Sprintf("/LOG=%s", innoLogFile)}
cmd := exec.Command("cmd.exe", args...)
@@ -627,6 +636,7 @@ func (a *Agent) AgentUpdate(url, inno, version string) {
}
cmd.Start()
time.Sleep(1 * time.Second)
+ return nil
}
func (a *Agent) osString() string {
diff --git a/agent/rpc.go b/agent/rpc.go
index 5eaf456..ed975d9 100644
--- a/agent/rpc.go
+++ b/agent/rpc.go
@@ -481,7 +481,11 @@ func (a *Agent) RunRPC() {
} else {
ret.Encode("ok")
msg.Respond(resp)
- a.AgentUpdate(p.Data["url"], p.Data["inno"], p.Data["version"])
+ err := a.AgentUpdate(p.Data["url"], p.Data["inno"], p.Data["version"])
+ if err != nil {
+ atomic.StoreUint32(&agentUpdateLocker, 0)
+ return
+ }
atomic.StoreUint32(&agentUpdateLocker, 0)
nc.Flush()
nc.Close()
diff --git a/build/rmm.exe.manifest b/build/rmm.exe.manifest
index a6341c2..2155614 100644
--- a/build/rmm.exe.manifest
+++ b/build/rmm.exe.manifest
@@ -3,7 +3,7 @@
diff --git a/build/setup.iss b/build/setup.iss
index 13607a2..e1a9409 100644
--- a/build/setup.iss
+++ b/build/setup.iss
@@ -1,5 +1,5 @@
#define MyAppName "Tactical RMM Agent"
-#define MyAppVersion "2.4.6"
+#define MyAppVersion "2.4.7"
#define MyAppPublisher "AmidaWare LLC"
#define MyAppURL "https://github.com/amidaware"
#define MyAppExeName "tacticalrmm.exe"
diff --git a/go.mod b/go.mod
index dae960f..2c69013 100644
--- a/go.mod
+++ b/go.mod
@@ -4,22 +4,22 @@ go 1.20
require (
github.com/StackExchange/wmi v1.2.1
- github.com/elastic/go-sysinfo v1.10.0
+ github.com/elastic/go-sysinfo v1.10.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.15 // indirect
+ github.com/nats-io/nats-server/v2 v2.9.16 // indirect
github.com/nats-io/nats.go v1.25.0
github.com/rickb777/date v1.19.1
- github.com/shirou/gopsutil/v3 v3.23.3
+ github.com/shirou/gopsutil/v3 v3.23.4
github.com/sirupsen/logrus v1.9.0
github.com/ugorji/go/codec v1.2.11
github.com/wh1te909/go-win64api v0.0.0-20210906074314-ab23795a6ae5
github.com/wh1te909/trmm-shared v0.0.0-20220227075846-f9f757361139
- golang.org/x/net v0.7.0 // indirect
- golang.org/x/sys v0.6.0
+ golang.org/x/net v0.9.0 // indirect
+ golang.org/x/sys v0.7.0
)
require (
@@ -58,7 +58,7 @@ require (
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.4 // 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/jwalterweatherman v1.1.0 // indirect
@@ -67,9 +67,9 @@ require (
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.6.0 // indirect
+ golang.org/x/crypto v0.8.0 // indirect
golang.org/x/sync v0.1.0 // indirect
- golang.org/x/text v0.7.0 // indirect
+ golang.org/x/text v0.9.0 // indirect
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
gopkg.in/ini.v1 v1.67.0 // indirect
gopkg.in/toast.v1 v1.0.0-20180812000517-0a84660828b2 // indirect
diff --git a/go.sum b/go.sum
index cf9604d..6ebe848 100644
--- a/go.sum
+++ b/go.sum
@@ -59,11 +59,11 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/docker/distribution v2.8.1+incompatible h1:Q50tZOPR6T/hjNsyc9g8/syEs6bk8XXApsHjKukMl68=
-github.com/docker/docker v20.10.24+incompatible h1:Ugvxm7a8+Gz6vqQYQQ2W7GYq5EUPaAiuPgIfVyI3dYE=
+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.0 h1:8mhFXJrWFLpeskULp0sGq+jt5DA0AaPU+RfGDOJQPUA=
-github.com/elastic/go-sysinfo v1.10.0/go.mod h1:RgpZTzVQX1UUNtbCnTYE5xzUaZ9+UU4ydR2ZXyzjkBg=
+github.com/elastic/go-sysinfo v1.10.1 h1:qAfoDsw3lnShqqTHVBZbK4+PN3Lz5FBi3o9sM5n9O9s=
+github.com/elastic/go-sysinfo v1.10.1/go.mod h1:QElTrQ6akcnAVCRwdkZtoAkwuTv8UVM4+qe0hPxT4NU=
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=
@@ -197,7 +197,7 @@ github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/X
github.com/kardianos/service v1.2.2 h1:ZvePhAHfvo0A7Mftk/tEzqEZ7Q4lgnR8sGz4xu1YX60=
github.com/kardianos/service v1.2.2/go.mod h1:CIMRFEJVL+0DS1a3Nx06NaMn4Dz63Ng6O7dl0qH0zVM=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
-github.com/klauspost/compress v1.16.0 h1:iULayQNOReoYUe+1qtKOqw9CwJv3aNQu8ivo7lw1HU4=
+github.com/klauspost/compress v1.16.4 h1:91KN02FnsOYhuunwU4ssRe8lc2JosWmizWa91B5v1PU=
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=
@@ -215,9 +215,9 @@ github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
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.3.0 h1:z2mA1a7tIf5ShggOFlR1oBPgd6hGqcDYsISxZByUzdI=
-github.com/nats-io/nats-server/v2 v2.9.15 h1:MuwEJheIwpvFgqvbs20W8Ish2azcygjf4Z0liVu2I4c=
-github.com/nats-io/nats-server/v2 v2.9.15/go.mod h1:QlCTy115fqpx4KSOPFIxSV7DdI6OxtZsGOL1JLdeRlE=
+github.com/nats-io/jwt/v2 v2.4.1 h1:Y35W1dgbbz2SQUYDPCaclXcuqleVmpbRa7646Jf2EX4=
+github.com/nats-io/nats-server/v2 v2.9.16 h1:SuNe6AyCcVy0g5326wtyU8TdqYmcPqzTjhkHojAjprc=
+github.com/nats-io/nats-server/v2 v2.9.16/go.mod h1:z1cc5Q+kqJkz9mLUdlcSsdYnId4pyImHjNgoh6zxSC0=
github.com/nats-io/nats.go v1.25.0 h1:t5/wCPGciR7X3Mu8QOi4jiJaXaWM8qtkLu4lzGZvYHE=
github.com/nats-io/nats.go v1.25.0/go.mod h1:D2WALIhz7V8M0pH8Scx8JZXlg6Oqz5VG+nQkK8nJdvg=
github.com/nats-io/nkeys v0.4.4 h1:xvBJ8d69TznjcQl9t6//Q5xXuVhyYiSos6RPtvQNTwA=
@@ -261,12 +261,15 @@ github.com/rogpeppe/go-internal v1.8.1 h1:geMPLpDpQOgVyCg5z5GoRwLHepNdb71NXb67XF
github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o=
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.3 h1:Syt5vVZXUDXPEXpIBt5ziWsJ4LdSAAxF4l/xZeQgSEE=
-github.com/shirou/gopsutil/v3 v3.23.3/go.mod h1:lSBNN6t3+D6W5e5nXTxc8KIMMVxAcS+6IJlffjRRlMU=
-github.com/shoenig/go-m1cpu v0.1.4 h1:SZPIgRM2sEF9NJy50mRHu9PKGwxyyTTJIWvCtgVbozs=
-github.com/shoenig/go-m1cpu v0.1.4/go.mod h1:Wwvst4LR89UxjeFtLRMrpgRiyY4xPsejnVZym39dbAQ=
+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 h1:LF57Z/Fpb/WdGLjt2HZilNnmZOxg/q2bSKTQhgbrLrQ=
+github.com/shoenig/go-m1cpu v0.1.5/go.mod h1:Wwvst4LR89UxjeFtLRMrpgRiyY4xPsejnVZym39dbAQ=
+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 h1:GVXWJFk9PiOjN0KoJ7VrJGH6uLPnqxR7/fe3HUPfE0c=
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=
@@ -323,8 +326,8 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U
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.6.0 h1:qfktjS5LUO+fFKeJXZ+ikTRijMmljikvG68fpMMruSc=
-golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58=
+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/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=
@@ -358,7 +361,7 @@ golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s=
+golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -396,8 +399,8 @@ 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.7.0 h1:rJrUqqhjsgNp7KqAIc25s9pZnjU7TUcSY7HcVZjdn1g=
-golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
+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/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=
@@ -472,8 +475,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.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ=
-golang.org/x/sys v0.6.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/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=
@@ -482,8 +485,8 @@ 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.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo=
-golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
+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=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
@@ -535,7 +538,7 @@ golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4f
golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
-golang.org/x/tools v0.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU=
+golang.org/x/tools v0.6.0 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
diff --git a/main.go b/main.go
index 322e7c2..29acebd 100644
--- a/main.go
+++ b/main.go
@@ -25,7 +25,7 @@ import (
)
var (
- version = "2.4.6"
+ version = "2.4.7"
log = logrus.New()
logFile *os.File
)
diff --git a/shared/types.go b/shared/types.go
index 5ff983d..3fbf3f4 100644
--- a/shared/types.go
+++ b/shared/types.go
@@ -33,19 +33,21 @@ type ProcessMsg struct {
}
type AgentConfig struct {
- BaseURL string
- AgentID string
- APIURL string
- Token string
- AgentPK string
- PK int
- Cert string
- Proxy string
- CustomMeshDir string
- NatsProxyPath string
- NatsProxyPort string
- NatsStandardPort string
- NatsPingInterval int
+ BaseURL string
+ AgentID string
+ APIURL string
+ Token string
+ AgentPK string
+ PK int
+ Cert string
+ Proxy string
+ CustomMeshDir string
+ WinTmpDir string
+ WinRunAsUserTmpDir string
+ NatsProxyPath string
+ NatsProxyPort string
+ NatsStandardPort string
+ NatsPingInterval int
}
type RunScriptResp struct {
diff --git a/versioninfo.json b/versioninfo.json
index dad4f80..bc6b3e2 100644
--- a/versioninfo.json
+++ b/versioninfo.json
@@ -3,13 +3,13 @@
"FileVersion": {
"Major": 2,
"Minor": 4,
- "Patch": 6,
+ "Patch": 7,
"Build": 0
},
"ProductVersion": {
"Major": 2,
"Minor": 4,
- "Patch": 6,
+ "Patch": 7,
"Build": 0
},
"FileFlagsMask": "3f",
@@ -22,14 +22,14 @@
"Comments": "",
"CompanyName": "AmidaWare LLC",
"FileDescription": "Tactical RMM Agent",
- "FileVersion": "v2.4.6.0",
+ "FileVersion": "v2.4.7.0",
"InternalName": "tacticalrmm.exe",
"LegalCopyright": "Copyright (c) 2023 AmidaWare LLC",
"LegalTrademarks": "",
"OriginalFilename": "tacticalrmm.exe",
"PrivateBuild": "",
"ProductName": "Tactical RMM Agent",
- "ProductVersion": "v2.4.6.0",
+ "ProductVersion": "v2.4.7.0",
"SpecialBuild": ""
},
"VarFileInfo": {