fleet/orbit/pkg/platform/platform_notwindows.go
Marcos Oviedo 53b74e576c
Adding fallback mechanism to retrive UUID on Windows (#8993)
* Adding fallback mechanism to retrive UUID on Windows

* Fixing erroneous code comments

* Addressing code review findings
2022-12-13 18:04:49 -03:00

82 lines
2.2 KiB
Go

//go:build !windows
// +build !windows
package platform
import (
"errors"
"fmt"
"os"
"strings"
"github.com/fleetdm/fleet/v4/orbit/pkg/constant"
gopsutil_process "github.com/shirou/gopsutil/v3/process"
)
// ChmodExecutableDirectory sets the appropriate permissions on an executable
// file. On POSIX this is a normal chmod call.
func ChmodExecutableDirectory(path string) error {
if err := os.Chmod(path, constant.DefaultDirMode); err != nil {
return fmt.Errorf("chmod executable directory: %w", err)
}
return nil
}
// ChmodExecutable sets the appropriate permissions on the parent directory of
// an executable file. On POSIX this is a regular chmod call.
func ChmodExecutable(path string) error {
if err := os.Chmod(path, constant.DefaultExecutableMode); err != nil {
return fmt.Errorf("chmod executable: %w", err)
}
return nil
}
// SignalProcessBeforeTerminate just force terminate the target process
// Signaling the child process before termination is not supported on non-windows OSes
func SignalProcessBeforeTerminate(processName string) error {
if processName == "" {
return errors.New("processName should not be empty")
}
if err := KillProcessByName(constant.DesktopAppExecName); err != nil && !errors.Is(err, ErrProcessNotFound) {
return fmt.Errorf("There was an error kill target process %s: %w", processName, err)
}
return nil
}
// GetProcessByName gets a single process object by its name
func GetProcessByName(name string) (*gopsutil_process.Process, error) {
if name == "" {
return nil, errors.New("process name should not be empty")
}
processes, err := gopsutil_process.Processes()
if err != nil {
return nil, err
}
var foundProcess *gopsutil_process.Process
for _, process := range processes {
processName, err := process.Name()
if err != nil {
// No need to print errors here as this method might file for system processes
continue
}
if strings.HasPrefix(processName, name) {
foundProcess = process
break
}
}
if foundProcess == nil {
return nil, ErrProcessNotFound
}
return foundProcess, nil
}
func GetSMBiosUUID() (string, UUIDSource, error) {
return "", UUIDSourceInvalid, errors.New("not implemented.")
}