mirror of
https://github.com/containers/podman.git
synced 2025-10-16 18:53:19 +08:00
hooks: Fail ReadDir if a configured hook executable is missing
The continue here is from 5676597f (hooks/read: Ignore IsNotExist for JSON files in ReadDir, 2018-04-27, #686), where it was intended to silently ignore missing JSON files. However, the old logic was also silently ignoring not-exist errors from the os.Stat(hook.Hook.Path) from 68eb128f (pkg/hooks: Version the hook structure and add 1.0.0 hooks, 2018-04-27, #686). This commit adjusts the check so JSON not-exist errors continue to be silently ignored while hook executable not-exist errors become fatal. Signed-off-by: W. Trevor King <wking@tremily.us> Closes: #887 Approved by: rhatdan
This commit is contained in:

committed by
Atomic Bot

parent
cae49fca29
commit
947e410fe6
@ -67,13 +67,16 @@ func ReadDir(path string, extensionStages []string, hooks map[string]*current.Ho
|
||||
}
|
||||
|
||||
for _, file := range files {
|
||||
hook, err := Read(filepath.Join(path, file.Name()), extensionStages)
|
||||
filePath := filepath.Join(path, file.Name())
|
||||
hook, err := Read(filePath, extensionStages)
|
||||
if err != nil {
|
||||
if err == ErrNoJSONSuffix {
|
||||
continue
|
||||
}
|
||||
if os.IsNotExist(err) {
|
||||
continue
|
||||
if err2, ok := err.(*os.PathError); ok && err2.Path == filePath {
|
||||
continue
|
||||
}
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
@ -191,3 +191,24 @@ func TestBadDir(t *testing.T) {
|
||||
}
|
||||
assert.Regexp(t, "^parsing hook \"[^\"]*a.json\": unrecognized hook version: \"-1\"$", err.Error())
|
||||
}
|
||||
|
||||
func TestHookExecutableDoesNotExit(t *testing.T) {
|
||||
dir, err := ioutil.TempDir("", "hooks-test-")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
defer os.RemoveAll(dir)
|
||||
|
||||
jsonPath := filepath.Join(dir, "hook.json")
|
||||
err = ioutil.WriteFile(jsonPath, []byte("{\"version\": \"1.0.0\", \"hook\": {\"path\": \"/does/not/exist\"}, \"when\": {\"always\": true}, \"stages\": [\"prestart\"]}"), 0644)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
hooks := map[string]*current.Hook{}
|
||||
err = ReadDir(dir, []string{}, hooks)
|
||||
if err == nil {
|
||||
t.Fatal("unexpected success")
|
||||
}
|
||||
assert.Regexp(t, "^stat /does/not/exist: no such file or directory$", err.Error())
|
||||
}
|
||||
|
Reference in New Issue
Block a user