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