diff --git a/staging/src/k8s.io/mount-utils/mount_windows.go b/staging/src/k8s.io/mount-utils/mount_windows.go index 9c8ad054f8a..682cb0f0114 100644 --- a/staging/src/k8s.io/mount-utils/mount_windows.go +++ b/staging/src/k8s.io/mount-utils/mount_windows.go @@ -242,6 +242,10 @@ func (mounter *Mounter) IsLikelyNotMountPoint(file string) (bool, error) { if stat.Mode()&os.ModeSymlink != 0 { return false, err } + // go1.23 behavior change: https://github.com/golang/go/issues/63703#issuecomment-2535941458 + if stat.Mode()&os.ModeIrregular != 0 { + return false, err + } return true, nil } @@ -329,30 +333,3 @@ func ListVolumesOnDisk(diskID string) (volumeIDs []string, err error) { volumeIds := strings.Split(strings.TrimSpace(string(output)), "\r\n") return volumeIds, nil } - -// getAllParentLinks walks all symbolic links and return all the parent targets recursively -func getAllParentLinks(path string) ([]string, error) { - const maxIter = 255 - links := []string{} - for { - links = append(links, path) - if len(links) > maxIter { - return links, fmt.Errorf("unexpected length of parent links: %v", links) - } - - fi, err := os.Lstat(path) - if err != nil { - return links, fmt.Errorf("Lstat: %v", err) - } - if fi.Mode()&os.ModeSymlink == 0 { - break - } - - path, err = os.Readlink(path) - if err != nil { - return links, fmt.Errorf("Readlink error: %v", err) - } - } - - return links, nil -} diff --git a/staging/src/k8s.io/mount-utils/mount_windows_test.go b/staging/src/k8s.io/mount-utils/mount_windows_test.go index 83c91b2851f..ddb44409e82 100644 --- a/staging/src/k8s.io/mount-utils/mount_windows_test.go +++ b/staging/src/k8s.io/mount-utils/mount_windows_test.go @@ -27,7 +27,7 @@ import ( "testing" "github.com/stretchr/testify/assert" - "k8s.io/utils/exec/testing" + testingexec "k8s.io/utils/exec/testing" ) func makeLink(link, target string) error { @@ -193,7 +193,26 @@ func TestIsLikelyNotMountPoint(t *testing.T) { } return removeLink(targeLinkPath) }, - true, + false, + false, + }, + { + "junction", + "targetDir", + func(base, fileName, targetLinkName string) error { + target := filepath.Join(base, targetLinkName) + if err := os.Mkdir(target, 0o750); err != nil { + return err + } + + // create a Junction file type on Windows + junction := filepath.Join(base, fileName) + if output, err := exec.Command("cmd", "/c", "mklink", "/J", junction, target).CombinedOutput(); err != nil { + return fmt.Errorf("mklink failed: %v, link(%q) target(%q) output: %q", err, junction, target, string(output)) + } + return nil + }, + false, false, }, } @@ -207,7 +226,7 @@ func TestIsLikelyNotMountPoint(t *testing.T) { filePath := filepath.Join(base, test.fileName) result, err := mounter.IsLikelyNotMountPoint(filePath) - assert.Equal(t, result, test.expectedResult, "Expect result not equal with IsLikelyNotMountPoint(%s) return: %q, expected: %q", + assert.Equal(t, test.expectedResult, result, "Expect result not equal with IsLikelyNotMountPoint(%s) return: %q, expected: %q", filePath, result, test.expectedResult) if test.expectError {