#ifndef _LAUNCH_PRIV_H_
#define _LAUNCH_PRIV_H_
+#include <mach/mach.h>
+#include <sys/types.h>
#include <launch.h>
+#include <unistd.h>
+#include <paths.h>
+#include <uuid/uuid.h>
+
+#pragma GCC visibility push(default)
__BEGIN_DECLS
-#define LAUNCH_KEY_GETUSERENVIRONMENT "GetUserEnvironment"
-#define LAUNCH_KEY_SETUSERENVIRONMENT "SetUserEnvironment"
-#define LAUNCH_KEY_UNSETUSERENVIRONMENT "UnsetUserEnvironment"
-#define LAUNCH_KEY_SETSTDOUT "SetStandardOut"
-#define LAUNCH_KEY_SETSTDERR "SetStandardError"
-#define LAUNCH_KEY_SHUTDOWN "Shutdown"
-#define LAUNCH_KEY_SINGLEUSER "SingleUser"
-#define LAUNCH_KEY_GETRESOURCELIMITS "GetResourceLimits"
-#define LAUNCH_KEY_SETRESOURCELIMITS "SetResourceLimits"
-#define LAUNCH_KEY_RELOADTTYS "ReloadTTYS"
-#define LAUNCH_KEY_SETLOGMASK "SetLogMask"
-#define LAUNCH_KEY_GETLOGMASK "GetLogMask"
-#define LAUNCH_KEY_SETUMASK "SetUmask"
-#define LAUNCH_KEY_GETUMASK "GetUmask"
-#define LAUNCH_KEY_GETRUSAGESELF "GetResourceUsageSelf"
-#define LAUNCH_KEY_GETRUSAGECHILDREN "GetResourceUsageChildren"
-
-#define LAUNCHD_SOCKET_ENV "LAUNCHD_SOCKET"
-#define LAUNCHD_SOCK_PREFIX "/var/tmp/launchd"
-#define LAUNCHD_TRUSTED_FD_ENV "__LAUNCHD_FD"
-#define LAUNCHD_ASYNC_MSG_KEY "_AsyncMessage"
-#define LAUNCH_KEY_BATCHCONTROL "BatchControl"
-#define LAUNCH_KEY_BATCHQUERY "BatchQuery"
-
-#define LAUNCH_JOBKEY_MACH_KUNCSERVER "kUNCServer"
-#define LAUNCH_JOBKEY_MACH_EXCEPTIONSERVER "ExceptionServer"
-#define LAUNCH_JOBKEY_MACH_TASKSPECIALPORT "TaskSpecialPort"
-#define LAUNCH_JOBKEY_MACH_HOSTSPECIALPORT "HostSpecialPort"
+#define LAUNCH_KEY_SETUSERENVIRONMENT "SetUserEnvironment"
+#define LAUNCH_KEY_UNSETUSERENVIRONMENT "UnsetUserEnvironment"
+#define LAUNCH_KEY_SHUTDOWN "Shutdown"
+#define LAUNCH_KEY_SINGLEUSER "SingleUser"
+#define LAUNCH_KEY_GETRESOURCELIMITS "GetResourceLimits"
+#define LAUNCH_KEY_SETRESOURCELIMITS "SetResourceLimits"
+#define LAUNCH_KEY_GETRUSAGESELF "GetResourceUsageSelf"
+#define LAUNCH_KEY_GETRUSAGECHILDREN "GetResourceUsageChildren"
+#define LAUNCH_KEY_SETPRIORITYLIST "SetPriorityList"
+
+#define LAUNCHD_SOCKET_ENV "LAUNCHD_SOCKET"
+#define LAUNCHD_SOCK_PREFIX _PATH_VARTMP "launchd"
+#define LAUNCHD_TRUSTED_FD_ENV "__LAUNCHD_FD"
+#define LAUNCHD_ASYNC_MSG_KEY "_AsyncMessage"
+#define LAUNCH_KEY_BATCHCONTROL "BatchControl"
+#define LAUNCH_KEY_BATCHQUERY "BatchQuery"
+#define LAUNCHD_DO_APPLE_INTERNAL_LOGGING "__DoAppleInternalLogging__"
+
+#define LAUNCH_JOBKEY_TRANSACTIONCOUNT "TransactionCount"
+#define LAUNCH_JOBKEY_QUARANTINEDATA "QuarantineData"
+#define LAUNCH_JOBKEY_SANDBOXPROFILE "SandboxProfile"
+#define LAUNCH_JOBKEY_SANDBOXFLAGS "SandboxFlags"
+#define LAUNCH_JOBKEY_SANDBOX_NAMED "Named"
+#define LAUNCH_JOBKEY_JETSAMPROPERTIES "JetsamProperties"
+#define LAUNCH_JOBKEY_JETSAMPRIORITY "JetsamPriority"
+#define LAUNCH_JOBKEY_JETSAMMEMORYLIMIT "JetsamMemoryLimit"
+#define LAUNCH_JOBKEY_SECURITYSESSIONUUID "SecuritySessionUUID"
+
+#define LAUNCH_KEY_JETSAMLABEL "JetsamLabel"
+#define LAUNCH_KEY_JETSAMFRONTMOST "JetsamFrontmost"
+#define LAUNCH_KEY_JETSAMPRIORITY LAUNCH_JOBKEY_JETSAMPRIORITY
+#define LAUNCH_KEY_JETSAMMEMORYLIMIT LAUNCH_JOBKEY_JETSAMMEMORYLIMIT
+
+#define LAUNCH_JOBKEY_EMBEDDEDPRIVILEGEDISPENSATION "EmbeddedPrivilegeDispensation"
+#define LAUNCH_JOBKEY_EMBEDDEDMAINTHREADPRIORITY "EmbeddedMainThreadPriority"
+
+#define LAUNCH_JOBKEY_ENTERKERNELDEBUGGERBEFOREKILL "EnterKernelDebuggerBeforeKill"
+#define LAUNCH_JOBKEY_PERJOBMACHSERVICES "PerJobMachServices"
+#define LAUNCH_JOBKEY_SERVICEIPC "ServiceIPC"
+#define LAUNCH_JOBKEY_BINARYORDERPREFERENCE "BinaryOrderPreference"
+#define LAUNCH_JOBKEY_MACHEXCEPTIONHANDLER "MachExceptionHandler"
+
+#define LAUNCH_JOBKEY_MACH_KUNCSERVER "kUNCServer"
+#define LAUNCH_JOBKEY_MACH_EXCEPTIONSERVER "ExceptionServer"
+#define LAUNCH_JOBKEY_MACH_TASKSPECIALPORT "TaskSpecialPort"
+#define LAUNCH_JOBKEY_MACH_HOSTSPECIALPORT "HostSpecialPort"
+#define LAUNCH_JOBKEY_MACH_ENTERKERNELDEBUGGERONCLOSE "EnterKernelDebuggerOnClose"
typedef struct _launch *launch_t;
-launch_t launchd_fdopen(int);
+launch_t launchd_fdopen(int, int);
int launchd_getfd(launch_t);
-void launchd_close(launch_t);
+void launchd_close(launch_t, __typeof__(close) closefunc);
launch_data_t launch_data_new_errno(int);
bool launch_data_set_errno(launch_data_t, int);
*
* After this call, the task's bootstrap port is set to the per session launchd.
*
- * This returns the PID on of the per session launchd, and -1 on failure.
- *
- * If launchd terminates, loginwindow should exit.
- * If loginwindow terminates, launchd will exit.
+ * This returns 1 on success (it used to return otherwise), and -1 on failure.
+ */
+#define LOAD_ONLY_SAFEMODE_LAUNCHAGENTS 1 << 0
+#define LAUNCH_GLOBAL_ON_DEMAND 1 << 1
+pid_t create_and_switch_to_per_session_launchd(const char * /* loginname */, int flags, ...);
+
+/* Also for LoginWindow.
+ *
+ * This is will load jobs at the LoginWindow prompt.
*/
-#define LOAD_ONLY_SAFEMODE_LAUNCHAGENTS 1
-pid_t create_and_switch_to_per_session_launchd(const char *login, int flags, ...);
+void load_launchd_jobs_at_loginwindow_prompt(int flags, ...);
+
/* batch jobs will be implicity re-enabled when the last application who
* disabled them exits.
*/
#define SPAWN_VIA_LAUNCHD_STOPPED 0x0001
-#define SPAWN_VIA_LAUNCHD_FORCE_PPC 0x0002
struct spawn_via_launchd_attr {
uint64_t spawn_flags;
const char *const * spawn_env;
const mode_t * spawn_umask;
mach_port_t * spawn_observer_port;
+ const cpu_type_t * spawn_binpref;
+ size_t spawn_binpref_cnt;
+ void * spawn_quarantine;
+ const char * spawn_seatbelt_profile;
+ const uint64_t * spawn_seatbelt_flags;
};
-#define spawn_via_launchd(a, b, c) _spawn_via_launchd(a, b, c, 0)
+#define spawn_via_launchd(a, b, c) _spawn_via_launchd(a, b, c, 2)
pid_t _spawn_via_launchd(
const char *label,
const char *const *argv,
__END_DECLS
+#pragma GCC visibility pop
+
+
#endif