#include <Security/SecAccess.h>
#include <Security/Access.h>
#include "SecBridge.h"
CFTypeID SecAccessGetTypeID(void)
{
BEGIN_SECAPI
return gTypes().Access.typeID;
END_SECAPI1(_kCFRuntimeNotATypeID)
}
OSStatus SecAccessCreate(CFStringRef descriptor, CFArrayRef trustedList, SecAccessRef *accessRef)
{
BEGIN_SECAPI
Required(descriptor);
SecPointer<Access> access;
if (trustedList) {
CFIndex length = CFArrayGetCount(trustedList);
ACL::ApplicationList trusted;
for (CFIndex n = 0; n < length; n++)
trusted.push_back(TrustedApplication::required(
SecTrustedApplicationRef(CFArrayGetValueAtIndex(trustedList, n))));
access = new Access(cfString(descriptor), trusted);
} else {
access = new Access(cfString(descriptor));
}
Required(accessRef) = access->handle();
END_SECAPI
}
OSStatus SecAccessCreateFromOwnerAndACL(const CSSM_ACL_OWNER_PROTOTYPE *owner,
uint32 aclCount, const CSSM_ACL_ENTRY_INFO *acls,
SecAccessRef *accessRef)
{
BEGIN_SECAPI
Required(accessRef); SecPointer<Access> access = new Access(Required(owner), aclCount, &Required(acls));
*accessRef = access->handle();
END_SECAPI
}
OSStatus SecAccessGetOwnerAndACL(SecAccessRef accessRef,
CSSM_ACL_OWNER_PROTOTYPE_PTR *owner,
uint32 *aclCount, CSSM_ACL_ENTRY_INFO_PTR *acls)
{
BEGIN_SECAPI
Access::required(accessRef)->copyOwnerAndAcl(
Required(owner), Required(aclCount), Required(acls));
END_SECAPI
}
OSStatus SecAccessCopyACLList(SecAccessRef accessRef,
CFArrayRef *aclList)
{
BEGIN_SECAPI
Required(aclList) = Access::required(accessRef)->copySecACLs();
END_SECAPI
}
OSStatus SecAccessCopySelectedACLList(SecAccessRef accessRef,
CSSM_ACL_AUTHORIZATION_TAG action,
CFArrayRef *aclList)
{
BEGIN_SECAPI
Required(aclList) = Access::required(accessRef)->copySecACLs(action);
END_SECAPI
}