allow setting custom defined tmpdir
This commit is contained in:
parent
ec49d4941d
commit
588a4bcbf7
@ -51,6 +51,8 @@ type Agent struct {
|
|||||||
ProgramDir string
|
ProgramDir string
|
||||||
EXE string
|
EXE string
|
||||||
SystemDrive string
|
SystemDrive string
|
||||||
|
WinTmpDir string
|
||||||
|
WinRunAsUserTmpDir string
|
||||||
MeshInstaller string
|
MeshInstaller string
|
||||||
MeshSystemEXE string
|
MeshSystemEXE string
|
||||||
MeshSVC string
|
MeshSVC string
|
||||||
@ -88,7 +90,7 @@ const (
|
|||||||
defaultMacMeshSvcDir = "/usr/local/mesh_services"
|
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 winMeshDir = filepath.Join(os.Getenv("PROGRAMFILES"), "Mesh Agent")
|
||||||
var natsCheckin = []string{"agent-hello", "agent-agentinfo", "agent-disks", "agent-winsvc", "agent-publicip", "agent-wmi"}
|
var natsCheckin = []string{"agent-hello", "agent-agentinfo", "agent-disks", "agent-winsvc", "agent-publicip", "agent-wmi"}
|
||||||
var limitNatsData = []string{"agent-winsvc", "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)
|
pd := filepath.Join(os.Getenv("ProgramFiles"), progFilesName)
|
||||||
exe := filepath.Join(pd, winExeName)
|
exe := filepath.Join(pd, winExeName)
|
||||||
sd := os.Getenv("SystemDrive")
|
sd := os.Getenv("SystemDrive")
|
||||||
|
winTempDir := defaultWinTmpDir
|
||||||
|
winRunAsUserTmpDir := defaultWinTmpDir
|
||||||
|
|
||||||
var pybin string
|
var pybin string
|
||||||
switch runtime.GOARCH {
|
switch runtime.GOARCH {
|
||||||
@ -130,6 +134,14 @@ func New(logger *logrus.Logger, version string) *Agent {
|
|||||||
restyC.SetRootCertificate(ac.Cert)
|
restyC.SetRootCertificate(ac.Cert)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if len(ac.WinTmpDir) > 0 {
|
||||||
|
winTempDir = ac.WinTmpDir
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(ac.WinRunAsUserTmpDir) > 0 {
|
||||||
|
winRunAsUserTmpDir = ac.WinRunAsUserTmpDir
|
||||||
|
}
|
||||||
|
|
||||||
var MeshSysExe string
|
var MeshSysExe string
|
||||||
switch runtime.GOOS {
|
switch runtime.GOOS {
|
||||||
case "windows":
|
case "windows":
|
||||||
@ -199,6 +211,8 @@ func New(logger *logrus.Logger, version string) *Agent {
|
|||||||
ProgramDir: pd,
|
ProgramDir: pd,
|
||||||
EXE: exe,
|
EXE: exe,
|
||||||
SystemDrive: sd,
|
SystemDrive: sd,
|
||||||
|
WinTmpDir: winTempDir,
|
||||||
|
WinRunAsUserTmpDir: winRunAsUserTmpDir,
|
||||||
MeshInstaller: "meshagent.exe",
|
MeshInstaller: "meshagent.exe",
|
||||||
MeshSystemEXE: MeshSysExe,
|
MeshSystemEXE: MeshSysExe,
|
||||||
MeshSVC: meshSvcName,
|
MeshSVC: meshSvcName,
|
||||||
@ -457,7 +471,7 @@ func (a *Agent) GetUninstallExe() string {
|
|||||||
|
|
||||||
func (a *Agent) CleanupAgentUpdates() {
|
func (a *Agent) CleanupAgentUpdates() {
|
||||||
// TODO remove a.ProgramDir, updates are now in winTempDir
|
// 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 {
|
for _, dir := range dirs {
|
||||||
err := os.Chdir(dir)
|
err := os.Chdir(dir)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -491,7 +505,7 @@ func (a *Agent) CleanupAgentUpdates() {
|
|||||||
|
|
||||||
func (a *Agent) RunPythonCode(code string, timeout int, args []string) (string, error) {
|
func (a *Agent) RunPythonCode(code string, timeout int, args []string) (string, error) {
|
||||||
content := []byte(code)
|
content := []byte(code)
|
||||||
tmpfn, _ := ioutil.TempFile(winTempDir, "*.py")
|
tmpfn, _ := ioutil.TempFile(a.WinTmpDir, "*.py")
|
||||||
if _, err := tmpfn.Write(content); err != nil {
|
if _, err := tmpfn.Write(content); err != nil {
|
||||||
a.Logger.Debugln(err)
|
a.Logger.Debugln(err)
|
||||||
return "", err
|
return "", err
|
||||||
@ -537,8 +551,8 @@ func (a *Agent) RunPythonCode(code string, timeout int, args []string) (string,
|
|||||||
}
|
}
|
||||||
|
|
||||||
func createWinTempDir() error {
|
func createWinTempDir() error {
|
||||||
if !trmm.FileExists(winTempDir) {
|
if !trmm.FileExists(defaultWinTmpDir) {
|
||||||
err := os.Mkdir(winTempDir, 0775)
|
err := os.Mkdir(defaultWinTmpDir, 0775)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -62,6 +62,8 @@ func NewAgentConfig() *rmm.AgentConfig {
|
|||||||
cert, _, _ := k.GetStringValue("Cert")
|
cert, _, _ := k.GetStringValue("Cert")
|
||||||
proxy, _, _ := k.GetStringValue("Proxy")
|
proxy, _, _ := k.GetStringValue("Proxy")
|
||||||
customMeshDir, _, _ := k.GetStringValue("MeshDir")
|
customMeshDir, _, _ := k.GetStringValue("MeshDir")
|
||||||
|
winTmpDir, _, _ := k.GetStringValue("WinTmpDir")
|
||||||
|
winRunAsUserTmpDir, _, _ := k.GetStringValue("WinRunAsUserTmpDir")
|
||||||
natsProxyPath, _, _ := k.GetStringValue("NatsProxyPath")
|
natsProxyPath, _, _ := k.GetStringValue("NatsProxyPath")
|
||||||
natsProxyPort, _, _ := k.GetStringValue("NatsProxyPort")
|
natsProxyPort, _, _ := k.GetStringValue("NatsProxyPort")
|
||||||
natsStandardPort, _, _ := k.GetStringValue("NatsStandardPort")
|
natsStandardPort, _, _ := k.GetStringValue("NatsStandardPort")
|
||||||
@ -78,6 +80,8 @@ func NewAgentConfig() *rmm.AgentConfig {
|
|||||||
Cert: cert,
|
Cert: cert,
|
||||||
Proxy: proxy,
|
Proxy: proxy,
|
||||||
CustomMeshDir: customMeshDir,
|
CustomMeshDir: customMeshDir,
|
||||||
|
WinTmpDir: winTmpDir,
|
||||||
|
WinRunAsUserTmpDir: winRunAsUserTmpDir,
|
||||||
NatsProxyPath: natsProxyPath,
|
NatsProxyPath: natsProxyPath,
|
||||||
NatsProxyPort: natsProxyPort,
|
NatsProxyPort: natsProxyPort,
|
||||||
NatsStandardPort: natsStandardPort,
|
NatsStandardPort: natsStandardPort,
|
||||||
@ -114,7 +118,13 @@ func (a *Agent) RunScript(code string, shell string, args []string, timeout int,
|
|||||||
ext = "*.bat"
|
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 {
|
if err != nil {
|
||||||
a.Logger.Errorln(err)
|
a.Logger.Errorln(err)
|
||||||
return "", err.Error(), 85, err
|
return "", err.Error(), 85, err
|
||||||
@ -133,7 +143,7 @@ func (a *Agent) RunScript(code string, shell string, args []string, timeout int,
|
|||||||
switch shell {
|
switch shell {
|
||||||
case "powershell":
|
case "powershell":
|
||||||
exe = getPowershellExe()
|
exe = getPowershellExe()
|
||||||
cmdArgs = []string{"-NonInteractive", "-NoProfile", "-ExecutionPolicy", "Bypass", tmpfn.Name()}
|
cmdArgs = []string{"-NonInteractive", "-NoProfile", "-ExecutionPolicy", "Bypass", "-File", tmpfn.Name()}
|
||||||
case "python":
|
case "python":
|
||||||
exe = a.PyBin
|
exe = a.PyBin
|
||||||
cmdArgs = []string{tmpfn.Name()}
|
cmdArgs = []string{tmpfn.Name()}
|
||||||
@ -587,7 +597,8 @@ func (a *Agent) UninstallCleanup() {
|
|||||||
a.PatchMgmnt(false)
|
a.PatchMgmnt(false)
|
||||||
a.CleanupAgentUpdates()
|
a.CleanupAgentUpdates()
|
||||||
CleanupSchedTasks()
|
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) {
|
||||||
@ -595,7 +606,7 @@ func (a *Agent) AgentUpdate(url, inno, version string) {
|
|||||||
a.KillHungUpdates()
|
a.KillHungUpdates()
|
||||||
time.Sleep(1 * time.Second)
|
time.Sleep(1 * time.Second)
|
||||||
a.CleanupAgentUpdates()
|
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.Infof("Agent updating from %s to %s", a.Version, version)
|
||||||
a.Logger.Debugln("Downloading agent update from", url)
|
a.Logger.Debugln("Downloading agent update from", url)
|
||||||
|
|
||||||
@ -618,7 +629,7 @@ func (a *Agent) AgentUpdate(url, inno, version string) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
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)}
|
args := []string{"/C", updater, "/VERYSILENT", fmt.Sprintf("/LOG=%s", innoLogFile)}
|
||||||
cmd := exec.Command("cmd.exe", args...)
|
cmd := exec.Command("cmd.exe", args...)
|
||||||
|
@ -42,6 +42,8 @@ type AgentConfig struct {
|
|||||||
Cert string
|
Cert string
|
||||||
Proxy string
|
Proxy string
|
||||||
CustomMeshDir string
|
CustomMeshDir string
|
||||||
|
WinTmpDir string
|
||||||
|
WinRunAsUserTmpDir string
|
||||||
NatsProxyPath string
|
NatsProxyPath string
|
||||||
NatsProxyPort string
|
NatsProxyPort string
|
||||||
NatsStandardPort string
|
NatsStandardPort string
|
||||||
|
Loading…
Reference in New Issue
Block a user