#include <security_cdsa_client/aclclient.h>
#include <Security/cssmapple.h>
#include <Security/cssmapplePriv.h>
+#include <Security/SecBase.h>
using namespace CssmClient;
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));
- mActive = true;
-
- if (!mAccessCredentials && mDefaultCredentials)
- if (const AccessCredentials *creds = mDefaultCredentials->makeCredentials())
- CSSM_DL_Authenticate(handle(), mAccessRequest, creds); // ignore error
+ {
+ StLock<Mutex> _(mActivateMutex);
+ 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
void
DbImpl::create()
{
+ StLock<Mutex> _(mActivateMutex);
if (mActive)
CssmError::throwMe(CSSMERR_DL_DATASTORE_ALREADY_EXISTS);
void
DbImpl::close()
{
+ StLock<Mutex> _(mActivateMutex);
if (mActive)
{
check(CSSM_DL_DbClose (mHandle));
void
DbImpl::deactivate()
{
+ StLock<Mutex> _(mActivateMutex);
if (mActive)
{
mActive = false;
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)
{
//
// Now, toggle the autocommit...
//
- if ( result == noErr )
+ if ( result == errSecSuccess )
{
CSSM_BOOL modeToUse = !mode;
if (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,
attributes,
data,
unique);
+
+ StLock<Mutex> _(mActivateMutex);
if (result == CSSM_OK)
mActive = true;
else if (data != NULL)
if (result == CSSMERR_DL_ENDOFDATA)
{
+ StLock<Mutex> _(mActivateMutex);
mActive = false;
return false;
}
void
DbDbCursorImpl::deactivate()
{
+ StLock<Mutex> _(mActivateMutex);
if (mActive)
{
mActive = false;
void
DbUniqueRecordImpl::activate()
{
+ StLock<Mutex> _(mActivateMutex);
mActive = true;
}
void
DbUniqueRecordImpl::deactivate()
{
+ StLock<Mutex> _(mActivateMutex);
if (mActive)
{
mActive = false;