// Copyright (C) 2016 The Syncthing Authors. // // This Source Code Form is subject to the terms of the Mozilla Public // License, v. 2.0. If a copy of the MPL was not distributed with this file, // You can obtain one at https://mozilla.org/MPL/2.0/. //go:build !windows // +build !windows // (No syscall.Umask or the equivalent on Windows) package osutil import ( "io/ioutil" "os" "syscall" "testing" ) func TestTempFilePermissions(t *testing.T) { // Set a zero umask, so any files created will have the permission bits // asked for in the create call and nothing less. oldMask := syscall.Umask(0) defer syscall.Umask(oldMask) fd, err := ioutil.TempFile("", "test") if err != nil { t.Fatal(err) } info, err := fd.Stat() if err != nil { t.Fatal(err) } defer os.Remove(fd.Name()) defer fd.Close() // The temp file should have 0600 permissions at the most, or we have a // security problem in CreateAtomic. t.Logf("Got 0%03o", info.Mode()) if info.Mode()&^0600 != 0 { t.Errorf("Permission 0%03o is too generous", info.Mode()) } }