From f032344aeeb70ede1429a79a1a2394de3a07bb0e Mon Sep 17 00:00:00 2001 From: Colin Cornaby Date: Sun, 1 Oct 2023 15:20:12 -0700 Subject: [PATCH] Fixes for keychain storage. Existing keychain code was baulking at some queries. --- .../pfPasswordStore/pfPasswordStore_Apple.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Sources/Plasma/FeatureLib/pfPasswordStore/pfPasswordStore_Apple.cpp b/Sources/Plasma/FeatureLib/pfPasswordStore/pfPasswordStore_Apple.cpp index 8ecc2e9be6..6846d54ade 100644 --- a/Sources/Plasma/FeatureLib/pfPasswordStore/pfPasswordStore_Apple.cpp +++ b/Sources/Plasma/FeatureLib/pfPasswordStore/pfPasswordStore_Apple.cpp @@ -93,8 +93,8 @@ bool pfApplePasswordStore::SetPassword(const ST::string& username, const ST::str CFAutorelease(serviceName); CFAutorelease(passwordData); - const void* keys[] = { kSecClass, kSecAttrService, kSecReturnData, kSecValueData }; - const void* values[] = { kSecClassGenericPassword, serviceName, kCFBooleanTrue, passwordData }; + const void* keys[] = { kSecClass, kSecAttrService, kSecAttrAccount, kSecValueData }; + const void* values[] = { kSecClassGenericPassword, serviceName, accountName, passwordData }; CFDictionaryRef query = CFDictionaryCreate(nullptr, keys, values, 4, nullptr, nullptr); CFAutorelease(query); @@ -104,14 +104,14 @@ bool pfApplePasswordStore::SetPassword(const ST::string& username, const ST::str if (err == errSecDuplicateItem) { // the keychain item already exists, update it - const void* queryKeys[2] = { kSecClass, kSecAttrService }; - const void* queryValues[2] = { kSecClassGenericPassword, serviceName }; - CFDictionaryRef updateQuery = CFDictionaryCreate(nullptr, queryKeys, queryValues, 2, nullptr, nullptr); + const void* queryKeys[] = { kSecClass, kSecAttrService, kSecAttrAccount }; + const void* queryValues[] = { kSecClassGenericPassword, serviceName, accountName }; + CFDictionaryRef updateQuery = CFDictionaryCreate(nullptr, queryKeys, queryValues, 3, nullptr, nullptr); CFAutorelease(updateQuery); - const void* attributeKeys[2] = { kSecAttrAccount, kSecValueData }; - const void* attributeValues[2] = { accountName, passwordData }; - CFDictionaryRef attributes = CFDictionaryCreate(nullptr, attributeKeys, attributeValues, 2, nullptr, nullptr); + const void* attributeKeys[1] = { kSecValueData }; + const void* attributeValues[1] = { passwordData }; + CFDictionaryRef attributes = CFDictionaryCreate(nullptr, attributeKeys, attributeValues, 1, nullptr, nullptr); err = SecItemUpdate(updateQuery, attributes);