#include <security_cdsa_utilities/cssmacl.h>
#include <security_cdsa_utilities/cssmbridge.h>
#include <security_utilities/endian.h>
#include <security_utilities/debugging.h>
#include <algorithm>
#include <cstdarg>
AclValidationContext::~AclValidationContext()
{ }
void AclValidationContext::init(ObjectAcl *acl, AclSubject *subject)
{
mAcl = acl;
mSubject = subject;
}
const char *AclValidationContext::credTag() const
{
return mCred ? mCred->tag() : NULL;
}
std::string AclValidationContext::s_credTag() const
{
const char *s = this->credTag();
return s ? s : "";
}
const char *AclValidationContext::entryTag() const
{
return mEntryTag;
}
void AclValidationContext::entryTag(const char *tag)
{
mEntryTag = (tag && tag[0]) ? tag : NULL;
}
void AclValidationContext::entryTag(const std::string &tag)
{
mEntryTag = tag.empty() ? NULL : tag.c_str();
}
AclSubject::AclSubject(uint32 type, Version v )
: mType(type), mVersion(v)
{
assert(!(type & versionMask));
}
AclSubject::~AclSubject()
{ }
AclValidationEnvironment::~AclValidationEnvironment()
{ }
Adornable &AclValidationEnvironment::store(const AclSubject *subject)
{
CssmError::throwMe(CSSM_ERRCODE_ACL_SUBJECT_TYPE_NOT_SUPPORTED);
}
void AclSubject::exportBlob(Writer::Counter &, Writer::Counter &)
{ }
void AclSubject::exportBlob(Writer &, Writer &)
{ }
void AclSubject::importBlob(Reader &, Reader &)
{ }
void AclSubject::reset()
{ }
AclSubject::Maker::~Maker()
{
}
bool SimpleAclSubject::validate(const AclValidationContext &ctx) const
{
for (uint32 n = 0; n < ctx.count(); n++) {
const TypedList &sample = ctx[n];
if (!sample.isProper())
CssmError::throwMe(CSSM_ERRCODE_INVALID_SAMPLE_VALUE);
if (sample.type() == type() && validate(ctx, sample)) {
ctx.matched(ctx[n]);
return true; }
}
return false;
}
void AclSubject::debugDump() const
{
#if defined(DEBUGDUMP)
switch (type()) {
case CSSM_ACL_SUBJECT_TYPE_ANY:
Debug::dump("ANY");
break;
default:
Debug::dump("subject type=%d", type());
break;
}
#endif //DEBUGDUMP
}
#if defined(DEBUGDUMP)
void AclSubject::dump(const char *title) const
{
Debug::dump(" ** %s ", title);
this->debugDump();
Debug::dump("\n");
}
#endif //DEBUGDUMP