xref: /trueos/sbin/launchd/shim.h (revision 580f23142c37ced51101ff283f387895b26032bf)
1 #ifndef _SHIM_H_
2 #define _SHIM_H_
3 
4 /* random defines needed for core.c to compile */
5 #include <sys/event.h>
6 #include <mach/task_policy.h>
7 #include <sys/mach/host_special_ports.h>
8 #include <sys/proc_info.h>
9 #include <sys/kern_event.h>
10 #include <sys/fileport.h>
11 #include <spawn.h>
12 #include <mach/mach_port.h>
13 #include <mach/mach_vm.h>
14 #include <mach/host_priv.h>
15 
16 #define RB_UPSDELAY (RB_PAUSE << 1)
17 #define RB_SAFEBOOT (RB_PAUSE << 2)
18 #define RB_UNIPROC (RB_PAUSE << 3)
19 #define RB_ALTBOOT (RB_PAUSE << 4)
20 
21 typedef unsigned int xpc_service_type_t;
22 
23 typedef int xpc_jetsam_band_t;
24 
25 typedef char event_name_t[64];
26 #define vm_allocate mach_vm_allocate
27 #define vm_deallocate mach_vm_deallocate
28 
29 #define     O_EVTONLY       0x8000          /* descriptor requested for event notifications only */
30 
31 #define        _CS_DARWIN_USER_TEMP_DIR                65537
32 #define EBADARCH	86	/* Bad CPU type in executable */
33 
34 
35 #define VQ_UPDATE VQ_FLAG0100
36 
37 
38 #define XPC_EVENT_ROUTINE_KEY_STREAM "XPC key stream"
39 #define XPC_EVENT_ROUTINE_KEY_TOKEN "XPC key token"
40 #define XPC_EVENT_ROUTINE_KEY_NAME "XPC key name"
41 #define XPC_EVENT_ROUTINE_KEY_ENTITLEMENTS "XPC key entitlements"
42 #define XPC_EVENT_ROUTINE_KEY_EVENT "XPC key event"
43 #define XPC_EVENT_ROUTINE_KEY_EVENTS "XPC key events"
44 #define XPC_EVENT_ROUTINE_KEY_FLAGS "XPC key flags"
45 #define XPC_EVENT_ROUTINE_KEY_PORT "XPC key port"
46 #define XPC_EVENT_ROUTINE_KEY_STATE "XPC key state"
47 #define XPC_EVENT_ROUTINE_KEY_OP "XPC key op"
48 #define XPC_EVENT_ROUTINE_KEY_ERROR "XPC key error"
49 #define XPC_PROCESS_ROUTINE_KEY_LABEL "XPC process key label"
50 #define XPC_PROCESS_ROUTINE_KEY_ERROR "XPC process key error"
51 #define XPC_PROCESS_ROUTINE_KEY_HANDLE "XPC process key handle"
52 #define XPC_PROCESS_ROUTINE_KEY_NAME "XPC process key name"
53 #define XPC_PROCESS_ROUTINE_KEY_PATH "XPC process key path"
54 #define XPC_PROCESS_ROUTINE_KEY_ARGV "XPC process key argv"
55 #define XPC_PROCESS_ROUTINE_KEY_TYPE "XPC process key type"
56 #define XPC_PROCESS_ROUTINE_KEY_OP "XPC process key op"
57 #define XPC_PROCESS_ROUTINE_KEY_PID "XPC process key pid"
58 #define XPC_PROCESS_ROUTINE_KEY_RCDATA "XPC process key rcdata"
59 #define XPC_PROCESS_ROUTINE_KEY_SIGNAL "XPC process key signal"
60 #define XPC_PROCESS_ROUTINE_KEY_PRIORITY_BAND "XPC process key priority band"
61 #define XPC_PROCESS_ROUTINE_KEY_MEMORY_LIMIT "XPC process key memory limit"
62 #define XPC_SERVICE_ENTITLEMENT_ATTACH "XPC service entitlement attach"
63 #define XPC_SERVICE_RENDEZVOUS_TOKEN "XPC service rendezvous token"
64 #define XPC_PROCESS_ROUTINE_KEY_NEW_INSTANCE_PORT "XPC process key new instance port"
65 #define XPC_SERVICE_ENV_ATTACHED "XPC service env attached"
66 
67 #define _POSIX_SPAWN_DISABLE_ASLR 0x8000
68 
69 #define XPC_EVENT_FLAG_ENTITLEMENTS 0x000000000000
70 
71 typedef enum {
72 	XPC_EVENT_GET_NAME,
73 	XPC_EVENT_SET,
74 	XPC_EVENT_COPY,
75 	XPC_EVENT_CHECK_IN,
76 	XPC_EVENT_LOOK_UP,
77 	XPC_EVENT_PROVIDER_CHECK_IN,
78 	XPC_EVENT_PROVIDER_SET_STATE,
79 	XPC_EVENT_COPY_ENTITLEMENTS
80 } xpc_event_t;
81 
82 typedef enum {
83 	XPC_PROCESS_JETSAM_SET_BAND,
84 	XPC_PROCESS_JETSAM_SET_MEMORY_LIMIT,
85 	XPC_PROCESS_SERVICE_ATTACH,
86 	XPC_PROCESS_SERVICE_DETACH,
87 	XPC_PROCESS_SERVICE_GET_PROPERTIES,
88 	XPC_PROCESS_SERVICE_KILL
89 } xpc_jetsam_t;
90 
91 #define XPC_JETSAM_BAND_SUSPENDED 10
92 #define XPC_JETSAM_BAND_LAST 20
93 #define XPC_JETSAM_PRIORITY_RESERVED 1000
94 
95 #define XPC_SERVICE_TYPE_BUNDLED 0xBADDCAFE
96 #define XPC_SERVICE_TYPE_LAUNCHD 0xBABECAFE
97 #define XPC_SERVICE_TYPE_APP     0xDEADCAFE
98 #define XPC_SERVICE_TYPE_ENTITLEMENT_ATTACH     0x00DEAD00
99 
100 /* I/O type */
101 #define IOPOL_TYPE_DISK	0
102 
103 /* scope */
104 #define IOPOL_SCOPE_PROCESS   0
105 #define IOPOL_SCOPE_THREAD    1
106 #define IOPOL_SCOPE_DARWIN_BG 2
107 
108 /* I/O Priority */
109 #define IOPOL_DEFAULT		0
110 #define IOPOL_IMPORTANT		1
111 #define IOPOL_PASSIVE		2
112 #define IOPOL_THROTTLE		3
113 #define IOPOL_UTILITY		4
114 #define IOPOL_STANDARD		5
115 
116 /* compatibility with older names */
117 #define IOPOL_APPLICATION       IOPOL_STANDARD
118 #define IOPOL_NORMAL            IOPOL_IMPORTANT
119 
120 int      setiopolicy_np(int, int, int);
121 
122 extern size_t sallocx(void *, int);
123 static inline size_t
malloc_size(void * ptr)124 malloc_size(void * ptr)
125 {
126 
127 	return (sallocx(ptr, 0));
128 }
129 
130 /* domain.defs */
131 kern_return_t
132 xpc_domain_get_service_name(job_t j, event_name_t name);
133 kern_return_t
134 xpc_domain_load_services(job_t j, vm_offset_t services_buff, mach_msg_type_number_t services_sz);
135 kern_return_t
136 xpc_domain_check_in(job_t j, mach_port_t *bsport, mach_port_t *sbsport,
137 	mach_port_t *excport, mach_port_t *asport, uint32_t *uid, uint32_t *gid,
138 					int32_t *asid, vm_offset_t *ctx, mach_msg_type_number_t *ctx_sz);
139 kern_return_t
140 xpc_domain_set_environment(job_t j, mach_port_t rp, mach_port_t bsport, mach_port_t excport, vm_offset_t ctx, mach_msg_type_number_t ctx_sz);
141 kern_return_t
142 xpc_domain_import2(job_t j, mach_port_t reqport, mach_port_t dport);
143 kern_return_t
144 xpc_domain_add_services(job_t j, vm_offset_t services_buff, mach_msg_type_number_t services_sz);
145 #define XPC_LPI_VERSION 20141120
146 
147 
148 __inline int
posix_spawnattr_setprocesstype_np(posix_spawnattr_t * a __unused,const int b __unused)149 posix_spawnattr_setprocesstype_np(posix_spawnattr_t * a __unused, const int b __unused)
150 {
151 	return 0;
152 }
153 
154 __inline int
posix_spawnattr_set_importancewatch_port_np(posix_spawnattr_t * __restrict attr __unused,int count __unused,mach_port_t portarray[]__unused)155 posix_spawnattr_set_importancewatch_port_np(posix_spawnattr_t * __restrict attr __unused,
156 											int count __unused, mach_port_t portarray[] __unused)
157 {
158 	return 0;
159 }
160 
161 __inline int
posix_spawnattr_setcpumonitor_default(posix_spawnattr_t * __restrict a __unused)162 posix_spawnattr_setcpumonitor_default(posix_spawnattr_t * __restrict a __unused)
163 {
164 	return 0;
165 }
166 
167 #endif
168