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