1/*
2 * IDENTIFICATION:
3 * stub generated Tue Apr 9 11:33:41 2019
4 * with a MiG generated by bootstrap_cmds-96.20.2.200.4
5 * OPTIONS:
6 * KernelServer
7 */
8
9/* Module mach_voucher_attr_control */
10
11#define __MIG_check__Request__mach_voucher_attr_control_subsystem__ 1
12
13#include "mach_voucher_attr_control_server.h"
14
15#ifndef mig_internal
16#define mig_internal static __inline__
17#endif /* mig_internal */
18
19#ifndef mig_external
20#define mig_external
21#endif /* mig_external */
22
23#if !defined(__MigTypeCheck) && defined(TypeCheck)
24#define __MigTypeCheck TypeCheck /* Legacy setting */
25#endif /* !defined(__MigTypeCheck) */
26
27#if !defined(__MigKernelSpecificCode) && defined(_MIG_KERNEL_SPECIFIC_CODE_)
28#define __MigKernelSpecificCode _MIG_KERNEL_SPECIFIC_CODE_ /* Legacy setting */
29#endif /* !defined(__MigKernelSpecificCode) */
30
31#ifndef LimitCheck
32#define LimitCheck 0
33#endif /* LimitCheck */
34
35#ifndef min
36#define min(a,b) ( ((a) < (b))? (a): (b) )
37#endif /* min */
38
39#if !defined(_WALIGN_)
40#define _WALIGN_(x) (((x) + 3) & ~3)
41#endif /* !defined(_WALIGN_) */
42
43#if !defined(_WALIGNSZ_)
44#define _WALIGNSZ_(x) _WALIGN_(sizeof(x))
45#endif /* !defined(_WALIGNSZ_) */
46
47#ifndef UseStaticTemplates
48#define UseStaticTemplates 0
49#endif /* UseStaticTemplates */
50
51#ifndef __DeclareRcvRpc
52#define __DeclareRcvRpc(_NUM_, _NAME_)
53#endif /* __DeclareRcvRpc */
54
55#ifndef __BeforeRcvRpc
56#define __BeforeRcvRpc(_NUM_, _NAME_)
57#endif /* __BeforeRcvRpc */
58
59#ifndef __AfterRcvRpc
60#define __AfterRcvRpc(_NUM_, _NAME_)
61#endif /* __AfterRcvRpc */
62
63#ifndef __DeclareRcvSimple
64#define __DeclareRcvSimple(_NUM_, _NAME_)
65#endif /* __DeclareRcvSimple */
66
67#ifndef __BeforeRcvSimple
68#define __BeforeRcvSimple(_NUM_, _NAME_)
69#endif /* __BeforeRcvSimple */
70
71#ifndef __AfterRcvSimple
72#define __AfterRcvSimple(_NUM_, _NAME_)
73#endif /* __AfterRcvSimple */
74
75#define novalue void
76
77#if __MigKernelSpecificCode
78#define msgh_request_port msgh_remote_port
79#define MACH_MSGH_BITS_REQUEST(bits) MACH_MSGH_BITS_REMOTE(bits)
80#define msgh_reply_port msgh_local_port
81#define MACH_MSGH_BITS_REPLY(bits) MACH_MSGH_BITS_LOCAL(bits)
82#else
83#define msgh_request_port msgh_local_port
84#define MACH_MSGH_BITS_REQUEST(bits) MACH_MSGH_BITS_LOCAL(bits)
85#define msgh_reply_port msgh_remote_port
86#define MACH_MSGH_BITS_REPLY(bits) MACH_MSGH_BITS_REMOTE(bits)
87#endif /* __MigKernelSpecificCode */
88
89#define MIG_RETURN_ERROR(X, code) {\
90 ((mig_reply_error_t *)X)->RetCode = code;\
91 ((mig_reply_error_t *)X)->NDR = NDR_record;\
92 return;\
93 }
94
95/* Forward Declarations */
96
97
98mig_internal novalue _Xmach_voucher_attr_control_get_values
99 (mach_msg_header_t *InHeadP, mach_msg_header_t *OutHeadP);
100
101mig_internal novalue _Xmach_voucher_attr_control_create_mach_voucher
102 (mach_msg_header_t *InHeadP, mach_msg_header_t *OutHeadP);
103
104
105#if ( __MigTypeCheck )
106#if __MIG_check__Request__mach_voucher_attr_control_subsystem__
107#if !defined(__MIG_check__Request__mach_voucher_attr_control_get_values_t__defined)
108#define __MIG_check__Request__mach_voucher_attr_control_get_values_t__defined
109
110mig_internal kern_return_t __MIG_check__Request__mach_voucher_attr_control_get_values_t(__attribute__((__unused__)) __Request__mach_voucher_attr_control_get_values_t *In0P)
111{
112
113 typedef __Request__mach_voucher_attr_control_get_values_t __Request;
114#if __MigTypeCheck
115 if (!(In0P->Head.msgh_bits & MACH_MSGH_BITS_COMPLEX) ||
116 (In0P->msgh_body.msgh_descriptor_count != 1) ||
117 (In0P->Head.msgh_size != (mach_msg_size_t)sizeof(__Request)))
118 return MIG_BAD_ARGUMENTS;
119#endif /* __MigTypeCheck */
120
121#if __MigTypeCheck
122 if (In0P->voucher.type != MACH_MSG_PORT_DESCRIPTOR ||
123 In0P->voucher.disposition != 17)
124 return MIG_TYPE_ERROR;
125#endif /* __MigTypeCheck */
126
127 return MACH_MSG_SUCCESS;
128}
129#endif /* !defined(__MIG_check__Request__mach_voucher_attr_control_get_values_t__defined) */
130#endif /* __MIG_check__Request__mach_voucher_attr_control_subsystem__ */
131#endif /* ( __MigTypeCheck ) */
132
133
134/* Routine mach_voucher_attr_control_get_values */
135mig_internal novalue _Xmach_voucher_attr_control_get_values
136 (mach_msg_header_t *InHeadP, mach_msg_header_t *OutHeadP)
137{
138
139#ifdef __MigPackStructs
140#pragma pack(4)
141#endif
142 typedef struct {
143 mach_msg_header_t Head;
144 /* start of the kernel processed data */
145 mach_msg_body_t msgh_body;
146 mach_msg_port_descriptor_t voucher;
147 /* end of the kernel processed data */
148 NDR_record_t NDR;
149 mach_msg_type_number_t value_handlesCnt;
150 mach_msg_trailer_t trailer;
151 } Request __attribute__((unused));
152#ifdef __MigPackStructs
153#pragma pack()
154#endif
155 typedef __Request__mach_voucher_attr_control_get_values_t __Request;
156 typedef __Reply__mach_voucher_attr_control_get_values_t Reply __attribute__((unused));
157
158 /*
159 * typedef struct {
160 * mach_msg_header_t Head;
161 * NDR_record_t NDR;
162 * kern_return_t RetCode;
163 * } mig_reply_error_t;
164 */
165
166 Request *In0P = (Request *) InHeadP;
167 Reply *OutP = (Reply *) OutHeadP;
168#ifdef __MIG_check__Request__mach_voucher_attr_control_get_values_t__defined
169 kern_return_t check_result;
170#endif /* __MIG_check__Request__mach_voucher_attr_control_get_values_t__defined */
171
172#if __MigKernelSpecificCode
173#else
174#endif /* __MigKernelSpecificCode */
175 ipc_voucher_attr_control_t control;
176 ipc_voucher_t voucher;
177
178 __DeclareRcvRpc(5600, "mach_voucher_attr_control_get_values")
179 __BeforeRcvRpc(5600, "mach_voucher_attr_control_get_values")
180
181#if defined(__MIG_check__Request__mach_voucher_attr_control_get_values_t__defined)
182 check_result = __MIG_check__Request__mach_voucher_attr_control_get_values_t((__Request *)In0P);
183 if (check_result != MACH_MSG_SUCCESS)
184 { MIG_RETURN_ERROR(OutP, check_result); }
185#endif /* defined(__MIG_check__Request__mach_voucher_attr_control_get_values_t__defined) */
186
187 control = convert_port_to_voucher_attr_control(In0P->Head.msgh_request_port);
188
189 voucher = convert_port_to_voucher(In0P->voucher.name);
190
191 OutP->value_handlesCnt = 4;
192 if (In0P->value_handlesCnt < OutP->value_handlesCnt)
193 OutP->value_handlesCnt = In0P->value_handlesCnt;
194
195 OutP->RetCode = mach_voucher_attr_control_get_values(control, voucher, OutP->value_handles, &OutP->value_handlesCnt);
196 ipc_voucher_release(voucher);
197 ipc_voucher_attr_control_release(control);
198 if (OutP->RetCode != KERN_SUCCESS) {
199 MIG_RETURN_ERROR(OutP, OutP->RetCode);
200 }
201#if __MigKernelSpecificCode
202
203 if (IP_VALID((ipc_port_t)In0P->voucher.name))
204 ipc_port_release_send((ipc_port_t)In0P->voucher.name);
205#endif /* __MigKernelSpecificCode */
206
207 OutP->NDR = NDR_record;
208
209 OutP->Head.msgh_size = (mach_msg_size_t)(sizeof(Reply) - 32) + (((8 * OutP->value_handlesCnt)));
210
211 __AfterRcvRpc(5600, "mach_voucher_attr_control_get_values")
212}
213
214#if ( __MigTypeCheck )
215#if __MIG_check__Request__mach_voucher_attr_control_subsystem__
216#if !defined(__MIG_check__Request__mach_voucher_attr_control_create_mach_voucher_t__defined)
217#define __MIG_check__Request__mach_voucher_attr_control_create_mach_voucher_t__defined
218
219mig_internal kern_return_t __MIG_check__Request__mach_voucher_attr_control_create_mach_voucher_t(__attribute__((__unused__)) __Request__mach_voucher_attr_control_create_mach_voucher_t *In0P)
220{
221
222 typedef __Request__mach_voucher_attr_control_create_mach_voucher_t __Request;
223#if __MigTypeCheck
224 unsigned int msgh_size;
225#endif /* __MigTypeCheck */
226
227#if __MigTypeCheck
228 msgh_size = In0P->Head.msgh_size;
229 if ((In0P->Head.msgh_bits & MACH_MSGH_BITS_COMPLEX) ||
230 (msgh_size < (mach_msg_size_t)(sizeof(__Request) - 5120)) || (msgh_size > (mach_msg_size_t)sizeof(__Request)))
231 return MIG_BAD_ARGUMENTS;
232#endif /* __MigTypeCheck */
233
234#if defined(__NDR_convert__int_rep__Request__mach_voucher_attr_control_create_mach_voucher_t__recipesCnt__defined)
235 if (In0P->NDR.int_rep != NDR_record.int_rep)
236 __NDR_convert__int_rep__Request__mach_voucher_attr_control_create_mach_voucher_t__recipesCnt(&In0P->recipesCnt, In0P->NDR.int_rep);
237#endif /* __NDR_convert__int_rep__Request__mach_voucher_attr_control_create_mach_voucher_t__recipesCnt__defined */
238#if __MigTypeCheck
239 if ( In0P->recipesCnt > 5120 )
240 return MIG_BAD_ARGUMENTS;
241 if (((msgh_size - (mach_msg_size_t)(sizeof(__Request) - 5120)) < In0P->recipesCnt) ||
242 (msgh_size != (mach_msg_size_t)(sizeof(__Request) - 5120) + _WALIGN_(In0P->recipesCnt)))
243 return MIG_BAD_ARGUMENTS;
244#endif /* __MigTypeCheck */
245
246 return MACH_MSG_SUCCESS;
247}
248#endif /* !defined(__MIG_check__Request__mach_voucher_attr_control_create_mach_voucher_t__defined) */
249#endif /* __MIG_check__Request__mach_voucher_attr_control_subsystem__ */
250#endif /* ( __MigTypeCheck ) */
251
252
253/* Routine mach_voucher_attr_control_create_mach_voucher */
254mig_internal novalue _Xmach_voucher_attr_control_create_mach_voucher
255 (mach_msg_header_t *InHeadP, mach_msg_header_t *OutHeadP)
256{
257
258#ifdef __MigPackStructs
259#pragma pack(4)
260#endif
261 typedef struct {
262 mach_msg_header_t Head;
263 NDR_record_t NDR;
264 mach_msg_type_number_t recipesCnt;
265 uint8_t recipes[5120];
266 mach_msg_trailer_t trailer;
267 } Request __attribute__((unused));
268#ifdef __MigPackStructs
269#pragma pack()
270#endif
271 typedef __Request__mach_voucher_attr_control_create_mach_voucher_t __Request;
272 typedef __Reply__mach_voucher_attr_control_create_mach_voucher_t Reply __attribute__((unused));
273
274 /*
275 * typedef struct {
276 * mach_msg_header_t Head;
277 * NDR_record_t NDR;
278 * kern_return_t RetCode;
279 * } mig_reply_error_t;
280 */
281
282 Request *In0P = (Request *) InHeadP;
283 Reply *OutP = (Reply *) OutHeadP;
284#ifdef __MIG_check__Request__mach_voucher_attr_control_create_mach_voucher_t__defined
285 kern_return_t check_result;
286#endif /* __MIG_check__Request__mach_voucher_attr_control_create_mach_voucher_t__defined */
287
288#if __MigKernelSpecificCode
289#if UseStaticTemplates
290 const static mach_msg_port_descriptor_t voucherTemplate = {
291 /* name = */ MACH_PORT_NULL,
292 /* pad1 = */ 0,
293 /* pad2 = */ 0,
294 /* disp = */ 17,
295 /* type = */ MACH_MSG_PORT_DESCRIPTOR,
296 };
297#endif /* UseStaticTemplates */
298
299#else
300#if UseStaticTemplates
301 const static mach_msg_port_descriptor_t voucherTemplate = {
302 /* name = */ MACH_PORT_NULL,
303 /* pad1 = */ 0,
304 /* pad2 = */ 0,
305 /* disp = */ 19,
306 /* type = */ MACH_MSG_PORT_DESCRIPTOR,
307 };
308#endif /* UseStaticTemplates */
309
310#endif /* __MigKernelSpecificCode */
311 kern_return_t RetCode;
312 ipc_voucher_attr_control_t control;
313 ipc_voucher_t voucher;
314
315 __DeclareRcvRpc(5601, "mach_voucher_attr_control_create_mach_voucher")
316 __BeforeRcvRpc(5601, "mach_voucher_attr_control_create_mach_voucher")
317
318#if defined(__MIG_check__Request__mach_voucher_attr_control_create_mach_voucher_t__defined)
319 check_result = __MIG_check__Request__mach_voucher_attr_control_create_mach_voucher_t((__Request *)In0P);
320 if (check_result != MACH_MSG_SUCCESS)
321 { MIG_RETURN_ERROR(OutP, check_result); }
322#endif /* defined(__MIG_check__Request__mach_voucher_attr_control_create_mach_voucher_t__defined) */
323
324#if UseStaticTemplates
325 OutP->voucher = voucherTemplate;
326#else /* UseStaticTemplates */
327#if __MigKernelSpecificCode
328 OutP->voucher.disposition = 17;
329#else
330 OutP->voucher.disposition = 19;
331#endif /* __MigKernelSpecificCode */
332#if !(defined(KERNEL) && defined(__LP64__))
333 OutP->voucher.pad1 = 0;
334#endif
335 OutP->voucher.pad2 = 0;
336 OutP->voucher.type = MACH_MSG_PORT_DESCRIPTOR;
337#if defined(KERNEL)
338 OutP->voucher.pad_end = 0;
339#endif
340#endif /* UseStaticTemplates */
341
342
343 control = convert_port_to_voucher_attr_control(In0P->Head.msgh_request_port);
344
345 RetCode = mach_voucher_attr_control_create_mach_voucher(control, In0P->recipes, In0P->recipesCnt, &voucher);
346 ipc_voucher_attr_control_release(control);
347 if (RetCode != KERN_SUCCESS) {
348 MIG_RETURN_ERROR(OutP, RetCode);
349 }
350#if __MigKernelSpecificCode
351#endif /* __MigKernelSpecificCode */
352 OutP->voucher.name = (mach_port_t)convert_voucher_to_port(voucher);
353
354
355 OutP->Head.msgh_bits |= MACH_MSGH_BITS_COMPLEX;
356 OutP->Head.msgh_size = (mach_msg_size_t)(sizeof(Reply));
357 OutP->msgh_body.msgh_descriptor_count = 1;
358 __AfterRcvRpc(5601, "mach_voucher_attr_control_create_mach_voucher")
359}
360
361
362
363/* Description of this subsystem, for use in direct RPC */
364const struct mach_voucher_attr_control_subsystem mach_voucher_attr_control_subsystem = {
365 mach_voucher_attr_control_server_routine,
366 5600,
367 5602,
368 (mach_msg_size_t)sizeof(union __ReplyUnion__mach_voucher_attr_control_subsystem),
369 (vm_address_t)0,
370 {
371 { (mig_impl_routine_t) 0,
372 (mig_stub_routine_t) _Xmach_voucher_attr_control_get_values, 4, 0, (routine_arg_descriptor_t)0, (mach_msg_size_t)sizeof(__Reply__mach_voucher_attr_control_get_values_t)},
373 { (mig_impl_routine_t) 0,
374 (mig_stub_routine_t) _Xmach_voucher_attr_control_create_mach_voucher, 4, 0, (routine_arg_descriptor_t)0, (mach_msg_size_t)sizeof(__Reply__mach_voucher_attr_control_create_mach_voucher_t)},
375 }
376};
377
378mig_external boolean_t mach_voucher_attr_control_server
379 (mach_msg_header_t *InHeadP, mach_msg_header_t *OutHeadP)
380{
381 /*
382 * typedef struct {
383 * mach_msg_header_t Head;
384 * NDR_record_t NDR;
385 * kern_return_t RetCode;
386 * } mig_reply_error_t;
387 */
388
389 register mig_routine_t routine;
390
391 OutHeadP->msgh_bits = MACH_MSGH_BITS(MACH_MSGH_BITS_REPLY(InHeadP->msgh_bits), 0);
392 OutHeadP->msgh_remote_port = InHeadP->msgh_reply_port;
393 /* Minimal size: routine() will update it if different */
394 OutHeadP->msgh_size = (mach_msg_size_t)sizeof(mig_reply_error_t);
395 OutHeadP->msgh_local_port = MACH_PORT_NULL;
396 OutHeadP->msgh_id = InHeadP->msgh_id + 100;
397 OutHeadP->msgh_reserved = 0;
398
399 if ((InHeadP->msgh_id > 5601) || (InHeadP->msgh_id < 5600) ||
400 ((routine = mach_voucher_attr_control_subsystem.routine[InHeadP->msgh_id - 5600].stub_routine) == 0)) {
401 ((mig_reply_error_t *)OutHeadP)->NDR = NDR_record;
402 ((mig_reply_error_t *)OutHeadP)->RetCode = MIG_BAD_ID;
403 return FALSE;
404 }
405 (*routine) (InHeadP, OutHeadP);
406 return TRUE;
407}
408
409mig_external mig_routine_t mach_voucher_attr_control_server_routine
410 (mach_msg_header_t *InHeadP)
411{
412 register int msgh_id;
413
414 msgh_id = InHeadP->msgh_id - 5600;
415
416 if ((msgh_id > 1) || (msgh_id < 0))
417 return 0;
418
419 return mach_voucher_attr_control_subsystem.routine[msgh_id].stub_routine;
420}
421