mirror of
https://github.com/muesli/service-tools.git
synced 2025-05-05 19:30:11 +08:00
Validate all executables
This commit is contained in:
parent
024a9d59b0
commit
a7f679bf11
53
createcmd.go
53
createcmd.go
@ -141,25 +141,58 @@ var (
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func validateExecutables(executable string, allowEmpty bool) (string, error) {
|
||||||
|
executable = strings.TrimSpace(executable)
|
||||||
|
if len(executable) == 0 {
|
||||||
|
if allowEmpty {
|
||||||
|
return executable, nil
|
||||||
|
}
|
||||||
|
return executable, fmt.Errorf("Need an executable to create a service for")
|
||||||
|
}
|
||||||
|
stat, err := os.Stat(executable)
|
||||||
|
if os.IsNotExist(err) {
|
||||||
|
return executable, fmt.Errorf("Could not find executable: %s is not a file", executable)
|
||||||
|
}
|
||||||
|
if stat.IsDir() {
|
||||||
|
return executable, fmt.Errorf("Could not find executable: %s is a directory", executable)
|
||||||
|
}
|
||||||
|
if stat.Mode()&0111 == 0 {
|
||||||
|
return executable, fmt.Errorf("%s is not executable", executable)
|
||||||
|
}
|
||||||
|
|
||||||
|
return executable, nil
|
||||||
|
}
|
||||||
|
|
||||||
func validate() error {
|
func validate() error {
|
||||||
ts, err := targets()
|
ts, err := targets()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("Can't find systemd targets: %s", err)
|
return fmt.Errorf("Can't find systemd targets: %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Exec check
|
// Executable checks
|
||||||
if len(strings.TrimSpace(createOpts.Exec)) == 0 {
|
createOpts.Exec, err = validateExecutables(createOpts.Exec, false)
|
||||||
return fmt.Errorf("Need an executable to create a service for")
|
if err != nil {
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
stat, err := os.Stat(createOpts.Exec)
|
createOpts.ExecReload, err = validateExecutables(createOpts.ExecReload, true)
|
||||||
if os.IsNotExist(err) {
|
if err != nil {
|
||||||
return fmt.Errorf("Could not find executable: %s is not a file", createOpts.Exec)
|
return err
|
||||||
}
|
}
|
||||||
if stat.IsDir() {
|
createOpts.ExecStartPre, err = validateExecutables(createOpts.ExecStartPre, true)
|
||||||
return fmt.Errorf("Could not find executable: %s is a directory", createOpts.Exec)
|
if err != nil {
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
if stat.Mode()&0111 == 0 {
|
createOpts.ExecStartPost, err = validateExecutables(createOpts.ExecStartPost, true)
|
||||||
return fmt.Errorf("%s is not executable", createOpts.Exec)
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
createOpts.ExecStop, err = validateExecutables(createOpts.ExecStop, true)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
createOpts.ExecStopPost, err = validateExecutables(createOpts.ExecStopPost, true)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Description check
|
// Description check
|
||||||
|
Loading…
x
Reference in New Issue
Block a user