aboutsummaryrefslogtreecommitdiff
path: root/crypto.go
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2016-03-01 14:54:26 +0100
committerDimitri Sokolyuk <demon@dim13.org>2016-03-01 14:54:26 +0100
commit22b6e21cbb304403d8ce9d14060c6a876cf2c0e8 (patch)
tree1971d8bf6e60e1541faba169f066abfe1d4e2e98 /crypto.go
parentfb2e95cde5b0376522bad6a5d54fcc4d021c2dd6 (diff)
Cleanup file operations
Diffstat (limited to 'crypto.go')
-rw-r--r--crypto.go21
1 files changed, 7 insertions, 14 deletions
diff --git a/crypto.go b/crypto.go
index ae8227c..5ed81c0 100644
--- a/crypto.go
+++ b/crypto.go
@@ -10,7 +10,7 @@ import (
"io"
"io/ioutil"
"os"
- "path"
+ "syscall"
)
const (
@@ -46,7 +46,7 @@ func LoadKey(r io.Reader) (crypto.PrivateKey, error) {
}
}
-func saveKey(w io.Writer, key crypto.PrivateKey) error {
+func SaveKey(w io.Writer, key crypto.PrivateKey) error {
var block *pem.Block
switch k := key.(type) {
case *rsa.PrivateKey:
@@ -88,18 +88,11 @@ func LoadCerts(r io.Reader) ([]*x509.Certificate, error) {
return x509.ParseCertificates(block.Bytes)
}
-func CreatePrivFile(fname string) (io.WriteCloser, error) {
- return createFile(fname, 0700)
-}
-
-func CreatePubFile(fname string) (io.WriteCloser, error) {
- return createFile(fname, 0755)
-}
-
-func createFile(fname string, mode os.FileMode) (io.WriteCloser, error) {
- if err := os.MkdirAll(path.Dir(fname), mode); err != nil {
- return nil, err
+func CreateFile(fname string, mode os.FileMode) (io.WriteCloser, error) {
+ err := os.Rename(fname, fname+".bak")
+ if nerr, ok := err.(*os.LinkError); ok && nerr.Err != syscall.ENOENT {
+ return nil, nerr
}
flags := os.O_WRONLY | os.O_CREATE | os.O_TRUNC
- return os.OpenFile(fname, flags, mode&0644)
+ return os.OpenFile(fname, flags, mode)
}