From 6a40d84afc959f404f243b1c00ab95dc9dd9c721 Mon Sep 17 00:00:00 2001 From: Simon Ruderich Date: Thu, 13 May 2021 13:55:47 +0200 Subject: [PATCH 1/1] safcm: add experimental support to sync from Windows hosts This is _very_ experimental. The testsuite doesn't yet run on Windows and only a few manual tests were run. Basically this is only present because it was used to verify our changes to always use slash-separated paths in the configuration on a real system. It seemed a waste to just throw it away. To build the binary for windows use (empty GOFLAGS to disable -race): make GOOS=windows GOFLAGS= --- cmd/safcm-remote/sync/files.go | 2 ++ cmd/safcm-remote/sync/files_windows.go | 34 ++++++++++++++++++++++++++ cmd/safcm/config/files.go | 11 +++++++++ cmd/safcm/sync.go | 5 ++++ 4 files changed, 52 insertions(+) create mode 100644 cmd/safcm-remote/sync/files_windows.go diff --git a/cmd/safcm-remote/sync/files.go b/cmd/safcm-remote/sync/files.go index 3e88be2..e0a2221 100644 --- a/cmd/safcm-remote/sync/files.go +++ b/cmd/safcm-remote/sync/files.go @@ -15,6 +15,8 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . +// +build !windows + package sync import ( diff --git a/cmd/safcm-remote/sync/files_windows.go b/cmd/safcm-remote/sync/files_windows.go new file mode 100644 index 0000000..11252ef --- /dev/null +++ b/cmd/safcm-remote/sync/files_windows.go @@ -0,0 +1,34 @@ +// MsgSyncReq: copy files to the remote host; Windows compatibility + +// 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 . + +package sync + +import ( + "fmt" + "os" +) + +// Windows remote hosts are not supported. However, the local safcm binary +// imports safcm-remote which fails to build with the regular files.go. + +func (s *Sync) syncFiles() error { + return fmt.Errorf("not implemented on Windows") +} + +func OpenFileNoFollow(path string) (*os.File, error) { + return nil, fmt.Errorf("not implemented on Windows") +} diff --git a/cmd/safcm/config/files.go b/cmd/safcm/config/files.go index 7ffa8b2..143a678 100644 --- a/cmd/safcm/config/files.go +++ b/cmd/safcm/config/files.go @@ -40,6 +40,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 { @@ -60,6 +63,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", @@ -70,6 +78,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", diff --git a/cmd/safcm/sync.go b/cmd/safcm/sync.go index 4a82ca3..0f7c54f 100644 --- a/cmd/safcm/sync.go +++ b/cmd/safcm/sync.go @@ -23,6 +23,7 @@ import ( "log" "os" "os/signal" + "runtime" "sort" "strings" "sync" @@ -105,6 +106,10 @@ func MainSync(args []string) error { os.Exit(1) } + if runtime.GOOS == "windows" { + log.Print("WARNING: Windows support is experimental!") + } + cfg, allHosts, allGroups, err := LoadBaseFiles() if err != nil { return err -- 2.45.2