Capture "broken" symlinks during container build

- Fixes #1267

Signed-off-by: Jonathon Anderson <janderson@ciq.com>
This commit is contained in:
Jonathon Anderson
2024-07-01 16:54:43 -06:00
parent d233b4f71d
commit 75d9ac5fb2
3 changed files with 13 additions and 7 deletions

View File

@@ -297,11 +297,8 @@ func FindFilterFiles(
dev := path_stat.Sys().(*syscall.Stat_t).Dev
for _, inc := range globedInclude {
wwlog.Debug("inc %s", inc)
stat, err := os.Stat(inc)
if os.IsNotExist(err) {
// there may be broken softlinks
continue
} else if err != nil {
stat, err := os.Lstat(inc)
if err != nil {
return ofiles, err
}
if stat.IsDir() {

View File

@@ -7,6 +7,7 @@ import (
"sort"
"testing"
"github.com/stretchr/testify/assert"
"github.com/warewulf/warewulf/internal/pkg/wwlog"
)
@@ -33,14 +34,16 @@ func Test_FindFilterFiles(t *testing.T) {
TryCreatePath(t, dir, "bin")
TryCreatePath(t, dir, "lib")
files, err := FindFilterFiles(dir, []string{"boot", "usr", "bin"}, []string{"/b*/", "/usr/local"}, true)
assert.NoError(t, os.Symlink("/path/to/target", filepath.Join(dir, "symlink")))
files, err := FindFilterFiles(dir, []string{"boot", "usr", "bin", "symlink"}, []string{"/b*/", "/usr/local"}, true)
if err != nil {
t.Errorf("FindFilerFiles failed: %v", err)
t.FailNow()
}
expected := []string{"usr", "usr/bin", "usr/usr", "usr/usr/local"}
expected := []string{"usr", "usr/bin", "usr/usr", "usr/usr/local", "symlink"}
sort.Strings(expected)
sort.Strings(files)
if !reflect.DeepEqual(files, expected) {