From 0cfb890bbc9a5787491322a75c76b906165cb816 Mon Sep 17 00:00:00 2001 From: jongwhan Date: Wed, 31 Mar 2021 14:52:14 +0900 Subject: [PATCH] fix reading in gnome keyring remove debug code tidy up remove un-necessary condition --- libsecret.go | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/libsecret.go b/libsecret.go index ca4913d..1c796a6 100644 --- a/libsecret.go +++ b/libsecret.go @@ -3,9 +3,12 @@ package keyring import ( + "encoding/hex" "encoding/json" "errors" + "strings" + "github.com/godbus/dbus" "github.com/gsterjov/go-libsecret" ) @@ -56,6 +59,28 @@ func (e *secretsError) Error() string { var errCollectionNotFound = errors.New("The collection does not exist. Please add a key first") +func decodeKeyringString(src string) string { + + var dst strings.Builder + for i := 0; i < len(src); i++ { + if src[i] != '_' { + dst.WriteString(string(src[i])) + } else { + if i+3 > len(src) { + return src + } + hexstring := src[i+1 : i+3] + decoded, err := hex.DecodeString(hexstring) + if err != nil { + return src + } + dst.Write(decoded) + i += 2 + } + } + return dst.String() +} + func (k *secretsKeyring) openSecrets() error { session, err := k.service.Open() if err != nil { @@ -72,7 +97,7 @@ func (k *secretsKeyring) openSecrets() error { path := libsecret.DBusPath + "/collection/" + k.name for _, collection := range collections { - if string(collection.Path()) == path { + if decodeKeyringString(string(collection.Path())) == path { k.collection = &collection return nil }