#include <utilities/der_plist.h>
#include <security_utilities/CSPDLTransaction.h>
-#include <SecBasePriv.h>
-
-#define SENDACCESSNOTIFICATIONS 1
+#include <Security/SecBasePriv.h>
//%%% schema indexes should be defined in Schema.h
#define _kSecAppleSharePasswordItemClass 'ashp'
}
ItemImpl::~ItemImpl()
-{
+try {
if (secd_PersistentRef) {
CFRelease(secd_PersistentRef);
}
+} catch (...) {
+#ifndef NDEBUG
+ /* if we get an exception in destructor, presumably the mutex, lets throw if we
+ * are in a debug build (ie reach end of block) */
+#else
+ return;
+#endif
}
+
Mutex*
ItemImpl::getMutexForObject() const
{
void ItemImpl::encodeAttributes(CssmOwnedData &attributeBlob) {
// Sometimes we don't have our attributes. Find them.
- auto_ptr<DbAttributes> dbAttributes(getCurrentAttributes());
+ unique_ptr<DbAttributes> dbAttributes(getCurrentAttributes());
encodeAttributesFromDictionary(attributeBlob, dbAttributes.get());
}
}
void ItemImpl::computeDigest(CssmOwnedData &sha2) {
- auto_ptr<DbAttributes> dbAttributes(getCurrentAttributes());
+ unique_ptr<DbAttributes> dbAttributes(getCurrentAttributes());
ItemImpl::computeDigestFromDictionary(sha2, dbAttributes.get());
}
return true;
}
- auto_ptr<DbAttributes> dbAttributes(getCurrentAttributes());
+ unique_ptr<DbAttributes> dbAttributes(getCurrentAttributes());
return checkIntegrityFromDictionary(aclBearer, dbAttributes.get());
}
// them.
AclEntryInfo &info = aclInfos.at(0);
- auto_ptr<ACL> acl(new ACL(info, Allocator::standard()));
+ unique_ptr<ACL> acl(new ACL(info, Allocator::standard()));
for(int i = 1; i < aclInfos.count(); i++) {
secnotice("integrity", "*** DUPLICATE INTEGRITY ACL, something has gone wrong");
return false; // No MAC, no integrity.
}
- throw cssme;
+ throw;
}
secnotice("integrity", "***** INVALID ITEM");
} catch (CssmError cssme) {
// If there's a "duplicate" of this item, it might be an item with corrupt/invalid attributes
// Try to extract the item and check its attributes, then try again if necessary
- auto_ptr<CssmClient::DbAttributes> primaryKeyAttrs;
+ unique_ptr<CssmClient::DbAttributes> primaryKeyAttrs;
if(cssme.error == CSSMERR_DL_INVALID_UNIQUE_INDEX_DATA) {
secnotice("integrity", "possible duplicate, trying to delete invalid items");
// The item on-disk might have more or different attributes than we do, since we're
// only searching via primary key. Fetch all of its attributes.
- auto_ptr<DbAttributes>dbDupAttributes (new DbAttributes(kc->database(), 1));
+ unique_ptr<DbAttributes>dbDupAttributes (new DbAttributes(kc->database(), 1));
fillDbAttributesFromSchema(*dbDupAttributes, recordType, kc);
// Occasionally this cursor won't return the item attributes (for an unknown reason).
{
getLocalContent(attrList, length, outData);
}
-
- // Inform anyone interested that we are doing this
-#if SENDACCESSNOTIFICATIONS
- if (outData)
- {
- secinfo("kcnotify", "ItemImpl::getContent(%p, %p, %p, %p) retrieved content",
- itemClass, attrList, length, outData);
-
- KCEventNotifier::PostKeychainEvent(kSecDataAccessEvent, mKeychain, this);
- }
-#endif
}
void
ItemImpl::freeContent(SecKeychainAttributeList *attrList, void *data)
{
- Allocator &allocator = Allocator::standard(); // @@@ This might not match the one used originally
+ Allocator &allocator = Allocator::standard(Allocator::sensitive); // @@@ This might not match the one used originally
if (data)
allocator.free(data);
theList->count = 0;
theList->attr = NULL;
} else {
- SecKeychainAttribute *attr=reinterpret_cast<SecKeychainAttribute *>(malloc(sizeof(SecKeychainAttribute)*attrCount));
+ SecKeychainAttribute *attr=reinterpret_cast<SecKeychainAttribute *>(calloc(attrCount, sizeof(SecKeychainAttribute)));
theList->count=attrCount;
theList->attr=attr;
if (length) *length=(UInt32)itemData.length();
itemData.Length=0;
-
-#if SENDACCESSNOTIFICATIONS
- secinfo("kcnotify", "ItemImpl::getAttributesAndData(%p, %p, %p, %p, %p) retrieved data",
- info, itemClass, attrList, length, outData);
-
- KCEventNotifier::PostKeychainEvent(kSecDataAccessEvent, mKeychain, this);
-#endif
}
}
void
ItemImpl::freeAttributesAndData(SecKeychainAttributeList *attrList, void *data)
{
- Allocator &allocator = Allocator::standard(); // @@@ This might not match the one used originally
+ Allocator &allocator = Allocator::standard(Allocator::sensitive); // @@@ This might not match the one used originally
if (data)
allocator.free(data);
}
getContent(NULL, &outData);
-
-#if SENDACCESSNOTIFICATIONS
- secinfo("kcnotify", "ItemImpl::getData retrieved data");
-
- //%%%<might> be done elsewhere, but here is good for now
- KCEventNotifier::PostKeychainEvent(kSecDataAccessEvent, mKeychain, this);
-#endif
}
SSGroup
}
} catch(CssmError cssme) {
secnotice("integrity", "error while checking integrity, denying access: %s", cssme.what());
- throw cssme;
+ throw;
}
SSDbUniqueRecordImpl* impl = dynamic_cast<SSDbUniqueRecordImpl *>(&(*dbUniqueRecord()));