]> ruderich.org/simon Gitweb - safcm/safcm.git/blobdiff - cmd/safcm/config/files.go
Use SPDX license identifiers
[safcm/safcm.git] / cmd / safcm / config / files.go
index 8f637701a60735c25ebb63969d075b8e1526edd9..88b1410749e5611462db5c0873a280ec32666d13 100644 (file)
@@ -1,19 +1,7 @@
 // Config: load files/ directory tree
 
-// Copyright (C) 2021  Simon Ruderich
-//
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program.  If not, see <http://www.gnu.org/licenses/>.
+// SPDX-License-Identifier: GPL-3.0-or-later
+// Copyright (C) 2021-2024  Simon Ruderich
 
 package config
 
@@ -21,7 +9,9 @@ import (
        "fmt"
        "io/fs"
        "os"
+       slashpath "path"
        "path/filepath"
+       "runtime"
 
        "ruderich.org/simon/safcm"
 )
@@ -38,6 +28,9 @@ confusion files must be manually chmodded 0644/0755 and directories 0755 or
 via "safcm fixperms".
 `
 
+       // No permission checks on windows which doesn't track them.
+       windows := runtime.GOOS == "windows"
+
        files := make(map[string]*safcm.File)
        err := filepath.WalkDir(basePath, func(path string, d fs.DirEntry,
                err error) error {
@@ -58,6 +51,11 @@ via "safcm fixperms".
                // permissions they could assume that these permissions are
                // respected. This is not the case.
                if typ == 0 /* regular file */ {
+                       if windows {
+                               perm = 0644
+                               // 0755 must be set via permissions.yaml if
+                               // windows is used
+                       }
                        if perm != 0644 && perm != 0755 {
                                return fmt.Errorf(
                                        "%q: invalid permissions %#o%s",
@@ -68,6 +66,9 @@ via "safcm fixperms".
                                return err
                        }
                } else if typ == fs.ModeDir {
+                       if windows {
+                               perm = 0755
+                       }
                        if perm != 0755 {
                                return fmt.Errorf(
                                        "%q: invalid permissions %#o%s",
@@ -84,12 +85,13 @@ via "safcm fixperms".
                        return fmt.Errorf("%q: file type not supported", path)
                }
 
-               // Convert to absolute path as used on the target host
+               // Convert to absolute and slash-separated path as used on the
+               // target host
                x, err := filepath.Rel(basePath, path)
                if err != nil {
                        return err
                }
-               x = filepath.Join("/", x)
+               x = slashpath.Join("/", filepath.ToSlash(x))
 
                files[x] = &safcm.File{
                        Path: x,