From 7035ede0b91f3e4d06c1e9c950a502bccad957b1 Mon Sep 17 00:00:00 2001 From: AJ ONeal Date: Sun, 7 Jul 2019 02:14:25 -0600 Subject: [PATCH] bugfix service name handling --- manager/install_darwin.go | 9 ++++---- manager/install_linux.go | 8 +++---- manager/start.go | 46 ++++++++++++++------------------------- 3 files changed, 23 insertions(+), 40 deletions(-) diff --git a/manager/install_darwin.go b/manager/install_darwin.go index 4b1a01f..0903bb9 100644 --- a/manager/install_darwin.go +++ b/manager/install_darwin.go @@ -36,13 +36,11 @@ func start(system bool, home string, name string) error { if nil != err { return err } - service = filepath.Join(srvSysPath, service) } else { service, err = getOneUserSrv(home, sys, user, name) if nil != err { return err } - service = filepath.Join(home, srvUserPath, service) } cmds := []Runnable{ @@ -52,9 +50,10 @@ func start(system bool, home string, name string) error { Must: false, }, Runnable{ - Exec: "launchctl", - Args: []string{"load", "-w", service}, - Must: true, + Exec: "launchctl", + Args: []string{"load", "-w", service}, + Must: true, + Badwords: []string{"No such file or directory", "service already loaded"}, }, } diff --git a/manager/install_linux.go b/manager/install_linux.go index 538f32f..21ffeab 100644 --- a/manager/install_linux.go +++ b/manager/install_linux.go @@ -35,19 +35,17 @@ func start(system bool, home string, name string) error { return err } - var service string + // var service string if system { - service, err = getOneSysSrv(sys, user, name) + _, err = getOneSysSrv(sys, user, name) if nil != err { return err } - service = filepath.Join(srvSysPath, service) } else { - service, err = getOneUserSrv(home, sys, user, name) + _, err = getOneUserSrv(home, sys, user, name) if nil != err { return err } - service = filepath.Join(home, srvUserPath, service) } var cmds []Runnable diff --git a/manager/start.go b/manager/start.go index 7dbf1d4..03f0e5b 100644 --- a/manager/start.go +++ b/manager/start.go @@ -99,10 +99,10 @@ func getSystemSrvs() ([]string, error) { } func getUserSrvs(home string) ([]string, error) { - dir := filepath.Join(home, srvUserPath) - return getSrvs(dir) + return getSrvs(filepath.Join(home, srvUserPath)) } +// "come.example.foo.plist" matches "foo" func filterMatchingSrvs(plists []string, name string) []string { filtered := []string{} @@ -148,59 +148,45 @@ func getExactSrvMatch(srvs []string, name string) string { } func getOneSysSrv(sys []string, user []string, name string) (string, error) { - service := getExactSrvMatch(user, name) - if "" != service { - return service, nil + if service := getExactSrvMatch(user, name); "" != service { + return filepath.Join(srvSysPath, service), nil } - var errstr string - // system service was wanted n := len(sys) switch { case 0 == n: - errstr += fmt.Sprintf("Didn't find user service matching %q\n", name) + errstr := fmt.Sprintf("Didn't find user service matching %q\n", name) if 0 != len(user) { errstr += fmt.Sprintf("Did you intend to run a user service instead?\n\t%s\n", strings.Join(user, "\n\t")) } + return "", fmt.Errorf(errstr) case n > 1: - errstr += fmt.Sprintf("Found more than one matching service:\n\t%s\n", strings.Join(sys, "\n\t")) - default: - service = filepath.Join(srvSysPath, sys[0]) - } - - if "" != errstr { + errstr := fmt.Sprintf("Found more than one matching service:\n\t%s\n", strings.Join(sys, "\n\t")) return "", fmt.Errorf(errstr) + default: + return filepath.Join(srvSysPath, sys[0]), nil } - - return service, nil } func getOneUserSrv(home string, sys []string, user []string, name string) (string, error) { - service := getExactSrvMatch(user, name) - if "" != service { - return service, nil + if service := getExactSrvMatch(user, name); "" != service { + return filepath.Join(home, srvUserPath, service), nil } - var errstr string - // user service was wanted n := len(user) switch { case 0 == n: - errstr += fmt.Sprintf("Didn't find user service matching %q\n", name) + errstr := fmt.Sprintf("Didn't find user service matching %q\n", name) if 0 != len(sys) { errstr += fmt.Sprintf("Did you intend to run a system service instead?\n\t%s\n", strings.Join(sys, "\n\t")) } + return "", fmt.Errorf(errstr) case n > 1: - errstr += fmt.Sprintf("Found more than one matching service:\n\t%s\n", strings.Join(user, "\n\t")) - default: - service = filepath.Join(home, srvUserPath, user[0]+srvExt) - } - - if "" != errstr { + errstr := fmt.Sprintf("Found more than one matching service:\n\t%s\n", strings.Join(user, "\n\t")) return "", fmt.Errorf(errstr) + default: + return filepath.Join(home, srvUserPath, user[0]), nil } - - return service, nil } func adjustPrivs(system bool, cmds []Runnable) []Runnable {