MiroFish / internal /securefile /securefile.go
pjpjq's picture
fix(space): 部署账号选择与隐私保护修复
11978a4 verified
Raw
History Blame Contribute Delete
765 Bytes
// Package securefile writes credential-bearing files with owner-only access.
package securefile
import (
"io"
"os"
)
// WriteFile writes data to path and enforces mode 0600 even when path already
// exists with broader permissions.
func WriteFile(path string, data []byte) (err error) {
f, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE, 0o600)
if err != nil {
return err
}
defer func() {
if closeErr := f.Close(); err == nil {
err = closeErr
}
}()
if err := f.Chmod(0o600); err != nil {
return err
}
if err := f.Truncate(0); err != nil {
return err
}
if _, err := f.Seek(0, 0); err != nil {
return err
}
if n, err := f.Write(data); err != nil {
return err
} else if n != len(data) {
return io.ErrShortWrite
}
return nil
}