keychain_mac.cc revision c407dc5cd9bdc5668497f21b26b09d988ab439de
1bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Copyright (c) 2009 The Chromium Authors. All rights reserved. 2bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Use of this source code is governed by a BSD-style license that can be 3bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// found in the LICENSE file. 4bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 5bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/keychain_mac.h" 6bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 7bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenOSStatus MacKeychain::ItemCopyAttributesAndData( 8bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen SecKeychainItemRef itemRef, SecKeychainAttributeInfo *info, 9bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen SecItemClass *itemClass, SecKeychainAttributeList **attrList, 10bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen UInt32 *length, void **outData) const { 11bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return SecKeychainItemCopyAttributesAndData(itemRef, info, itemClass, 12bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen attrList, length, outData); 13bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 14bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 15bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenOSStatus MacKeychain::ItemModifyAttributesAndData( 16bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen SecKeychainItemRef itemRef, const SecKeychainAttributeList *attrList, 17bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen UInt32 length, const void *data) const { 18bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return SecKeychainItemModifyAttributesAndData(itemRef, attrList, length, 19bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen data); 20bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 21bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 22bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenOSStatus MacKeychain::ItemFreeAttributesAndData( 23bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen SecKeychainAttributeList *attrList, void *data) const { 24bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return SecKeychainItemFreeAttributesAndData(attrList, data); 25bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 26bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 27bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenOSStatus MacKeychain::ItemDelete(SecKeychainItemRef itemRef) const { 28bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return SecKeychainItemDelete(itemRef); 29bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 30bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 31bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenOSStatus MacKeychain::SearchCreateFromAttributes( 32bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen CFTypeRef keychainOrArray, SecItemClass itemClass, 33bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const SecKeychainAttributeList *attrList, 34bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen SecKeychainSearchRef *searchRef) const { 35bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return SecKeychainSearchCreateFromAttributes(keychainOrArray, itemClass, 36bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen attrList, searchRef); 37bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 38bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 39bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenOSStatus MacKeychain::SearchCopyNext(SecKeychainSearchRef searchRef, 40bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen SecKeychainItemRef *itemRef) const { 41bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return SecKeychainSearchCopyNext(searchRef, itemRef); 42bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 43bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 44bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenOSStatus MacKeychain::AddInternetPassword( 45bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen SecKeychainRef keychain, 46bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen UInt32 serverNameLength, const char *serverName, 47bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen UInt32 securityDomainLength, const char *securityDomain, 48bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen UInt32 accountNameLength, const char *accountName, 49bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen UInt32 pathLength, const char *path, 50bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen UInt16 port, SecProtocolType protocol, 51bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen SecAuthenticationType authenticationType, 52bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen UInt32 passwordLength, const void *passwordData, 53bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen SecKeychainItemRef *itemRef) const { 54bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return SecKeychainAddInternetPassword(keychain, 55bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen serverNameLength, serverName, 56bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen securityDomainLength, securityDomain, 57bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen accountNameLength, accountName, 58bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen pathLength, path, 59bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen port, protocol, authenticationType, 60bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen passwordLength, passwordData, 61bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen itemRef); 62bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 63bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 64bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenOSStatus MacKeychain::FindGenericPassword(CFTypeRef keychainOrArray, 65bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen UInt32 serviceNameLength, 66bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const char *serviceName, 67bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen UInt32 accountNameLength, 68bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const char *accountName, 69bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen UInt32 *passwordLength, 70bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen void **passwordData, 71bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen SecKeychainItemRef *itemRef) const { 72bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return SecKeychainFindGenericPassword(keychainOrArray, 73bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen serviceNameLength, 74bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen serviceName, 75bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen accountNameLength, 76bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen accountName, 77bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen passwordLength, 78bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen passwordData, 79bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen itemRef); 80bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 81bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 82bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenOSStatus MacKeychain::ItemFreeContent(SecKeychainAttributeList *attrList, 83bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen void *data) const { 84bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return SecKeychainItemFreeContent(attrList, data); 85bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 86bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 87731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickOSStatus MacKeychain::AddGenericPassword(SecKeychainRef keychain, 88bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen UInt32 serviceNameLength, 89bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const char *serviceName, 90bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen UInt32 accountNameLength, 91bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const char *accountName, 92bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen UInt32 passwordLength, 93bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const void *passwordData, 94bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen SecKeychainItemRef *itemRef) const { 95bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return SecKeychainAddGenericPassword(keychain, 96bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen serviceNameLength, 97bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen serviceName, 98bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen accountNameLength, 99bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen accountName, 100bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen passwordLength, 101bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen passwordData, 102bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen itemRef); 103bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 104bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 105bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid MacKeychain::Free(CFTypeRef ref) const { 106bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (ref) { 107bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen CFRelease(ref); 108bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 109bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 110bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen