keyring
keyring copied to clipboard
[bug] WinCred kr.Keys() return empty when kr.Set() doesn't call before
I have set keyring:default:key1
, keyring:default:key2
already, and can be found in windows Credential Manager.
then test following code:
kr, err := keyring.Open(keyring.Config{
AllowedBackends: []keyring.BackendType{keyring.WinCredBackend},
})
if err != nil {
t.Fatal(err)
}
keys, err := kr.Keys()
if err != nil {
t.Fatal(err)
}
it would return empty keys. but if I call kr.Set() before kr.Keys(), it would return keyring:default:key1
and keyring:default:key2
kr, err := keyring.Open(keyring.Config{
AllowedBackends: []keyring.BackendType{keyring.WinCredBackend},
})
if err != nil {
t.Fatal(err)
}
item1 := keyring.Item{
Key: "test3",
Data: []byte("loose lips sink ships"),
}
err = kr.Set(item1)
if err != nil {
t.Fatal(err)
}
keys, err := kr.Keys()
if err != nil {
t.Fatal(err)
}
kr, err := keyring.Open(keyring.Config{
AllowedBackends: []keyring.BackendType{keyring.WinCredBackend},
})
if err != nil {
t.Fatal(err)
}
key, err := kr.Get("key1")
if err != nil {
t.Fatal(err)
}
t.Log(key)
will cause panic, it's because calling cred, err := wincred.GetGenericCredential(k.credentialName(key))
returns nil, nil
without error, and cred
is used for cred.CredentialBlob
caused panic
func (k *windowsKeyring) Get(key string) (Item, error) {
cred, err := wincred.GetGenericCredential(k.credentialName(key))
if err != nil {
if err == elementNotFoundError {
return Item{}, ErrKeyNotFound
}
return Item{}, err
}
item := Item{
Key: key,
Data: cred.CredentialBlob,
}
return item, nil
}