1
0
mirror of https://github.com/ipfs/kubo.git synced 2025-06-28 17:03:58 +08:00

Modified keystore to ignore invalid key files inside the keystore directory.

* Has calls the validateName function before checking if we have the file
* List filters the returned list of file names by validateName.

License: MIT
Signed-off-by: matrushka <barisgumustas@gmail.com>
This commit is contained in:
matrushka
2018-02-14 12:31:57 +01:00
parent 28acec2adb
commit 4bbaa2aa27
2 changed files with 76 additions and 1 deletions

View File

@ -77,6 +77,10 @@ func (ks *FSKeystore) Has(name string) (bool, error) {
return false, err return false, err
} }
if err := validateName(name); err != nil {
return false, err
}
return true, nil return true, nil
} }
@ -149,5 +153,19 @@ func (ks *FSKeystore) List() ([]string, error) {
return nil, err return nil, err
} }
return dir.Readdirnames(0) dirs, err := dir.Readdirnames(0)
if err != nil {
return nil, err
}
var list []string
for _, name := range dirs {
err := validateName(name)
if err == nil {
list = append(list, name)
}
}
return list, err
} }

View File

@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"io/ioutil" "io/ioutil"
"math/rand" "math/rand"
"path/filepath"
"sort" "sort"
"testing" "testing"
@ -143,6 +144,62 @@ func TestKeystoreBasics(t *testing.T) {
} }
} }
func TestInvalidKeyFiles(t *testing.T) {
tdir, err := ioutil.TempDir("", "keystore-test")
if err != nil {
t.Fatal(err)
}
ks, err := NewFSKeystore(tdir)
if err != nil {
t.Fatal(err)
}
key := privKeyOrFatal(t)
bytes, err := key.Bytes()
if err != nil {
t.Fatal(err)
}
err = ioutil.WriteFile(filepath.Join(ks.dir, "valid"), bytes, 0644)
if err != nil {
t.Fatal(err)
}
err = ioutil.WriteFile(filepath.Join(ks.dir, ".invalid"), bytes, 0644)
if err != nil {
t.Fatal(err)
}
l, err := ks.List()
if err != nil {
t.Fatal(err)
}
sort.Strings(l)
if len(l) != 1 {
t.Fatal("wrong entry count")
}
if l[0] != "valid" {
t.Fatal("wrong entries listed")
}
exist, err := ks.Has("valid")
if !exist {
t.Fatal("should know it has a key named valid")
}
if err != nil {
t.Fatal(err)
}
if exist, err = ks.Has(".invalid"); err == nil {
t.Fatal("shouldnt be able to put a key with a 'hidden' name")
}
}
func TestNonExistingKey(t *testing.T) { func TestNonExistingKey(t *testing.T) {
tdir, err := ioutil.TempDir("", "keystore-test") tdir, err := ioutil.TempDir("", "keystore-test")
if err != nil { if err != nil {