aboutsummaryrefslogtreecommitdiffstats
path: root/accounts/keystore/key.go
diff options
context:
space:
mode:
authorMartin Holst Swende <martin@swende.se>2018-09-20 00:08:38 +0800
committerFelix Lange <fjl@users.noreply.github.com>2018-09-20 00:08:38 +0800
commit6f004c46d53958e2fe0e8aad5584a46f9f4bce6c (patch)
tree89667f749458f9c9f9c757e918cd42e7fd03ae03 /accounts/keystore/key.go
parent16e95f33b73b21dc77c7aab40b9764ecc38382a5 (diff)
downloaddexon-6f004c46d53958e2fe0e8aad5584a46f9f4bce6c.tar.gz
dexon-6f004c46d53958e2fe0e8aad5584a46f9f4bce6c.tar.zst
dexon-6f004c46d53958e2fe0e8aad5584a46f9f4bce6c.zip
accounts/keystore: double-check keystore file after creation (#17348)
Diffstat (limited to 'accounts/keystore/key.go')
-rw-r--r--accounts/keystore/key.go18
1 files changed, 13 insertions, 5 deletions
diff --git a/accounts/keystore/key.go b/accounts/keystore/key.go
index 211fa863d..9e3e4856c 100644
--- a/accounts/keystore/key.go
+++ b/accounts/keystore/key.go
@@ -179,26 +179,34 @@ func storeNewKey(ks keyStore, rand io.Reader, auth string) (*Key, accounts.Accou
return key, a, err
}
-func writeKeyFile(file string, content []byte) error {
+func writeTemporaryKeyFile(file string, content []byte) (string, error) {
// Create the keystore directory with appropriate permissions
// in case it is not present yet.
const dirPerm = 0700
if err := os.MkdirAll(filepath.Dir(file), dirPerm); err != nil {
- return err
+ return "", err
}
// Atomic write: create a temporary hidden file first
// then move it into place. TempFile assigns mode 0600.
f, err := ioutil.TempFile(filepath.Dir(file), "."+filepath.Base(file)+".tmp")
if err != nil {
- return err
+ return "", err
}
if _, err := f.Write(content); err != nil {
f.Close()
os.Remove(f.Name())
- return err
+ return "", err
}
f.Close()
- return os.Rename(f.Name(), file)
+ return f.Name(), nil
+}
+
+func writeKeyFile(file string, content []byte) error {
+ name, err := writeTemporaryKeyFile(file, content)
+ if err != nil {
+ return err
+ }
+ return os.Rename(name, file)
}
// keyFileName implements the naming convention for keyfiles: