소스 검색

Merge pull request #1466 from kamadak/win-w-bits

Do not send group/others-writable bits from Windows.
Jakob Borg 10 년 전
부모
커밋
3f785eaecf
1개의 변경된 파일17개의 추가작업 그리고 2개의 파일을 삭제
  1. 17 2
      internal/scanner/walk.go

+ 17 - 2
internal/scanner/walk.go

@@ -30,6 +30,21 @@ import (
 	"golang.org/x/text/unicode/norm"
 )
 
+var maskModePerm os.FileMode
+
+func init() {
+	if runtime.GOOS == "windows" {
+		// There is no user/group/others in Windows' read-only
+		// attribute, and all "w" bits are set in os.FileInfo
+		// if the file is not read-only.  Do not send these
+		// group/others-writable bits to other devices in order to
+		// avoid unexpected world-writable files on other platforms.
+		maskModePerm = os.ModePerm & 0755
+	} else {
+		maskModePerm = os.ModePerm
+	}
+}
+
 type Walker struct {
 	// Dir is the base directory for the walk
 	Dir string
@@ -239,7 +254,7 @@ func (w *Walker) walkAndHashFiles(fchan chan protocol.FileInfo) filepath.WalkFun
 			if w.IgnorePerms {
 				flags |= protocol.FlagNoPermBits | 0777
 			} else {
-				flags |= uint32(info.Mode() & os.ModePerm)
+				flags |= uint32(info.Mode() & maskModePerm)
 			}
 			f := protocol.FileInfo{
 				Name:     rn,
@@ -277,7 +292,7 @@ func (w *Walker) walkAndHashFiles(fchan chan protocol.FileInfo) filepath.WalkFun
 				}
 			}
 
-			var flags = uint32(info.Mode() & os.ModePerm)
+			var flags = uint32(info.Mode() & maskModePerm)
 			if w.IgnorePerms {
 				flags = protocol.FlagNoPermBits | 0666
 			}