/* * Copyright (c) 1999-2004 Apple Computer, Inc. All rights reserved. * * @APPLE_APACHE_LICENSE_HEADER_START@ * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * @APPLE_APACHE_LICENSE_HEADER_END@ */ /* * bootstrap -- fundamental service initiator and port server * Mike DeMoney, NeXT, Inc. * Copyright, 1990. All rights reserved. */ subsystem protocol_vproc 400; #include #include #include "launchd_mig_types.defs" import "vproc.h"; import "vproc_priv.h"; import "vproc_internal.h"; type mach_port_move_send_array_t = array[] of mach_port_move_send_t ctype: mach_port_array_t; userprefix vproc_mig_; serverprefix job_mig_; routine create_server( __bs_port : job_t; __server_cmd : cmd_t; __server_uid : uid_t; __on_demand : boolean_t; out __server_port : mach_port_make_send_t); routine reboot2( __bs_port : job_t; __flags : uint64_t); routine check_in2( __bs_port : job_t; __service_name : name_t; out __service_port : mach_port_move_receive_t; __flags : uint64_t); routine register2( __bs_port : job_t; __service_name : name_t; __service_port : mach_port_t; __flags : uint64_t); routine look_up2( __bs_port : job_t; sreplyport __rport : mach_port_make_send_once_t; __service_name : name_t; out __service_port : mach_port_t; UserAuditToken __server_cred : audit_token_t; __target_pid : pid_t; __flags : uint64_t); routine send_signal( __bs_port : job_t; sreplyport __rport : mach_port_make_send_once_t; __label : name_t; __signal : integer_t); routine parent( __bs_port : job_t; sreplyport __rport : mach_port_make_send_once_t; out __parent_port : mach_port_make_send_t); routine post_fork_ping( __bs_port : job_t; __task_port : task_t; out __audit_session : mach_port_t); routine info( __bs_port : job_t; out __service_names : name_array_t, dealloc; out __service_jobs : name_array_t, dealloc; out __service_active : bootstrap_status_array_t, dealloc; __flags : uint64_t); routine subset( __bs_port : job_t; __requestor_port : mach_port_t; out __subset_port : mach_port_make_send_t); routine setup_shmem( __bs_port : job_t; out __shmem_port : mach_port_move_send_t); routine take_subset( __bs_port : job_t; out __bs_reqport : mach_port_move_send_t; out __bs_rcvright : mach_port_move_receive_t; out __outdata : pointer_t, dealloc; out __service_ports : mach_port_move_send_array_t, dealloc); routine getsocket( __bs_port : job_t; out __sockpath : name_t); routine spawn( __bs_port : job_t; __indata : pointer_t; __audit_session : mach_port_t; out __pid : pid_t; out __obsvr_port : mach_port_make_send_t); routine wait( __bs_port : job_t; sreplyport __rport : mach_port_make_send_once_t; out __waitval : integer_t); routine uncork_fork( __bs_port : job_t); routine swap_integer( __bs_port : job_t; __inkey : vproc_gsk_t; __outkey : vproc_gsk_t; __inval : int64_t; out __outval : int64_t); routine log( __bs_port : job_t; __pri : integer_t; __err : integer_t; __msg : logmsg_t); routine lookup_per_user_context( __bs_port : job_t; __wu : uid_t; out __u_cont : mach_port_t); routine move_subset( __bs_port : job_t; __target_port : mach_port_t; __sessiontype : name_t; __audit_session : mach_port_t; __sessionflags : uint64_t); routine swap_complex( __bs_port : job_t; __inkey : vproc_gsk_t; __outkey : vproc_gsk_t; __inval : pointer_t; out __outval : pointer_t, dealloc); routine log_drain( __bs_port : job_t; sreplyport __rport : mach_port_make_send_once_t; out __outval : pointer_t, dealloc); routine log_forward( __bs_port : job_t; __inval : pointer_t); routine kickstart( __bs_port : job_t; __label : name_t; out __pid : pid_t; out __name_port : mach_port_t; out __obsrvr_port : mach_port_make_send_t; __flags : natural_t); routine embedded_wait( __bs_port : job_t; __label : name_t; out __waitval : integer_t); routine lookup_children( __bs_port : job_t; out __child_ports : mach_port_move_send_array_t, dealloc; out __child_names : name_array_t, dealloc; out __child_properties : bootstrap_property_array_t, dealloc); routine switch_to_session( __bs_port : job_t; __req_port : mach_port_t; __session_name : name_t; __audit_session : mach_port_t; out __new_bs_port : mach_port_make_send_t); routine transaction_count_for_pid( __bs_port : job_t; __pid : pid_t; out __cnt : integer_t; out __condemend : boolean_t); routine pid_is_managed( __bs_port : job_t; __pid : pid_t; out __managed : boolean_t); routine port_for_label( __bs_port : job_t; __label : name_t; out __mp : mach_port_make_send_t); routine init_session( __bs_port : job_t; __session_name : name_t; __audit_session : mach_port_t); routine set_security_session( __bs_port : job_t; __uuid : uuid_t; __session : mach_port_t); routine wait2( __bs_port : job_t; __target_port : job_t; sreplyport __rport : mach_port_make_send_once_t; out __waitval : integer_t; __legacy : boolean_t);