bugfix service name handling
This commit is contained in:
		
							parent
							
								
									d610b8cb61
								
							
						
					
					
						commit
						7035ede0b9
					
				| @ -36,13 +36,11 @@ func start(system bool, home string, name string) error { | |||||||
| 		if nil != err { | 		if nil != err { | ||||||
| 			return err | 			return err | ||||||
| 		} | 		} | ||||||
| 		service = filepath.Join(srvSysPath, service) |  | ||||||
| 	} else { | 	} else { | ||||||
| 		service, err = getOneUserSrv(home, sys, user, name) | 		service, err = getOneUserSrv(home, sys, user, name) | ||||||
| 		if nil != err { | 		if nil != err { | ||||||
| 			return err | 			return err | ||||||
| 		} | 		} | ||||||
| 		service = filepath.Join(home, srvUserPath, service) |  | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	cmds := []Runnable{ | 	cmds := []Runnable{ | ||||||
| @ -52,9 +50,10 @@ func start(system bool, home string, name string) error { | |||||||
| 			Must: false, | 			Must: false, | ||||||
| 		}, | 		}, | ||||||
| 		Runnable{ | 		Runnable{ | ||||||
| 			Exec: "launchctl", | 			Exec:     "launchctl", | ||||||
| 			Args: []string{"load", "-w", service}, | 			Args:     []string{"load", "-w", service}, | ||||||
| 			Must: true, | 			Must:     true, | ||||||
|  | 			Badwords: []string{"No such file or directory", "service already loaded"}, | ||||||
| 		}, | 		}, | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -35,19 +35,17 @@ func start(system bool, home string, name string) error { | |||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	var service string | 	// var service string | ||||||
| 	if system { | 	if system { | ||||||
| 		service, err = getOneSysSrv(sys, user, name) | 		_, err = getOneSysSrv(sys, user, name) | ||||||
| 		if nil != err { | 		if nil != err { | ||||||
| 			return err | 			return err | ||||||
| 		} | 		} | ||||||
| 		service = filepath.Join(srvSysPath, service) |  | ||||||
| 	} else { | 	} else { | ||||||
| 		service, err = getOneUserSrv(home, sys, user, name) | 		_, err = getOneUserSrv(home, sys, user, name) | ||||||
| 		if nil != err { | 		if nil != err { | ||||||
| 			return err | 			return err | ||||||
| 		} | 		} | ||||||
| 		service = filepath.Join(home, srvUserPath, service) |  | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	var cmds []Runnable | 	var cmds []Runnable | ||||||
|  | |||||||
| @ -99,10 +99,10 @@ func getSystemSrvs() ([]string, error) { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func getUserSrvs(home string) ([]string, error) { | func getUserSrvs(home string) ([]string, error) { | ||||||
| 	dir := filepath.Join(home, srvUserPath) | 	return getSrvs(filepath.Join(home, srvUserPath)) | ||||||
| 	return getSrvs(dir) |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // "come.example.foo.plist" matches "foo" | ||||||
| func filterMatchingSrvs(plists []string, name string) []string { | func filterMatchingSrvs(plists []string, name string) []string { | ||||||
| 	filtered := []string{} | 	filtered := []string{} | ||||||
| 
 | 
 | ||||||
| @ -148,59 +148,45 @@ func getExactSrvMatch(srvs []string, name string) string { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func getOneSysSrv(sys []string, user []string, name string) (string, error) { | func getOneSysSrv(sys []string, user []string, name string) (string, error) { | ||||||
| 	service := getExactSrvMatch(user, name) | 	if service := getExactSrvMatch(user, name); "" != service { | ||||||
| 	if "" != service { | 		return filepath.Join(srvSysPath, service), nil | ||||||
| 		return service, nil |  | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	var errstr string |  | ||||||
| 	// system service was wanted |  | ||||||
| 	n := len(sys) | 	n := len(sys) | ||||||
| 	switch { | 	switch { | ||||||
| 	case 0 == n: | 	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) { | 		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")) | 			errstr += fmt.Sprintf("Did you intend to run a user service instead?\n\t%s\n", strings.Join(user, "\n\t")) | ||||||
| 		} | 		} | ||||||
| 	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 { |  | ||||||
| 		return "", fmt.Errorf(errstr) | 		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")) | ||||||
|  | 		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) { | func getOneUserSrv(home string, sys []string, user []string, name string) (string, error) { | ||||||
| 	service := getExactSrvMatch(user, name) | 	if service := getExactSrvMatch(user, name); "" != service { | ||||||
| 	if "" != service { | 		return filepath.Join(home, srvUserPath, service), nil | ||||||
| 		return service, nil |  | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	var errstr string |  | ||||||
| 	// user service was wanted |  | ||||||
| 	n := len(user) | 	n := len(user) | ||||||
| 	switch { | 	switch { | ||||||
| 	case 0 == n: | 	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) { | 		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")) | 			errstr += fmt.Sprintf("Did you intend to run a system service instead?\n\t%s\n", strings.Join(sys, "\n\t")) | ||||||
| 		} | 		} | ||||||
| 	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 { |  | ||||||
| 		return "", fmt.Errorf(errstr) | 		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")) | ||||||
|  | 		return "", fmt.Errorf(errstr) | ||||||
|  | 	default: | ||||||
|  | 		return filepath.Join(home, srvUserPath, user[0]), nil | ||||||
| 	} | 	} | ||||||
| 
 |  | ||||||
| 	return service, nil |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func adjustPrivs(system bool, cmds []Runnable) []Runnable { | func adjustPrivs(system bool, cmds []Runnable) []Runnable { | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user