X-Git-Url: https://ruderich.org/simon/gitweb/?a=blobdiff_plain;f=remote%2Fsync%2Ffiles.go;h=e110b526011f577815ecbb9660a792f104743bef;hb=1fba102ea14d034cb0ad0909ce11325be4ce82b0;hp=937f0e1f2df8820381d55951630a7c422e5dbb9d;hpb=9f7f26593d35a34e71da584278345732216d84d3;p=safcm%2Fsafcm.git diff --git a/remote/sync/files.go b/remote/sync/files.go index 937f0e1..e110b52 100644 --- a/remote/sync/files.go +++ b/remote/sync/files.go @@ -383,6 +383,10 @@ reopen: // the error when the user tries to access this // directory (access for the group will fail though). mode := change.Old.Mode & fs.ModePerm & 0700 + // Retain setgid/sticky so that the behavior does not + // change when creating and removing files. + mode |= change.Old.Mode & fs.ModeSetgid + mode |= change.Old.Mode & fs.ModeSticky debugf("chmodding %#o (temporary)", mode) err := oldFh.Chmod(mode) if err != nil { @@ -548,9 +552,12 @@ func OpenParentDirectoryNoSymlinks(path string) (int, string, error) { } dir = ".." parts = []string{filepath.Base(wd)} - } else if parts[0] != "." { + } else { // Relative path: start at the current directory dir = "." + if parts[0] == "." { + parts = parts[1:] + } } dirFd, err := unix.Openat(unix.AT_FDCWD, dir, openReadonlyFlags, 0)