mirror of
https://github.com/ssh-vault/ssh-vault.git
synced 2025-08-07 13:02:55 +03:00
shred before removing tempfile
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
package sshvault
|
package sshvault
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
@@ -12,7 +13,7 @@ func (v *vault) Create() ([]byte, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
defer os.Remove(tmpfile.Name())
|
defer Shred(tmpfile.Name())
|
||||||
editor := os.Getenv("EDITOR")
|
editor := os.Getenv("EDITOR")
|
||||||
if editor == "" {
|
if editor == "" {
|
||||||
editor = "vi"
|
editor = "vi"
|
||||||
@@ -28,5 +29,6 @@ func (v *vault) Create() ([]byte, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
fmt.Printf("len(b) = %+v\n", len(b))
|
||||||
return b, nil
|
return b, nil
|
||||||
}
|
}
|
||||||
|
2
edit.go
2
edit.go
@@ -12,7 +12,7 @@ func (v *vault) Edit(data []byte) ([]byte, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
defer os.Remove(tmpfile.Name())
|
defer Shred(tmpfile.Name())
|
||||||
err = ioutil.WriteFile(tmpfile.Name(), data, 0600)
|
err = ioutil.WriteFile(tmpfile.Name(), data, 0600)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
36
shred.go
Normal file
36
shred.go
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
package sshvault
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Shred(file string) error {
|
||||||
|
fmt.Printf("file = %+v\n", file)
|
||||||
|
f, err := os.OpenFile(file, os.O_RDWR, 0600)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
panic(err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
defer f.Close()
|
||||||
|
|
||||||
|
fileInfo, err := f.Stat()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
var size int64 = fileInfo.Size()
|
||||||
|
zeroBytes := make([]byte, size)
|
||||||
|
|
||||||
|
// fill out the new slice with 0 value
|
||||||
|
copy(zeroBytes[:], "0")
|
||||||
|
|
||||||
|
// wipe the content of the target file
|
||||||
|
_, err = f.Write([]byte(zeroBytes))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return os.Remove(file)
|
||||||
|
}
|
Reference in New Issue
Block a user