+++ /dev/null
-/*
- * Copyright (c) 2000-2004,2007 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@
- *
- * AuthorizationEngine.h
- * Authorization
- *
- */
-#ifndef _H_AUTHORIZATIONENGINE
-#define _H_AUTHORIZATIONENGINE 1
-
-#include <Security/Authorization.h>
-#include <Security/AuthorizationPlugin.h>
-#include <security_cdsa_utilities/AuthorizationData.h>
-
-#include <security_utilities/threading.h>
-#include <security_utilities/osxcode.h>
-
-#include <CoreFoundation/CFDate.h>
-#include <CoreFoundation/CFDictionary.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-
-#include "authority.h"
-
-#include "AuthorizationRule.h"
-#include "AuthorizationDBPlist.h"
-
-namespace Authorization
-{
-
-class Error : public CommonError {
-protected:
- Error(int err);
-public:
- const int error;
- virtual int unixError() const throw();
- virtual OSStatus osStatus() const throw();
- virtual const char *what () const throw();
- static void throwMe(int err) __attribute((noreturn));
-};
-
-
-/* The engine which performs the actual authentication and authorization computations.
-
- The implementation of a typical call to AuthorizationCreate would look like:
-
- Get the current shared CredentialSet for this session.
- Call authorizedRights() with inRights and the shared CredentialSet.
- Compute the difference set between the rights requested and the rights returned from authorizedRights().
- Call credentialIds() with the rights computed above (for which we have no credentials yet).
- Call aquireCredentials() for the credentialIds returned from credentialIds()
- For each credential returned place it in the session (replacing when needed) if shared() returns true.
- The authorization returned to the user should now refer to the credentials in the session and the non shared ones returned by aquireCredentials().
-
- When a call to AuthorizationCopyRights() is made, just call authorizedRights() using the union of the session credentials and the credentials tied to the authorization specified.
-
- When a call to AuthorizationCopyInfo() is made, ask the Credential specified by tag for it info and return it.
-
- When a call to AuthorizationFree() is made, delete all the non-shared credentials ascociated with the authorization specified. If the kAuthorizationFreeFlagDestroy is set. Also delete the shared credentials ascociated with the authorization specified.
- */
-class Engine
-{
-public:
- Engine(const char *configFile);
- ~Engine();
-
- OSStatus authorize(const AuthItemSet &inRights, const AuthItemSet &environment,
- AuthorizationFlags flags, const CredentialSet *inCredentials, CredentialSet *outCredentials,
- AuthItemSet &outRights, AuthorizationToken &auth);
- OSStatus getRule(string &inRightName, CFDictionaryRef *outRuleDefinition);
- OSStatus setRule(const char *inRightName, CFDictionaryRef inRuleDefinition, const CredentialSet *inCredentials, CredentialSet *outCredentials, AuthorizationToken &auth);
- OSStatus removeRule(const char *inRightName, const CredentialSet *inCredentials, CredentialSet *outCredentials, AuthorizationToken &auth);
-
-private:
- OSStatus verifyModification(string inRightName, bool remove,
- const CredentialSet *inCredentials, CredentialSet *outCredentials, AuthorizationToken &auth);
-
- AuthorizationDBPlist mAuthdb;
- mutable Mutex mLock;
-};
-
-}; // namespace Authorization
-
-#endif /* ! _H_AUTHORIZATIONENGINE */