1/* 2 * Copyright (c) 2000-2004 Apple Computer, Inc. All Rights Reserved. 3 * 4 * @APPLE_LICENSE_HEADER_START@ 5 * 6 * This file contains Original Code and/or Modifications of Original Code 7 * as defined in and that are subject to the Apple Public Source License 8 * Version 2.0 (the 'License'). You may not use this file except in 9 * compliance with the License. Please obtain a copy of the License at 10 * http://www.opensource.apple.com/apsl/ and read it before using this 11 * file. 12 * 13 * The Original Code and all software distributed under the License are 14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 18 * Please see the License for the specific language governing rights and 19 * limitations under the License. 20 * 21 * @APPLE_LICENSE_HEADER_END@ 22 */ 23 24#include <Security/SecKeychainSearch.h> 25#include <Security/SecKeychainSearchPriv.h> 26#include <security_keychain/KCCursor.h> 27#include <security_keychain/Item.h> 28 29#include "SecBridge.h" 30 31CFTypeID 32SecKeychainSearchGetTypeID(void) 33{ 34 BEGIN_SECAPI 35 36 return gTypes().KCCursorImpl.typeID; 37 38 END_SECAPI1(_kCFRuntimeNotATypeID) 39} 40 41 42OSStatus 43SecKeychainSearchCreateFromAttributes(CFTypeRef keychainOrArray, SecItemClass itemClass, const SecKeychainAttributeList *attrList, SecKeychainSearchRef *searchRef) 44{ 45 BEGIN_SECAPI 46 47 Required(searchRef); 48 49 StorageManager::KeychainList keychains; 50 globals().storageManager.optionalSearchList(keychainOrArray, keychains); 51 KCCursor cursor(keychains, itemClass, attrList); 52 *searchRef = cursor->handle(); 53 54 END_SECAPI 55} 56 57 58OSStatus 59SecKeychainSearchCreateFromAttributesExtended(CFTypeRef keychainOrArray, SecItemClass itemClass, const SecKeychainAttributeList *attrList, CSSM_DB_CONJUNCTIVE dbConjunctive, CSSM_DB_OPERATOR dbOperator, SecKeychainSearchRef *searchRef) 60{ 61 BEGIN_SECAPI 62 63 Required(searchRef); // Make sure that searchRef is an invalid SearchRef 64 65 StorageManager::KeychainList keychains; 66 globals().storageManager.optionalSearchList(keychainOrArray, keychains); 67 KCCursor cursor(keychains, itemClass, attrList, dbConjunctive, dbOperator); 68 69 *searchRef = cursor->handle(); 70 71 END_SECAPI 72} 73 74 75 76OSStatus 77SecKeychainSearchCopyNext(SecKeychainSearchRef searchRef, SecKeychainItemRef *itemRef) 78{ 79 BEGIN_SECAPI 80 81 RequiredParam(itemRef); 82 Item item; 83 if (!KCCursorImpl::required(searchRef)->next(item)) 84 return errSecItemNotFound; 85 86 *itemRef=item->handle(); 87 88 END_SECAPI 89} 90