From: Sergey Matveev Date: Wed, 3 Aug 2022 09:19:37 +0000 (+0300) Subject: Use os.CreateTemp with os.Chmod afterwards X-Git-Tag: v1.26.0~7 X-Git-Url: http://www.git.cypherpunks.ru/?p=goredo.git;a=commitdiff_plain;h=e1c998cc328979b154cee78d4a8ebb93ce06b7b3 Use os.CreateTemp with os.Chmod afterwards --- diff --git a/main.go b/main.go index bfebadf..8791af0 100644 --- a/main.go +++ b/main.go @@ -62,6 +62,7 @@ var ( Cwd string BuildUUID string IsTopRedo bool // is it the top redo instance + UmaskCur int ) func mustSetenv(key string) { @@ -134,6 +135,9 @@ func main() { } log.SetFlags(log.Lshortfile) + UmaskCur = syscall.Umask(0) + syscall.Umask(UmaskCur) + var err error Cwd, err = os.Getwd() if err != nil { diff --git a/tmp.go b/tmp.go index 1d8a3f2..45bf32d 100644 --- a/tmp.go +++ b/tmp.go @@ -21,7 +21,6 @@ package main import ( "os" - "path" "strconv" "time" ) @@ -31,7 +30,14 @@ func tempsuffix() string { } func tempfile(dir, prefix string) (*os.File, error) { - // It respects umask, unlike ioutil.TempFile - name := path.Join(dir, TmpPrefix+prefix+"."+tempsuffix()) - return os.OpenFile(name, os.O_RDWR|os.O_CREATE|os.O_EXCL, os.FileMode(0666)) + tmp, err := os.CreateTemp(dir, prefix) + 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 }