1/*
2 * Copyright (c) 2006 Apple Computer, Inc. All Rights Reserved.
3 *
4 * @APPLE_LICENSE_HEADER_START@
5 *
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
11 * file.
12 *
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.
20 *
21 * @APPLE_LICENSE_HEADER_END@
22 */
23#include "kerneldiskrep.h"
24#include <sys/utsname.h>
25
26namespace Security {
27namespace CodeSigning {
28
29using namespace UnixPlusPlus;
30
31
32//
33// Everything about the kernel is pretty much fixed, so there's
34// no state to maintain.
35//
36KernelDiskRep::KernelDiskRep()
37{
38	CODESIGN_DISKREP_CREATE_KERNEL(this);
39}
40
41
42//
43// We can't pull any resources from the kernel.
44// And we know where it all is.
45//
46CFDataRef KernelDiskRep::component(CodeDirectory::SpecialSlot slot)
47{
48	return NULL;
49}
50
51CFDataRef KernelDiskRep::identification()
52{
53	return NULL;
54}
55
56
57CFURLRef KernelDiskRep::copyCanonicalPath()
58{
59	return makeCFURL("/mach_kernel");
60}
61
62string KernelDiskRep::recommendedIdentifier(const SigningContext &)
63{
64	utsname names;
65	UnixError::check(::uname(&names));
66	return string("kernel.") + names.sysname;
67}
68
69size_t KernelDiskRep::signingLimit()
70{
71	return 0;				// don't bother
72}
73
74string KernelDiskRep::format()
75{
76	return "system kernel";
77}
78
79UnixPlusPlus::FileDesc &KernelDiskRep::fd()
80{
81	UnixError::throwMe(EINVAL);		// don't have one
82}
83
84string KernelDiskRep::mainExecutablePath()
85{
86	return "/mach_kernel";
87}
88
89
90} // end namespace CodeSigning
91} // end namespace Security
92