Revision: 23131 http://trac.macosforge.org/projects/launchd/changeset/23131 Author: zarzycki@apple.com Date: 2007-03-04 15:59:52 -0800 (Sun, 04 Mar 2007) Log Message: ----------- <rdar://problem/4421331> Per session launchd deployment for CLI / PAM sessions Modified Paths: -------------- trunk/launchd/src/liblaunch.c trunk/launchd/src/libvproc.c trunk/launchd/src/libvproc_internal.h trunk/launchd/src/libvproc_private.h Modified: trunk/launchd/src/liblaunch.c =================================================================== --- trunk/launchd/src/liblaunch.c 2007-03-04 23:38:21 UTC (rev 23130) +++ trunk/launchd/src/liblaunch.c 2007-03-04 23:59:52 UTC (rev 23131) @@ -40,6 +40,7 @@ #include "libbootstrap_public.h" #include "libvproc_public.h" +#include "libvproc_private.h" #include "libvproc_internal.h" /* __OSBogusByteSwap__() must not really exist in the symbol namespace @@ -1163,7 +1164,7 @@ void load_launchd_jobs_at_loginwindow_prompt(int flags __attribute__((unused)), ...) { - _vproc_move_subset_to_user("LoginWindow"); + _vprocmgr_move_subset_to_user(geteuid() ? geteuid() : getuid(), "LoginWindow"); } pid_t @@ -1171,8 +1172,9 @@ { mach_port_t bezel_ui_server; struct stat sb; + uid_t target_user = geteuid() ? geteuid() : getuid(); - if (_vproc_move_subset_to_user("Aqua")) { + if (_vprocmgr_move_subset_to_user(target_user, "Aqua")) { return -1; } @@ -1181,7 +1183,7 @@ #define BEZEL_UI_SERVICE "BezelUI" if (!(stat(BEZEL_UI_PLIST, &sb) == 0 && S_ISREG(sb.st_mode))) { - if (bootstrap_create_server(bootstrap_port, BEZEL_UI_PATH, 0, true, &bezel_ui_server) == BOOTSTRAP_SUCCESS) { + if (bootstrap_create_server(bootstrap_port, BEZEL_UI_PATH, target_user, true, &bezel_ui_server) == BOOTSTRAP_SUCCESS) { mach_port_t srv; if (bootstrap_create_service(bezel_ui_server, BEZEL_UI_SERVICE, &srv) == BOOTSTRAP_SUCCESS) { Modified: trunk/launchd/src/libvproc.c =================================================================== --- trunk/launchd/src/libvproc.c 2007-03-04 23:38:21 UTC (rev 23130) +++ trunk/launchd/src/libvproc.c 2007-03-04 23:59:52 UTC (rev 23131) @@ -47,12 +47,12 @@ } vproc_err_t -_vproc_move_subset_to_user(char *session_type) +_vprocmgr_move_subset_to_user(uid_t target_user, char *session_type) { kern_return_t kr = 1; mach_port_t puc = 0, which_port = bootstrap_port; - if ((getuid() || geteuid()) && vproc_mig_lookup_per_user_context(bootstrap_port, 0, &puc) == 0) { + if (target_user && vproc_mig_lookup_per_user_context(bootstrap_port, target_user, &puc) == 0) { which_port = puc; } @@ -62,7 +62,7 @@ mach_port_deallocate(mach_task_self(), puc); } - return kr == 0 ? NULL : (vproc_err_t)_vproc_move_subset_to_user; + return kr == 0 ? NULL : (vproc_err_t)_vprocmgr_move_subset_to_user; } Modified: trunk/launchd/src/libvproc_internal.h =================================================================== --- trunk/launchd/src/libvproc_internal.h 2007-03-04 23:38:21 UTC (rev 23130) +++ trunk/launchd/src/libvproc_internal.h 2007-03-04 23:59:52 UTC (rev 23131) @@ -57,8 +57,6 @@ kern_return_t _vprocmgr_getsocket(name_t); -vproc_err_t _vproc_move_subset_to_user(char *session_type); - void _vproc_logv(int pri, int err, const char *msg, va_list ap); kern_return_t Modified: trunk/launchd/src/libvproc_private.h =================================================================== --- trunk/launchd/src/libvproc_private.h 2007-03-04 23:38:21 UTC (rev 23130) +++ trunk/launchd/src/libvproc_private.h 2007-03-04 23:59:52 UTC (rev 23131) @@ -20,6 +20,7 @@ * @APPLE_APACHE_LICENSE_HEADER_END@ */ +#include <sys/types.h> #include <sys/cdefs.h> #include <sys/syslog.h> #include <stdbool.h> @@ -34,6 +35,8 @@ void _vproc_log(int pri, const char *msg, ...) __attribute__((format(printf, 2, 3))); void _vproc_log_error(int pri, const char *msg, ...) __attribute__((format(printf, 2, 3))); +vproc_err_t _vprocmgr_move_subset_to_user(uid_t target_user, char *session_type); + #pragma GCC visibility pop __END_DECLS