/ OSX / libsecurity_codesigning / lib / kerneldiskrep.cpp
kerneldiskrep.cpp
 1  /*
 2   * Copyright (c) 2006,2011,2014 Apple 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  
26  namespace Security {
27  namespace CodeSigning {
28  
29  using namespace UnixPlusPlus;
30  
31  
32  //
33  // Everything about the kernel is pretty much fixed, so there's
34  // no state to maintain.
35  //
36  KernelDiskRep::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  //
46  CFDataRef KernelDiskRep::component(CodeDirectory::SpecialSlot slot)
47  {
48  	return NULL;
49  }
50  
51  CFDataRef KernelDiskRep::identification()
52  {
53  	return NULL;
54  }
55  
56  
57  CFURLRef KernelDiskRep::copyCanonicalPath()
58  {
59  	return makeCFURL("/mach_kernel");
60  }
61  
62  string KernelDiskRep::recommendedIdentifier(const SigningContext &)
63  {
64  	utsname names;
65  	UnixError::check(::uname(&names));
66  	return string("kernel.") + names.sysname;
67  }
68  
69  size_t KernelDiskRep::signingLimit()
70  {
71  	return 0;				// don't bother
72  }
73  
74  size_t KernelDiskRep::execSegLimit(const Architecture *)
75  {
76  	return 0;				// don't bother
77  }
78      
79  string KernelDiskRep::format()
80  {
81  	return "system kernel";
82  }
83  
84  UnixPlusPlus::FileDesc &KernelDiskRep::fd()
85  {
86  	UnixError::throwMe(EINVAL);		// don't have one
87  }
88  
89  string KernelDiskRep::mainExecutablePath()
90  {
91  	return "/mach_kernel";
92  }
93  
94  
95  } // end namespace CodeSigning
96  } // end namespace Security