]> git.saurik.com Git - apple/launchd.git/blob - launchd/src/liblaunch_private.h
176dbdb4cd24e3ce010372d88a457c891c6f6c2f
[apple/launchd.git] / launchd / src / liblaunch_private.h
1 /*
2 * Copyright (c) 2005 Apple Computer, Inc. All rights reserved.
3 *
4 * @APPLE_APACHE_LICENSE_HEADER_START@
5 *
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
17 *
18 * @APPLE_APACHE_LICENSE_HEADER_END@
19 */
20 #ifndef _LAUNCH_PRIV_H_
21 #define _LAUNCH_PRIV_H_
22
23 #include <mach/mach.h>
24 #include <sys/types.h>
25 #include <launch.h>
26 #include <unistd.h>
27 #include <quarantine.h>
28
29 #pragma GCC visibility push(default)
30
31 __BEGIN_DECLS
32
33 #define LAUNCH_KEY_SETUSERENVIRONMENT "SetUserEnvironment"
34 #define LAUNCH_KEY_UNSETUSERENVIRONMENT "UnsetUserEnvironment"
35 #define LAUNCH_KEY_SHUTDOWN "Shutdown"
36 #define LAUNCH_KEY_SINGLEUSER "SingleUser"
37 #define LAUNCH_KEY_GETRESOURCELIMITS "GetResourceLimits"
38 #define LAUNCH_KEY_SETRESOURCELIMITS "SetResourceLimits"
39 #define LAUNCH_KEY_GETRUSAGESELF "GetResourceUsageSelf"
40 #define LAUNCH_KEY_GETRUSAGECHILDREN "GetResourceUsageChildren"
41
42 #define LAUNCHD_SOCKET_ENV "LAUNCHD_SOCKET"
43 #define LAUNCHD_SOCK_PREFIX "/var/tmp/launchd"
44 #define LAUNCHD_TRUSTED_FD_ENV "__LAUNCHD_FD"
45 #define LAUNCHD_ASYNC_MSG_KEY "_AsyncMessage"
46 #define LAUNCH_KEY_BATCHCONTROL "BatchControl"
47 #define LAUNCH_KEY_BATCHQUERY "BatchQuery"
48
49 #define LAUNCH_JOBKEY_QUARANTINEDATA "QuarantineData"
50 #define LAUNCH_JOBKEY_SANDBOXPROFILE "SandboxProfile"
51 #define LAUNCH_JOBKEY_SANDBOXFLAGS "SandboxFlags"
52 #define LAUNCH_JOBKEY_SANDBOX_NAMED "Named"
53
54 #define LAUNCH_JOBKEY_ENTERKERNELDEBUGGERBEFOREKILL "EnterKernelDebuggerBeforeKill"
55 #define LAUNCH_JOBKEY_PERJOBMACHSERVICES "PerJobMachServices"
56 #define LAUNCH_JOBKEY_SERVICEIPC "ServiceIPC"
57 #define LAUNCH_JOBKEY_BINARYORDERPREFERENCE "BinaryOrderPreference"
58 #define LAUNCH_JOBKEY_MACHEXCEPTIONHANDLER "MachExceptionHandler"
59
60 #define LAUNCH_JOBKEY_MACH_KUNCSERVER "kUNCServer"
61 #define LAUNCH_JOBKEY_MACH_EXCEPTIONSERVER "ExceptionServer"
62 #define LAUNCH_JOBKEY_MACH_TASKSPECIALPORT "TaskSpecialPort"
63 #define LAUNCH_JOBKEY_MACH_HOSTSPECIALPORT "HostSpecialPort"
64 #define LAUNCH_JOBKEY_MACH_ENTERKERNELDEBUGGERONCLOSE "EnterKernelDebuggerOnClose"
65
66 typedef struct _launch *launch_t;
67
68 launch_t launchd_fdopen(int);
69 int launchd_getfd(launch_t);
70 void launchd_close(launch_t, typeof(close) closefunc);
71
72 launch_data_t launch_data_new_errno(int);
73 bool launch_data_set_errno(launch_data_t, int);
74
75 int launchd_msg_send(launch_t, launch_data_t);
76 int launchd_msg_recv(launch_t, void (*)(launch_data_t, void *), void *);
77
78 /* For LoginWindow.
79 *
80 * After this call, the task's bootstrap port is set to the per session launchd.
81 *
82 * This returns 1 on success (it used to return otherwise), and -1 on failure.
83 */
84 #define LOAD_ONLY_SAFEMODE_LAUNCHAGENTS 1
85 pid_t create_and_switch_to_per_session_launchd(const char * /* loginname */, int flags, ...);
86
87 /* Also for LoginWindow.
88 *
89 * This is will load jobs at the LoginWindow prompt.
90 */
91 void load_launchd_jobs_at_loginwindow_prompt(int flags, ...);
92
93
94 /* batch jobs will be implicity re-enabled when the last application who
95 * disabled them exits.
96 *
97 * This API is really a hack to work around the lack of real-time APIs
98 * at the VFS layer.
99 */
100 void launchd_batch_enable(bool);
101 bool launchd_batch_query(void);
102
103 /* For CoreProcesses
104 */
105
106 #define SPAWN_VIA_LAUNCHD_STOPPED 0x0001
107
108 struct spawn_via_launchd_attr {
109 uint64_t spawn_flags;
110 const char * spawn_path;
111 const char * spawn_chdir;
112 const char *const * spawn_env;
113 const mode_t * spawn_umask;
114 mach_port_t * spawn_observer_port;
115 const cpu_type_t * spawn_binpref;
116 size_t spawn_binpref_cnt;
117 qtn_proc_t spawn_quarantine;
118 const char * spawn_seatbelt_profile;
119 const uint64_t * spawn_seatbelt_flags;
120 };
121
122 #define spawn_via_launchd(a, b, c) _spawn_via_launchd(a, b, c, 2)
123 pid_t _spawn_via_launchd(
124 const char *label,
125 const char *const *argv,
126 const struct spawn_via_launchd_attr *spawn_attrs,
127 int struct_version);
128
129 kern_return_t mpm_wait(mach_port_t ajob, int *wstatus);
130
131 kern_return_t mpm_uncork_fork(mach_port_t ajob);
132
133
134 __END_DECLS
135
136 #pragma GCC visibility pop
137
138
139 #endif