diff --git a/CHANGELOG.md b/CHANGELOG.md index 7a3b8d63..b88f0992 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -41,6 +41,12 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Fix wwclient not reading asset-tag. #1110 - Fix iPXE script not including asset-tag #1110 +## v4.5.6, unreleased + +### Fixed + +- Capture "broken" symlinks during container buildA. #1267 + ## v4.5.4, 2024-06-12 ### Fixed diff --git a/internal/pkg/util/util.go b/internal/pkg/util/util.go index 890f2fa8..60266d93 100644 --- a/internal/pkg/util/util.go +++ b/internal/pkg/util/util.go @@ -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() { diff --git a/internal/pkg/util/util_test.go b/internal/pkg/util/util_test.go index c1d3abb3..e5087212 100644 --- a/internal/pkg/util/util_test.go +++ b/internal/pkg/util/util_test.go @@ -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) {