/* * 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( j : job_t; servercmd : cmd_t; serveruid : uid_t; ondemand : boolean_t; out serverport : mach_port_make_send_t ); routine reboot2( j : job_t; flags : uint64_t ); routine check_in2( j : job_t; servicename : name_t; out serviceport : mach_port_move_receive_t; out instanceid : uuid_t; flags : uint64_t ); routine register2( j : job_t; servicename : name_t; serviceport : mach_port_t; flags : uint64_t ); routine look_up2( j : job_t; sreplyport rp : mach_port_make_send_once_t; servicename : name_t; out serviceport : mach_port_t; UserAuditToken servercreds : audit_token_t; targetpid : pid_t; instanceid : uuid_t; flags : uint64_t ); routine send_signal( j : job_t; sreplyport rp : mach_port_make_send_once_t; label : name_t; sig : integer_t ); routine parent( j : job_t; sreplyport rp : mach_port_make_send_once_t; out parentport : mach_port_make_send_t ); routine post_fork_ping( j : job_t; taskport : task_t; out asport : mach_port_t ); routine info( j : job_t; out names : name_array_t, dealloc; out jobs : name_array_t, dealloc; out actives : bootstrap_status_array_t, dealloc; flags : uint64_t ); routine subset( j : job_t; reqport : mach_port_t; out subsetport : mach_port_make_send_t ); routine setup_shmem( j : job_t; out shmemport : mach_port_move_send_t ); routine take_subset( j : job_t; out reqport : mach_port_move_send_t; out recvport : mach_port_move_receive_t; out jobs : pointer_t, dealloc; out ports : mach_port_move_send_array_t, dealloc ); routine getsocket( j : job_t; out sockpath : name_t ); skip; /* Formerly spawn. */ skip; /* Formerly wait. */ skip; /* Formerly uncork_fork. */ routine swap_integer( j : job_t; inkey : vproc_gsk_t; outkey : vproc_gsk_t; inval : int64_t; out outval : int64_t ); routine log( j : job_t; pri : integer_t; err : integer_t; message : logmsg_t ); routine lookup_per_user_context( j : job_t; uid : uid_t; out userbport : mach_port_t ); routine move_subset( j : job_t; targetport : mach_port_t; session : name_t; asport : mach_port_t; flags : uint64_t ); routine swap_complex( j : job_t; inkey : vproc_gsk_t; outkey : vproc_gsk_t; inval : pointer_t; out outval : pointer_t, dealloc ); routine log_drain( j : job_t; sreplyport rp : mach_port_make_send_once_t; out outval : pointer_t, dealloc ); routine log_forward( j : job_t; inval : pointer_t ); routine kickstart( j : job_t; label : name_t; out pid : pid_t; flags : natural_t ); skip; routine lookup_children( j : job_t; out childports : mach_port_move_send_array_t, dealloc; out childnames : name_array_t, dealloc; out childprops : bootstrap_property_array_t, dealloc ); routine switch_to_session( j : job_t; reqport : mach_port_t; session : name_t; asport : mach_port_t; out newbsport : mach_port_make_send_t ); routine transaction_count_for_pid( j : job_t; pid : pid_t; out count : integer_t; out condemned : boolean_t ); routine pid_is_managed( j : job_t; pid : pid_t; out managed : boolean_t ); routine port_for_label( j : job_t; label : name_t; out jport : mach_port_make_send_t ); routine init_session( j : job_t; session : name_t; asport : mach_port_t ); routine set_security_session( j : job_t; uuid : uuid_t; asport : mach_port_t ); skip; /* Formerly wait2. */ routine event_source_check_in( j : job_t; stream : name_t; pingport : mach_port_make_send_once_t; out events : pointer_t, dealloc; out tokens : event_token_array_t ); routine event_set_state( j : job_t; stream : name_t; token : uint64_t; state : boolean_t ); routine spawn2( j : job_t; sreplyport rp : mach_port_make_send_once_t; job : pointer_t; asport : mach_port_t; out outpid : pid_t; out obsrvport : mach_port_move_receive_t ); routine get_root_bootstrap( j : job_t; out rootbs : mach_port_move_send_t );