From 2aefe156869851a89d7a34e28c3e4ff3ac442fff Mon Sep 17 00:00:00 2001 From: Mohammed Al Sahaf Date: Tue, 11 May 2021 22:11:27 +0000 Subject: cmd: upgrade: inherit the permissions of the original executable (#4160) --- cmd/commandfuncs.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'cmd/commandfuncs.go') diff --git a/cmd/commandfuncs.go b/cmd/commandfuncs.go index f24a9d0..58b9720 100644 --- a/cmd/commandfuncs.go +++ b/cmd/commandfuncs.go @@ -577,6 +577,10 @@ func cmdUpgrade(_ Flags) (int, error) { if err != nil { return caddy.ExitCodeFailedStartup, fmt.Errorf("determining current executable path: %v", err) } + thisExecStat, err := os.Stat(thisExecPath) + if err != nil { + return caddy.ExitCodeFailedStartup, fmt.Errorf("retrieving current executable permission bits: %v", err) + } l.Info("this executable will be replaced", zap.String("path", thisExecPath)) // get the list of nonstandard plugins @@ -654,7 +658,7 @@ func cmdUpgrade(_ Flags) (int, error) { // download the file; do this in a closure to close reliably before we execute it writeFile := func() error { - destFile, err := os.OpenFile(thisExecPath, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0770) + destFile, err := os.OpenFile(thisExecPath, os.O_RDWR|os.O_CREATE|os.O_TRUNC, thisExecStat.Mode()) if err != nil { return fmt.Errorf("unable to open destination file: %v", err) } -- cgit v1.2.3