SecKeychainSearch.cpp [plain text]
#include <Security/SecKeychainSearch.h>
#include <Security/SecKeychainSearchPriv.h>
#include <security_keychain/KCCursor.h>
#include <security_keychain/Item.h>
#include "SecBridge.h"
CFTypeID
SecKeychainSearchGetTypeID(void)
{
BEGIN_SECAPI
return gTypes().KCCursorImpl.typeID;
END_SECAPI1(_kCFRuntimeNotATypeID)
}
OSStatus
SecKeychainSearchCreateFromAttributes(CFTypeRef keychainOrArray, SecItemClass itemClass, const SecKeychainAttributeList *attrList, SecKeychainSearchRef *searchRef)
{
BEGIN_SECAPI
Required(searchRef);
StorageManager::KeychainList keychains;
globals().storageManager.optionalSearchList(keychainOrArray, keychains);
KCCursor cursor(keychains, itemClass, attrList);
*searchRef = cursor->handle();
END_SECAPI
}
OSStatus
SecKeychainSearchCreateFromAttributesExtended(CFTypeRef keychainOrArray, SecItemClass itemClass, const SecKeychainAttributeList *attrList, CSSM_DB_CONJUNCTIVE dbConjunctive, CSSM_DB_OPERATOR dbOperator, SecKeychainSearchRef *searchRef)
{
BEGIN_SECAPI
Required(searchRef);
StorageManager::KeychainList keychains;
globals().storageManager.optionalSearchList(keychainOrArray, keychains);
KCCursor cursor(keychains, itemClass, attrList, dbConjunctive, dbOperator);
*searchRef = cursor->handle();
END_SECAPI
}
OSStatus
SecKeychainSearchCopyNext(SecKeychainSearchRef searchRef, SecKeychainItemRef *itemRef)
{
BEGIN_SECAPI
RequiredParam(itemRef);
Item item;
if (!KCCursorImpl::required(searchRef)->next(item))
return errSecItemNotFound;
*itemRef=item->handle();
END_SECAPI
}