]> git.saurik.com Git - apple/security.git/blobdiff - securityd/src/csproxy.h
Security-59306.11.20.tar.gz
[apple/security.git] / securityd / src / csproxy.h
diff --git a/securityd/src/csproxy.h b/securityd/src/csproxy.h
deleted file mode 100644 (file)
index 37785f7..0000000
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * Copyright (c) 2006-2008,2010 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@
- */
-
-
-//
-// csproxy - Code Signing Hosting Proxy
-//
-#ifndef _H_CSPROXY
-#define _H_CSPROXY
-
-#include <security_utilities/casts.h>
-#include <security_utilities/cfutilities.h>
-#include <security_utilities/debugging_internal.h>
-#include <security_cdsa_utilities/handleobject.h>
-#include <security_utilities/mach++.h>
-#include <security_utilities/machserver.h>
-#include <security_cdsa_utilities/cssmdata.h>
-#include <securityd_client/cshosting.h>
-#include <Security/SecCodeHost.h>
-#include <string>
-#include <map>
-
-using MachPlusPlus::Port;
-using MachPlusPlus::MachServer;
-
-
-//
-// CodeSigningHost is a mix-in for an object representing a primary
-// Code Signing host object. It performs two notionally separate functions:
-//  (1) Register a hosting port.
-//  (2) Optionally, maintain a guest registry to offload the host's work.
-//
-class CodeSigningHost : private MachServer::Handler {
-public:
-       CodeSigningHost();
-       ~CodeSigningHost();
-       void reset();
-       
-       enum HostingState {
-               noHosting,                                      // is not a host (yet), could go either way
-               dynamicHosting,                         // gave us its own hosting port to keep
-               proxyHosting                            // we act as a proxy for it
-       };
-       
-       enum GuestCheck {
-               strict,                                         // direct guest relationship required
-               loose                                           // indirect or identity is okay (prefix check)
-       };
-       
-       struct Guest : public RefCount, public HandleObject {
-       public:
-        Guest();
-               ~Guest();
-               std::vector<SecGuestRef> guestPath; // guest chain to this guest
-               uint32_t status;                        // dynamic status
-               std::string path;                       // canonical code path
-               CFRef<CFDictionaryRef> attributes; // matching attributes set
-               CFRef<CFDataRef> cdhash;        // hash of CodeDirectory as specified by host
-               bool dedicated;                         // host is dedicated (and this is the only guest)
-               
-               operator bool() const { return attributes; }  // exists
-               SecGuestRef guestRef() const { return int_cast<long, SecGuestRef>(handle()); }
-               void setAttributes(const CssmData &attrData);
-        uint8_t const *attrData() const  { createAttrData(); return mAttrData; };
-        CFIndex attrDataLength() const { createAttrData(); return mAttrDataLength; };
-               void setHash(const CssmData &given, bool generate);
-               
-               bool isGuestOf(Guest *host, GuestCheck check) const;
-               bool matches(CFIndex count, CFTypeRef keys[], CFTypeRef values[]) const;
-               
-               IFDUMP(void dump() const);
-       
-       private:
-        void createAttrData() const;
-        
-               mutable uint8_t *mAttrData; // XML form of attributes (vm_allocate'd, must live until guest destruction)
-        mutable CFIndex mAttrDataLength;
-       };
-       
-       void registerCodeSigning(mach_port_t hostingPort, SecCSFlags flags);
-       Port hostingPort() const { return mHostingPort; }
-       
-       SecGuestRef createGuest(SecGuestRef guest,
-               uint32_t status, const char *path,
-               const CssmData &cdhash, const CssmData &attributes, SecCSFlags flags);
-       void setGuestStatus(SecGuestRef guest, uint32_t status, const CssmData &attributes);
-       void removeGuest(SecGuestRef host, SecGuestRef guest);
-
-public:        
-       IFDUMP(void dump() const);
-       
-public:
-       // internal use only (public for use by MIG handlers)
-       Guest *findHost(SecGuestRef hostRef); // find most dedicated guest of this host
-       Guest *findGuest(Guest *host, const CssmData &attrData); // by host and attributes
-       Guest *findGuest(SecGuestRef guestRef, bool hostOk = false); // by guest reference
-       Guest *findGuest(Guest *host);          // any guest of this host
-
-       class Lock;
-       friend class Lock;
-       
-private:
-       boolean_t handle(mach_msg_header_t *in, mach_msg_header_t *out);
-       void eraseGuest(Guest *guest);
-
-private:       
-       mutable Mutex mLock;                            // protects everything below
-       
-       // host port registry
-       HostingState mHostingState;                     // status of hosting support
-       Port mHostingPort;                                      // his or ours or NULL
-
-       // guest map (only used if mHostingState == proxyHosting)
-       typedef std::map<SecGuestRef, RefPointer<Guest> > GuestMap;
-       GuestMap mGuests;
-};
-
-
-//
-// Proxy implementation of Code Signing Hosting protocol
-//
-#define CSH_ARGS       mach_port_t servicePort, mach_port_t replyPort, OSStatus *rcode
-
-#define DATA_IN(base)  void *base, mach_msg_type_number_t base##Length
-#define DATA_OUT(base) void **base, mach_msg_type_number_t *base##Length
-#define DATA(base)             CssmData(base, base##Length)
-
-//
-// Find a guest by arbitrary attribute set.
-//
-// This returns an array of canonical guest references describing the path
-// from the host given to the guest found. If the host itself is returned
-// as a guest, this will be an empty array (zero length).
-//
-// The subhost return argument may in the future return the hosting port for
-// a guest who dynamically manages its hosting (thus breaking out of proxy mode),
-// but this is not yet implemented.
-//
-kern_return_t cshosting_server_findGuest(CSH_ARGS, SecGuestRef hostRef,
-                                         DATA_IN(attributes),
-                                         GuestChain *foundGuest, mach_msg_type_number_t *depth, mach_port_t *subhost);
-
-//
-// Retrieve the path to a guest specified by canonical reference.
-//
-kern_return_t cshosting_server_identifyGuest(CSH_ARGS, SecGuestRef guestRef,
-                                             char *path, char *hash, uint32_t *hashLength, DATA_OUT(attributes));
-
-//
-// Retrieve the status word for a guest specified by canonical reference.
-//
-kern_return_t cshosting_server_guestStatus(CSH_ARGS, SecGuestRef guestRef, uint32_t *status);
-
-#undef CSH_ARGS
-#undef DATA_IN
-#undef DATA_OUT
-#undef DATA
-
-#endif //_H_CSPROXY