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

Do not send group/others-writable bits from Windows.
This commit is contained in:
Jakob Borg 2015-03-15 16:35:13 +01:00
commit 3f785eaecf
1 changed files with 17 additions and 2 deletions

View File

@ -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
}