From 522e08872a2709afe3632aea6915c8a825c3b7fd Mon Sep 17 00:00:00 2001 From: Knic Knic Date: Fri, 21 Feb 2020 22:45:05 -0800 Subject: [PATCH] do not rename inuse files --- pkg/passwd/passwd.go | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/pkg/passwd/passwd.go b/pkg/passwd/passwd.go index f8179e86bd..cce8817260 100644 --- a/pkg/passwd/passwd.go +++ b/pkg/passwd/passwd.go @@ -133,19 +133,23 @@ func (p *Passwd) Write(passwdFile string) error { } func writePasswords(passwdFile string, records [][]string) error { - out, err := os.Create(passwdFile + ".tmp") + err := func() error { + // ensure to close tmp file before rename for filesystems like NTFS + out, err := os.Create(passwdFile + ".tmp") + if err != nil { + return err + } + defer out.Close() + + if err := out.Chmod(0600); err != nil { + return err + } + + return csv.NewWriter(out).WriteAll(records) + }() if err != nil { return err } - defer out.Close() - - if err := out.Chmod(0600); err != nil { - return err - } - - if err := csv.NewWriter(out).WriteAll(records); err != nil { - return err - } return os.Rename(passwdFile+".tmp", passwdFile) }