#ifdef __MWERKS__
#define _CPP_CSSMACLPOD
#endif
#include <Security/cssmaclpod.h>
#include <Security/cssmwalkers.h>
AuthorizationGroup::AuthorizationGroup(const AclAuthorizationSet &auths,
CssmAllocator &alloc)
{
NumberOfAuthTags = auths.size();
AuthTags = alloc.alloc<CSSM_ACL_AUTHORIZATION_TAG>(NumberOfAuthTags);
copy(auths.begin(), auths.end(), AuthTags); }
void AuthorizationGroup::destroy(CssmAllocator &alloc)
{
alloc.free(AuthTags);
}
bool AuthorizationGroup::contains(CSSM_ACL_AUTHORIZATION_TAG tag) const
{
return find(AuthTags, &AuthTags[NumberOfAuthTags], tag) != &AuthTags[NumberOfAuthTags];
}
AuthorizationGroup::operator AclAuthorizationSet() const
{
return AclAuthorizationSet(AuthTags, &AuthTags[NumberOfAuthTags]);
}
AclEntryPrototype::AclEntryPrototype(const AclOwnerPrototype &proto)
{
memset(this, 0, sizeof(*this));
TypedSubject = proto.subject(); Delegate = proto.delegate();
}
void AclEntryPrototype::tag(const char *tagString)
{
if (tagString == NULL)
EntryTag[0] = '\0';
else if (strlen(tagString) > CSSM_MODULE_STRING_SIZE)
CssmError::throwMe(CSSM_ERRCODE_INVALID_ACL_ENTRY_TAG);
strcpy(EntryTag, tagString);
}
AclOwnerPrototype *AutoAclOwnerPrototype::make()
{
if (!mAclOwnerPrototype) {
mAclOwnerPrototype = new AclOwnerPrototype;
mAclOwnerPrototype->clearPod();
}
return mAclOwnerPrototype;
}
AutoAclOwnerPrototype::~AutoAclOwnerPrototype()
{
if (mAllocator)
DataWalkers::chunkFree(mAclOwnerPrototype, *mAllocator);
}
void
AutoAclOwnerPrototype::allocator(CssmAllocator &allocator)
{
mAllocator = &allocator;
}
AutoAclEntryInfoList::~AutoAclEntryInfoList()
{
if (mAllocator)
{
DataWalkers::ChunkFreeWalker w(*mAllocator);
for (uint32 ix = 0; ix < mNumberOfAclEntries; ix++)
walk(w, mAclEntryInfo[ix]);
mAllocator->free(mAclEntryInfo);
}
}
void
AutoAclEntryInfoList::allocator(CssmAllocator &allocator)
{
mAllocator = &allocator;
}