X-Git-Url: https://ruderich.org/simon/gitweb/?a=blobdiff_plain;f=cmd%2Fsafcm-remote%2Fsync%2Ffiles.go;fp=cmd%2Fsafcm-remote%2Fsync%2Ffiles.go;h=12508ce08c2f7e7d2c17b74dca980285ec01f334;hb=713cde4bd701dd53ed46d01f43c9e9e7b82dc514;hp=06bc4066643b1394b286363e2bd7665a136ed722;hpb=fa33bb263d2998174fcc8c6dd8c44c94b41a8380;p=safcm%2Fsafcm.git diff --git a/cmd/safcm-remote/sync/files.go b/cmd/safcm-remote/sync/files.go index 06bc406..12508ce 100644 --- a/cmd/safcm-remote/sync/files.go +++ b/cmd/safcm-remote/sync/files.go @@ -110,10 +110,7 @@ func (s *Sync) syncFile(file *safcm.File, changed *bool) error { var oldStat fs.FileInfo reopen: - oldFh, err := os.OpenFile(file.Path, - // O_NOFOLLOW prevents symlink attacks - // O_NONBLOCK is necessary to prevent blocking on FIFOs - os.O_RDONLY|syscall.O_NOFOLLOW|syscall.O_NONBLOCK, 0) + oldFh, err := OpenFileNoFollow(file.Path) if err != nil { err := err.(*fs.PathError) if err.Err == syscall.ELOOP { @@ -273,8 +270,7 @@ reopen: // a symlink at this point. There's no lchmod so open the // directory. debugf("chmodding %s", file.Mode) - dh, err := os.OpenFile(file.Path, - os.O_RDONLY|syscall.O_NOFOLLOW|syscall.O_NONBLOCK, 0) + dh, err := OpenFileNoFollow(file.Path) if err != nil { return err } @@ -502,6 +498,13 @@ func diffData(oldData []byte, newData []byte) (string, error) { return result, nil } +func OpenFileNoFollow(path string) (*os.File, error) { + return os.OpenFile(path, + // O_NOFOLLOW prevents symlink attacks + // O_NONBLOCK is necessary to prevent blocking on FIFOs + os.O_RDONLY|syscall.O_NOFOLLOW|syscall.O_NONBLOCK, 0) +} + // syncPath syncs path, which should be a directory. To guarantee durability // it must be called on a parent directory after adding, renaming or removing // files therein.