+++ /dev/null
-/*
- * Copyright (c) 2002-2004,2011,2014 Apple Inc. All Rights Reserved.
- *
- * @APPLE_LICENSE_HEADER_START@
- *
- * This file contains Original Code and/or Modifications of Original Code
- * as defined in and that are subject to the Apple Public Source License
- * Version 2.0 (the 'License'). You may not use this file except in
- * compliance with the License. Please obtain a copy of the License at
- * http://www.opensource.apple.com/apsl/ and read it before using this
- * file.
- *
- * The Original Code and all software distributed under the License are
- * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
- * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
- * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
- * Please see the License for the specific language governing rights and
- * limitations under the License.
- *
- * @APPLE_LICENSE_HEADER_END@
- */
-
-//
-// Access.h - Access control wrappers
-//
-#ifndef _SECURITY_ACCESS_H_
-#define _SECURITY_ACCESS_H_
-
-#include <security_keychain/ACL.h>
-#include <security_utilities/trackingallocator.h>
-#include <security_cdsa_utilities/cssmaclpod.h>
-#include <security_cdsa_utilities/cssmacl.h>
-#include <security_cdsa_client/aclclient.h>
-#include <security_keychain/TrustedApplication.h>
-#include <map>
-
-namespace Security {
-namespace KeychainCore {
-
-using CssmClient::AclBearer;
-
-
-class Access : public SecCFObject {
- NOCOPY(Access)
-public:
- SECCFFUNCTIONS(Access, SecAccessRef, errSecInvalidItemRef, gTypes().Access)
-
- class Maker {
- NOCOPY(Maker)
- static const size_t keySize = 16; // number of (random) bytes
- friend class Access;
- public:
- enum MakerType {kStandardMakerType, kAnyMakerType};
-
- Maker(Allocator &alloc = Allocator::standard(), MakerType makerType = kStandardMakerType);
-
- void initialOwner(ResourceControlContext &ctx, const AccessCredentials *creds = NULL);
- const AccessCredentials *cred();
-
- TrackingAllocator allocator;
-
- static const char creationEntryTag[];
-
- MakerType makerType() {return mMakerType;}
-
- private:
- CssmAutoData mKey;
- AclEntryInput mInput;
- AutoCredentials mCreds;
- MakerType mMakerType;
- };
-
-public:
- // make default forms
- Access(const string &description);
- Access(const string &description, const ACL::ApplicationList &trusted);
- Access(const string &description, const ACL::ApplicationList &trusted,
- const AclAuthorizationSet &limitedRights, const AclAuthorizationSet &freeRights);
-
- // make a completely open Access (anyone can do anything)
- Access();
-
- // retrieve from an existing AclBearer
- Access(AclBearer &source);
-
- // make from CSSM layer information (presumably retrieved by caller)
- Access(const CSSM_ACL_OWNER_PROTOTYPE &owner,
- uint32 aclCount, const CSSM_ACL_ENTRY_INFO *acls);
- virtual ~Access();
-
-public:
- CFArrayRef copySecACLs() const;
- CFArrayRef copySecACLs(CSSM_ACL_AUTHORIZATION_TAG action) const;
-
- void add(ACL *newAcl);
- void addOwner(ACL *newOwnerAcl);
-
- void setAccess(AclBearer &target, bool update = false);
- void setAccess(AclBearer &target, Maker &maker);
-
- template <class Container>
- void findAclsForRight(AclAuthorization right, Container &cont)
- {
- cont.clear();
- for (Map::const_iterator it = mAcls.begin(); it != mAcls.end(); it++)
- if (it->second->authorizes(right))
- cont.push_back(it->second);
- }
-
- std::string promptDescription() const; // from any one of the ACLs contained
-
- void addApplicationToRight(AclAuthorization right, TrustedApplication *app);
-
- void copyOwnerAndAcl(CSSM_ACL_OWNER_PROTOTYPE * &owner,
- uint32 &aclCount, CSSM_ACL_ENTRY_INFO * &acls);
-
-protected:
- void makeStandard(const string &description, const ACL::ApplicationList &trusted,
- const AclAuthorizationSet &limitedRights = AclAuthorizationSet(),
- const AclAuthorizationSet &freeRights = AclAuthorizationSet());
- void compile(const CSSM_ACL_OWNER_PROTOTYPE &owner,
- uint32 aclCount, const CSSM_ACL_ENTRY_INFO *acls);
-
- void editAccess(AclBearer &target, bool update, const AccessCredentials *cred);
-
-private:
- static const CSSM_ACL_HANDLE ownerHandle = ACL::ownerHandle;
- typedef map<CSSM_ACL_HANDLE, SecPointer<ACL> > Map;
-
- Map mAcls; // set of ACL entries
- Mutex mMutex;
-};
-
-
-} // end namespace KeychainCore
-} // end namespace Security
-
-#endif // !_SECURITY_ACCESS_H_