X-Git-Url: http://www.git.cypherpunks.ru/?a=blobdiff_plain;f=fileutils.go;h=aec22c64573304de084db76bf63294facf2928e4;hb=66e425fb0e9a54c1224b808fd797a06a74de0c63;hp=34e6e748956922fb8d7a79ac234828514d3da960;hpb=3bbd67eb5067bf180ed260acee4a2c1a6f6db9ec;p=gocheese.git diff --git a/fileutils.go b/fileutils.go index 34e6e74..aec22c6 100644 --- a/fileutils.go +++ b/fileutils.go @@ -22,17 +22,25 @@ import ( "net/http" "os" "path/filepath" - "strconv" "time" ) -var NoSync = os.Getenv("GOCHEESE_NO_SYNC") == "1" +var ( + NoSync = os.Getenv("GOCHEESE_NO_SYNC") == "1" + UmaskCur int +) func TempFile(dir string) (*os.File, error) { - // Assume that probability of suffix collision is negligible - suffix := strconv.FormatInt(time.Now().UnixNano()+int64(os.Getpid()), 16) - name := filepath.Join(dir, "nncp"+suffix) - return os.OpenFile(name, os.O_RDWR|os.O_CREATE|os.O_EXCL, os.FileMode(0666)) + tmp, err := os.CreateTemp(dir, "gocheese") + if err != nil { + return nil, err + } + err = os.Chmod(tmp.Name(), os.FileMode(0666&^UmaskCur)) + if err != nil { + tmp.Close() + return nil, err + } + return tmp, nil } func DirSync(dirPath string) error {