X-Git-Url: https://git.saurik.com/apple/security.git/blobdiff_plain/313fa17b58b78d3c26fb986be9e8fce975cec88c..e3d3b979fd185d8303f28a937baa53a187fb8c7d:/libsecurity_cdsa_client/lib/dlclient.cpp?ds=sidebyside diff --git a/libsecurity_cdsa_client/lib/dlclient.cpp b/libsecurity_cdsa_client/lib/dlclient.cpp index 6fa631bf..31510a53 100644 --- a/libsecurity_cdsa_client/lib/dlclient.cpp +++ b/libsecurity_cdsa_client/lib/dlclient.cpp @@ -23,6 +23,7 @@ #include #include #include +#include using namespace CssmClient; @@ -104,21 +105,23 @@ DbImpl::~DbImpl() void DbImpl::open() { - if (!mActive) - { - assert(mDbInfo == nil); - mHandle.DLHandle = dl()->handle(); - check(CSSM_DL_DbOpen(mHandle.DLHandle, mDbName.canonicalName(), dbLocation(), - mAccessRequest, mAccessCredentials, - mOpenParameters, &mHandle.DBHandle)); - + { StLock _(mActivateMutex); - mActive = true; - - if (!mAccessCredentials && mDefaultCredentials) - if (const AccessCredentials *creds = mDefaultCredentials->makeCredentials()) - CSSM_DL_Authenticate(handle(), mAccessRequest, creds); // ignore error + if (!mActive) + { + assert(mDbInfo == nil); + mHandle.DLHandle = dl()->handle(); + check(CSSM_DL_DbOpen(mHandle.DLHandle, mDbName.canonicalName(), dbLocation(), + mAccessRequest, mAccessCredentials, + mOpenParameters, &mHandle.DBHandle)); + + mActive = true; + } } + + if (!mAccessCredentials && mDefaultCredentials) + if (const AccessCredentials *creds = mDefaultCredentials->makeCredentials()) + CSSM_DL_Authenticate(handle(), mAccessRequest, creds); // ignore error } void @@ -190,7 +193,6 @@ DbImpl::close() void DbImpl::activate() { - StLock _(mActivateMutex); if (!mActive) { if (mDbInfo) @@ -366,6 +368,18 @@ DbImpl::unlock(const CSSM_DATA &password) check(CSSM_DL_PassThrough(handle(), CSSM_APPLECSPDL_DB_UNLOCK, &password, NULL)); } +void +DbImpl::stash() +{ + check(CSSM_DL_PassThrough(handle(), CSSM_APPLECSPDL_DB_STASH, NULL, NULL)); +} + +void +DbImpl::stashCheck() +{ + check(CSSM_DL_PassThrough(handle(), CSSM_APPLECSPDL_DB_STASH_CHECK, NULL, NULL)); +} + void DbImpl::getSettings(uint32 &outIdleTimeout, bool &outLockOnSleep) { @@ -436,7 +450,7 @@ void DbImpl::setBatchMode(Boolean mode, Boolean rollback) // // Now, toggle the autocommit... // - if ( result == noErr ) + if ( result == errSecSuccess ) { CSSM_BOOL modeToUse = !mode; if (rollback) @@ -447,7 +461,7 @@ void DbImpl::setBatchMode(Boolean mode, Boolean rollback) result = CSSM_DL_PassThrough(dldbHandleOfUnderlyingDL, CSSM_APPLEFILEDL_TOGGLE_AUTOCOMMIT, - (void *)(modeToUse), + (void *)((size_t) modeToUse), NULL); if (!rollback && modeToUse) result = CSSM_DL_PassThrough(dldbHandleOfUnderlyingDL,