allow setting custom defined tmpdir
This commit is contained in:
		| @@ -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 | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 wh1te909
					wh1te909