From 6058ff99642a0c852c8037e4211cd287b08b7016 Mon Sep 17 00:00:00 2001 From: Lachlan Donald Date: Mon, 28 Sep 2015 10:57:02 +1000 Subject: [PATCH] Open the keychain and specify it for search, fixes #14 --- keyring/keychain.go | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/keyring/keychain.go b/keyring/keychain.go index ff313f430..e1805f289 100644 --- a/keyring/keychain.go +++ b/keyring/keychain.go @@ -186,6 +186,16 @@ func (k *OSXKeychain) Keys() ([]string, error) { C.kSecMatchLimit: C.kSecMatchLimitAll, C.kSecReturnAttributes: C.CFTypeRef(C.kCFBooleanTrue), } + + kref, err := openKeychain(k.path) + if err != nil { + return nil, err + } + + searchArray := arrayToCFArray([]C.CFTypeRef{C.CFTypeRef(kref)}) + defer C.CFRelease(C.CFTypeRef(searchArray)) + query[C.kSecMatchSearchList] = C.CFTypeRef(searchArray) + queryDict := mapToCFDictionary(query) defer C.CFRelease(C.CFTypeRef(queryDict)) @@ -270,6 +280,7 @@ func createKeychain(path string, promptUser bool, password string) (C.SecKeychai // The returned SecKeychainRef, if non-nil, must be released via CFRelease. func openKeychain(path string) (C.SecKeychainRef, error) { + log.Printf("opening keychain %s", path) pathName := C.CString(path) defer C.free(unsafe.Pointer(pathName))