From 6a250f3f96c9f47a0ead6afb81682d1a812b7a4f Mon Sep 17 00:00:00 2001 From: Jonathon Anderson Date: Wed, 5 Feb 2025 20:03:38 -0700 Subject: [PATCH] Set execute permissions for intermediate directories - Fixes: #1655 Signed-off-by: Jonathon Anderson --- CHANGELOG.md | 2 ++ internal/app/wwctl/overlay/imprt/main.go | 8 +++++--- internal/pkg/overlay/overlay.go | 2 +- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 88cac6d9..86fbcb87 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -33,6 +33,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Specify init=/init when booting with Grub+dracut. #1573 - Fix a warewulfd panic when no kernel fields are specified. #1689 - Create site overlay directory. #1690 +- Set execute permissions for intermediate directories during `wwctl overlay import --parents`. #1655 +- Fix log output formatting during overlay build. ## v4.6.0rc1, 2025-01-29 diff --git a/internal/app/wwctl/overlay/imprt/main.go b/internal/app/wwctl/overlay/imprt/main.go index f53144f8..890950bc 100644 --- a/internal/app/wwctl/overlay/imprt/main.go +++ b/internal/app/wwctl/overlay/imprt/main.go @@ -51,11 +51,13 @@ func CobraRunE(cmd *cobra.Command, args []string) (err error) { wwlog.Debug("Create dir: %s", parent) srcInfo, err := os.Stat(source) if err != nil { - return fmt.Errorf("could not retrieve the stat for file: %s", err) + return fmt.Errorf("could not retrieve the stat for file: %w", err) } - err = os.MkdirAll(parent, srcInfo.Mode()) + mode := srcInfo.Mode() + mode |= ((mode & 0444) >> 2) // add execute permission wherever srcInfo has read + err = os.MkdirAll(parent, mode) if err != nil { - return fmt.Errorf("could not create parent dif: %s: %v", parent, err) + return fmt.Errorf("could not create parent dir: %s: %w", parent, err) } } } diff --git a/internal/pkg/overlay/overlay.go b/internal/pkg/overlay/overlay.go index fa80ee36..3f3995f7 100644 --- a/internal/pkg/overlay/overlay.go +++ b/internal/pkg/overlay/overlay.go @@ -146,7 +146,7 @@ func BuildSpecificOverlays(nodes []node.Node, allNodes []node.Node, overlayNames var wg sync.WaitGroup worker := func() { for n := range nodeChan { - wwlog.Info("Building overlay for %s: %v", n, overlayNames) + wwlog.Info("Building overlay for %s: %v", n.Id(), overlayNames) for _, overlayName := range overlayNames { err := BuildOverlay(n, allNodes, "", []string{overlayName}) if err != nil {