]> ruderich.org/simon Gitweb - safcm/safcm.git/blobdiff - remote/sync/files.go
Update golang.org/x/sys and remove OpenBSD workarounds
[safcm/safcm.git] / remote / sync / files.go
index 937f0e1f2df8820381d55951630a7c422e5dbb9d..2c8b70468a55bb3f627c620db06c370f591d502e 100644 (file)
@@ -324,7 +324,7 @@ reopen:
                err := unix.Unlinkat(parentFd, baseName, 0)
                if err != nil && !os.IsNotExist(err) {
                        err2 := unix.Unlinkat(parentFd, baseName,
-                               AT_REMOVEDIR)
+                               unix.AT_REMOVEDIR)
                        if err2 != nil && !os.IsNotExist(err2) {
                                // See src/os/file_unix.go in Go's sources
                                if err2 == unix.ENOTDIR {
@@ -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)