#include "CACError.h"
#include <Security/cssmerr.h>
CACError::CACError(uint16_t sw) : SCardError(sw)
{
#if MAX_OS_X_VERSION_MIN_REQUIRED <= MAX_OS_X_VERSION_10_5
IFDEBUG(debugDiagnose(this));
#else
SECURITY_EXCEPTION_THROW_OTHER(this, sw, (char *)"CAC");
#endif
}
CACError::~CACError() throw ()
{
}
const char *CACError::what() const throw ()
{ return "CAC error"; }
OSStatus CACError::osStatus() const
{
switch (statusWord)
{
case CAC_AUTHENTICATION_FAILED_0:
case CAC_AUTHENTICATION_FAILED_1:
case CAC_AUTHENTICATION_FAILED_2:
case CAC_AUTHENTICATION_FAILED_3:
return CSSM_ERRCODE_OPERATION_AUTH_DENIED;
default:
return SCardError::osStatus();
}
}
void CACError::throwMe(uint16_t sw)
{ throw CACError(sw); }
#if !defined(NDEBUG)
#if MAX_OS_X_VERSION_MIN_REQUIRED <= MAX_OS_X_VERSION_10_5
void CACError::debugDiagnose(const void *id) const
{
secdebug("exception", "%p CACError %s (%04hX)",
id, errorstr(statusWord), statusWord);
}
#endif // MAX_OS_X_VERSION_MIN_REQUIRED <= MAX_OS_X_VERSION_10_5
const char *CACError::errorstr(uint16_t sw) const
{
switch (sw)
{
case CAC_AUTHENTICATION_FAILED_0:
return "Authentication failed, 0 retries left.";
case CAC_AUTHENTICATION_FAILED_1:
return "Authentication failed, 1 retry left.";
case CAC_AUTHENTICATION_FAILED_2:
return "Authentication failed, 2 retries left.";
case CAC_AUTHENTICATION_FAILED_3:
return "Authentication failed, 3 retries left.";
default:
return SCardError::errorstr(sw);
}
}
#endif //NDEBUG