]> git.saurik.com Git - apple/launchd.git/blob - launchd/src/vproc_priv.h
889362870d46bf34258f63ae711b351b7f4feca4
[apple/launchd.git] / launchd / src / vproc_priv.h
1 #ifndef _VPROC_PRIVATE_H_
2 #define _VPROC_PRIVATE_H_
3 /*
4 * Copyright (c) 2006 Apple Computer, Inc. All rights reserved.
5 *
6 * @APPLE_APACHE_LICENSE_HEADER_START@
7 *
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
11 *
12 * http://www.apache.org/licenses/LICENSE-2.0
13 *
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.
19 *
20 * @APPLE_APACHE_LICENSE_HEADER_END@
21 */
22
23 #include <Availability.h>
24 #include <sys/types.h>
25 #include <sys/cdefs.h>
26 #include <sys/syslog.h>
27 #include <sys/time.h>
28 #include <stdbool.h>
29 #include <launch.h>
30 #include <vproc.h>
31 #include <uuid/uuid.h>
32 #include <servers/bootstrap.h>
33
34 #ifndef VPROC_HAS_TRANSACTIONS
35 #define VPROC_HAS_TRANSACTIONS
36 #endif
37
38 __BEGIN_DECLS
39
40 #pragma GCC visibility push(default)
41
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
46
47 typedef void (*_vproc_transaction_callout)(void);
48
49 typedef enum {
50 VPROC_GSK_LAST_EXIT_STATUS = 1,
51 VPROC_GSK_GLOBAL_ON_DEMAND,
52 VPROC_GSK_MGR_UID,
53 VPROC_GSK_MGR_PID,
54 VPROC_GSK_IS_MANAGED,
55 VPROC_GSK_MGR_NAME,
56 VPROC_GSK_BASIC_KEEPALIVE,
57 VPROC_GSK_START_INTERVAL,
58 VPROC_GSK_IDLE_TIMEOUT,
59 VPROC_GSK_EXIT_TIMEOUT,
60 VPROC_GSK_ENVIRONMENT,
61 VPROC_GSK_ALLJOBS,
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,
76 } vproc_gsk_t;
77
78 typedef kern_return_t (*vproc_helper_recv_ping_t)(mach_port_t, audit_token_t);
79
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);
82
83 /* Give to dispatch_mig_server(). */
84 extern size_t vprocmgr_helper_maxmsgsz;
85
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
89
90 vproc_t vprocmgr_lookup_vproc(const char *label);
91 vproc_t vproc_retain(vproc_t vp);
92 void vproc_release(vproc_t vp);
93
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);
97
98 vproc_err_t _vproc_get_last_exit_status(int *wstatus);
99 vproc_err_t _vproc_set_global_on_demand(bool val);
100
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);
102
103 vproc_err_t _vprocmgr_log_drain(vproc_t vp, pthread_mutex_t *optional_mutex_around_callback, _vprocmgr_log_drain_callback_t func);
104
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);
107
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)));
111
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"
117
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"
122
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);
126
127 __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA)
128 void
129 _vproc_standby_begin(void);
130
131 __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA)
132 void
133 _vproc_standby_end(void);
134
135 __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA)
136 size_t
137 _vproc_standby_count(void);
138
139 __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA)
140 size_t
141 _vproc_standby_timeout(void);
142
143 __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA)
144 kern_return_t
145 _vproc_transaction_count_for_pid(pid_t p, int32_t *count, bool *condemned);
146
147 __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA)
148 bool
149 _vproc_pid_is_managed(pid_t p);
150
151 __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA)
152 void
153 _vproc_transaction_try_exit(int status);
154
155 __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_5_0)
156 void
157 _vproc_transaction_begin(void);
158
159 __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_5_0)
160 void
161 _vproc_transaction_end(void);
162
163 __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA)
164 size_t
165 _vproc_transaction_count(void);
166
167 int32_t *
168 _vproc_transaction_ptr(void);
169
170 void
171 _vproc_transaction_set_callouts(_vproc_transaction_callout gone2zero, _vproc_transaction_callout gonenonzero);
172
173 bool
174 vprocmgr_helper_check_in(const char *sysname, mach_port_t rp, launch_data_t *events, uint64_t *tokens);
175
176 bool
177 vprocmgr_helper_event_set_state(const char *sysname, uint64_t token, bool state);
178
179 void
180 vprocmgr_helper_register(vproc_helper_recv_ping_t callout);
181
182 #pragma GCC visibility pop
183
184 __END_DECLS
185
186 #endif