#ifdef __MWERKS__
#define _KC_UTILITIES
#endif
#include <Security/KCUtilities.h>
#include <Security/cssmerrno.h>
namespace Security
{
OSStatus GetKeychainErrFromCSSMErr( OSStatus cssmError )
{
if (CSSM_ERR_IS_CONVERTIBLE(cssmError))
{
switch (CSSM_ERRCODE(cssmError))
{
case CSSM_ERRCODE_SERVICE_NOT_AVAILABLE:
return errSecNotAvailable;
case CSSM_ERRCODE_USER_CANCELED:
return userCanceledErr;
case CSSM_ERRCODE_OPERATION_AUTH_DENIED:
return errSecAuthFailed;
case CSSM_ERRCODE_NO_USER_INTERACTION:
return errSecInteractionNotAllowed;
case CSSM_ERRCODE_OS_ACCESS_DENIED:
return wrPermErr;
default:
return cssmError;
}
}
else
{
switch (cssmError)
{
case CSSMERR_DL_OS_ACCESS_DENIED:
return wrPermErr;
case CSSMERR_DL_RECORD_NOT_FOUND:
return errSecItemNotFound;
case CSSMERR_DL_INVALID_UNIQUE_INDEX_DATA:
return errSecDuplicateItem;
case CSSMERR_DL_DATABASE_CORRUPT:
return errSecInvalidKeychain;
case CSSMERR_DL_DATASTORE_DOESNOT_EXIST:
return errSecNoSuchKeychain;
case CSSMERR_DL_DATASTORE_ALREADY_EXISTS:
return errSecDuplicateKeychain;
case CSSMERR_DL_INVALID_FIELD_NAME:
return errSecNoSuchAttr;
default:
return cssmError;
}
}
}
StKCAttribute::StKCAttribute( SecKeychainAttribute* inPtr ) :
fAttr( inPtr )
{
}
StKCAttribute::~StKCAttribute( )
{
delete fAttr;
}
StKCItem::StKCItem( SecKeychainItemRef* inItem, OSStatus* result ) :
fItem( inItem ),
fResult( result )
{
}
StKCItem::~StKCItem( )
{
if ( *fResult != noErr && *fItem != NULL )
CFRelease(*fItem );
}
}