2 * Copyright (c) 2006-2007,2011 Apple Inc. All Rights Reserved.
4 * @APPLE_LICENSE_HEADER_START@
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. Please obtain a copy of the License at
10 * http://www.opensource.apple.com/apsl/ and read it before using this
13 * The Original Code and all software distributed under the License are
14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
18 * Please see the License for the specific language governing rights and
19 * limitations under the License.
21 * @APPLE_LICENSE_HEADER_END@
25 // SecCodeHost - Host Code API
28 #include "SecCodeHost.h"
29 #include <security_utilities/cfutilities.h>
30 #include <security_utilities/globalizer.h>
31 #include <securityd_client/ssclient.h>
33 using namespace CodeSigning
;
37 // Munge a CFDictionary into a CssmData representing its plist
39 class DictData
: public CFRef
<CFDataRef
> {
41 DictData(CFDictionaryRef dict
) : CFRef
<CFDataRef
>(makeCFData(dict
)) { }
43 operator CssmData() const
46 return CssmData::wrap(CFDataGetBytePtr(*this), CFDataGetLength(*this));
53 OSStatus
SecHostCreateGuest(SecGuestRef host
,
54 uint32_t status
, CFURLRef path
, CFDictionaryRef attributes
,
55 SecCSFlags flags
, SecGuestRef
*newGuest
)
59 checkFlags(flags
, kSecCSDedicatedHost
| kSecCSGenerateGuestHash
);
60 CodeSigning::Required(newGuest
) = SecurityServer::ClientSession().createGuest(host
,
61 status
, cfString(path
).c_str(), CssmData(), DictData(attributes
), flags
);
66 OSStatus
SecHostRemoveGuest(SecGuestRef host
, SecGuestRef guest
, SecCSFlags flags
)
71 SecurityServer::ClientSession().removeGuest(host
, guest
);
76 OSStatus
SecHostSelectGuest(SecGuestRef guestRef
, SecCSFlags flags
)
81 SecurityServer::ClientSession().selectGuest(guestRef
);
87 OSStatus
SecHostSelectedGuest(SecCSFlags flags
, SecGuestRef
*guestRef
)
92 CodeSigning::Required(guestRef
) = SecurityServer::ClientSession().selectedGuest();
97 OSStatus
SecHostSetGuestStatus(SecGuestRef guestRef
,
98 uint32_t status
, CFDictionaryRef attributes
,
104 SecurityServer::ClientSession().setGuestStatus(guestRef
, status
, DictData(attributes
));
109 OSStatus
SecHostSetHostingPort(mach_port_t hostingPort
, SecCSFlags flags
)
114 SecurityServer::ClientSession().registerHosting(hostingPort
, flags
);