1 #ifndef _VPROC_PRIVATE_H_
2 #define _VPROC_PRIVATE_H_
4 * Copyright (c) 2006 Apple Computer, Inc. All rights reserved.
6 * @APPLE_APACHE_LICENSE_HEADER_START@
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
20 * @APPLE_APACHE_LICENSE_HEADER_END@
23 #include <Availability.h>
24 #include <sys/types.h>
25 #include <sys/cdefs.h>
26 #include <sys/syslog.h>
31 #include <uuid/uuid.h>
32 #include <servers/bootstrap.h>
34 #ifndef VPROC_HAS_TRANSACTIONS
35 #define VPROC_HAS_TRANSACTIONS
40 #pragma GCC visibility push(default)
42 /* DO NOT use this. This is a hack for 'launchctl' */
43 #define VPROC_MAGIC_UNLOAD_SIGNAL 0x4141504C
44 /* DO NOT use this. This is a hack for 'loginwindow' */
45 #define VPROC_MAGIC_TRYKILL_SIGNAL 0x6161706C
47 typedef void (*_vproc_transaction_callout
)(void);
50 VPROC_GSK_LAST_EXIT_STATUS
= 1,
51 VPROC_GSK_GLOBAL_ON_DEMAND
,
56 VPROC_GSK_BASIC_KEEPALIVE
,
57 VPROC_GSK_START_INTERVAL
,
58 VPROC_GSK_IDLE_TIMEOUT
,
59 VPROC_GSK_EXIT_TIMEOUT
,
60 VPROC_GSK_ENVIRONMENT
,
62 VPROC_GSK_GLOBAL_LOG_MASK
,
63 VPROC_GSK_GLOBAL_UMASK
,
64 VPROC_GSK_ABANDON_PROCESS_GROUP
,
65 VPROC_GSK_TRANSACTIONS_ENABLED
,
66 VPROC_GSK_WEIRD_BOOTSTRAP
,
67 VPROC_GSK_WAITFORDEBUGGER
,
68 VPROC_GSK_SECURITYSESSION
,
69 VPROC_GSK_SHUTDOWN_DEBUGGING
,
70 VPROC_GSK_VERBOSE_BOOT
,
71 VPROC_GSK_PERUSER_SUSPEND
,
72 VPROC_GSK_PERUSER_RESUME
,
73 VPROC_GSK_JOB_OVERRIDES_DB
,
74 VPROC_GSK_JOB_CACHE_DB
,
75 VPROC_GSK_EMBEDDEDROOTEQUIVALENT
,
78 typedef kern_return_t (*vproc_helper_recv_ping_t
)(mach_port_t
, audit_token_t
);
80 /* Give to dispatch_mig_server(). */
81 boolean_t
vprocmgr_helper_server_routine_for_dispatch(mach_msg_header_t
*message
, mach_msg_header_t
*reply
);
83 /* Give to dispatch_mig_server(). */
84 extern size_t vprocmgr_helper_maxmsgsz
;
86 typedef unsigned int vproc_flags_t
;
87 /* For _vproc_kickstart_by_label() -- instructs launchd to kickstart the job to stall before exec(2). */
88 #define VPROCFLAG_STALL_JOB_EXEC 1 << 1
90 vproc_t
vprocmgr_lookup_vproc(const char *label
);
91 vproc_t
vproc_retain(vproc_t vp
);
92 void vproc_release(vproc_t vp
);
94 vproc_err_t
vproc_swap_integer(vproc_t vp
, vproc_gsk_t key
, int64_t *inval
, int64_t *outval
);
95 vproc_err_t
vproc_swap_complex(vproc_t vp
, vproc_gsk_t key
, launch_data_t inval
, launch_data_t
*outval
);
96 vproc_err_t
vproc_swap_string(vproc_t vp
, vproc_gsk_t key
, const char *instr
, char **outstr
);
98 vproc_err_t
_vproc_get_last_exit_status(int *wstatus
);
99 vproc_err_t
_vproc_set_global_on_demand(bool val
);
101 typedef void (*_vprocmgr_log_drain_callback_t
)(struct timeval
*when
, pid_t from_pid
, pid_t about_pid
, uid_t sender_uid
, gid_t sender_gid
, int priority
, const char *from_name
, const char *about_name
, const char *session_name
, const char *msg
);
103 vproc_err_t
_vprocmgr_log_drain(vproc_t vp
, pthread_mutex_t
*optional_mutex_around_callback
, _vprocmgr_log_drain_callback_t func
);
105 vproc_err_t
_vproc_send_signal_by_label(const char *label
, int sig
);
106 vproc_err_t
_vproc_kickstart_by_label(const char *label
, pid_t
*out_pid
, mach_port_t
*out_port_name
, mach_port_t
*out_obsrvr_port
, vproc_flags_t flags
);
108 void _vproc_log(int pri
, const char *msg
, ...) __attribute__((format(printf
, 2, 3)));
109 void _vproc_log_error(int pri
, const char *msg
, ...) __attribute__((format(printf
, 2, 3)));
110 void _vproc_logv(int pri
, int err
, const char *msg
, va_list ap
) __attribute__((format(printf
, 3, 0)));
112 #define VPROCMGR_SESSION_LOGINWINDOW "LoginWindow"
113 #define VPROCMGR_SESSION_BACKGROUND "Background"
114 #define VPROCMGR_SESSION_AQUA "Aqua"
115 #define VPROCMGR_SESSION_STANDARDIO "StandardIO"
116 #define VPROCMGR_SESSION_SYSTEM "System"
118 #define XPC_DOMAIN_TYPE_SYSTEM "XPCSystem"
119 #define XPC_DOMAIN_TYPE_PERUSER "XPCPerUser"
120 #define XPC_DOMAIN_TYPE_PERSESSION "XPCPerSession"
121 #define XPC_DOMAIN_TYPE_PERAPPLICATION "XPCPerApplication"
123 vproc_err_t
_vprocmgr_move_subset_to_user(uid_t target_user
, const char *session_type
, uint64_t flags
);
124 vproc_err_t
_vprocmgr_switch_to_session(const char *target_session
, vproc_flags_t flags
);
125 vproc_err_t
_vprocmgr_detach_from_console(vproc_flags_t flags
);
127 __OSX_AVAILABLE_STARTING(__MAC_10_6
, __IPHONE_NA
)
129 _vproc_standby_begin(void);
131 __OSX_AVAILABLE_STARTING(__MAC_10_6
, __IPHONE_NA
)
133 _vproc_standby_end(void);
135 __OSX_AVAILABLE_STARTING(__MAC_10_6
, __IPHONE_NA
)
137 _vproc_standby_count(void);
139 __OSX_AVAILABLE_STARTING(__MAC_10_6
, __IPHONE_NA
)
141 _vproc_standby_timeout(void);
143 __OSX_AVAILABLE_STARTING(__MAC_10_6
, __IPHONE_NA
)
145 _vproc_transaction_count_for_pid(pid_t p
, int32_t *count
, bool *condemned
);
147 __OSX_AVAILABLE_STARTING(__MAC_10_6
, __IPHONE_NA
)
149 _vproc_pid_is_managed(pid_t p
);
151 __OSX_AVAILABLE_STARTING(__MAC_10_6
, __IPHONE_NA
)
153 _vproc_transaction_try_exit(int status
);
155 __OSX_AVAILABLE_STARTING(__MAC_10_6
, __IPHONE_5_0
)
157 _vproc_transaction_begin(void);
159 __OSX_AVAILABLE_STARTING(__MAC_10_6
, __IPHONE_5_0
)
161 _vproc_transaction_end(void);
163 __OSX_AVAILABLE_STARTING(__MAC_10_6
, __IPHONE_NA
)
165 _vproc_transaction_count(void);
168 _vproc_transaction_ptr(void);
171 _vproc_transaction_set_callouts(_vproc_transaction_callout gone2zero
, _vproc_transaction_callout gonenonzero
);
174 vprocmgr_helper_check_in(const char *sysname
, mach_port_t rp
, launch_data_t
*events
, uint64_t *tokens
);
177 vprocmgr_helper_event_set_state(const char *sysname
, uint64_t token
, bool state
);
180 vprocmgr_helper_register(vproc_helper_recv_ping_t callout
);
182 #pragma GCC visibility pop