Revision: 23005 http://trac.macosforge.org/projects/launchd/changeset/23005 Author: zarzycki@apple.com Date: 2007-01-04 17:14:23 -0800 (Thu, 04 Jan 2007) Log Message: ----------- <rdar://problem/4857011> Unable to drag & drop, copy & paste when logged in as root. Modified Paths: -------------- trunk/launchd/src/launchd_core_logic.c trunk/launchd/src/libvproc.c Modified: trunk/launchd/src/launchd_core_logic.c =================================================================== --- trunk/launchd/src/launchd_core_logic.c 2007-01-05 00:11:52 UTC (rev 23004) +++ trunk/launchd/src/launchd_core_logic.c 2007-01-05 01:14:23 UTC (rev 23005) @@ -4195,6 +4195,13 @@ kern_return_t kr; jobmgr_t jmr; + if (getuid() == 0) { + j = job_mig_intran2(root_jobmgr, target_subset); + job_assumes(j, launchd_mport_deallocate(target_subset) == KERN_SUCCESS); + strcpy(j->mgr->name, "Aqua"); + return 0; + } + kr = _vproc_grab_subset(target_subset, &reqport, &rcvright, &l2l_names, &l2l_name_cnt, &l2l_ports, &l2l_port_cnt); Modified: trunk/launchd/src/libvproc.c =================================================================== --- trunk/launchd/src/libvproc.c 2007-01-05 00:11:52 UTC (rev 23004) +++ trunk/launchd/src/libvproc.c 2007-01-05 01:14:23 UTC (rev 23005) @@ -29,6 +29,7 @@ #include <stdlib.h> #include <stdio.h> #include <errno.h> +#include <unistd.h> #include "liblaunch_public.h" #include "liblaunch_private.h" @@ -47,10 +48,15 @@ _vproc_move_subset_to_user(void) { kern_return_t kr = 1; - mach_port_t puc; + mach_port_t puc = 0, which_port = bootstrap_port; - if (vproc_mig_lookup_per_user_context(bootstrap_port, 0, &puc) == 0) { - kr = vproc_mig_move_subset_to_user(puc, bootstrap_port); + if ((getuid() || geteuid()) && vproc_mig_lookup_per_user_context(bootstrap_port, 0, &puc) == 0) { + which_port = puc; + } + + kr = vproc_mig_move_subset_to_user(which_port, bootstrap_port); + + if (puc) { mach_port_deallocate(mach_task_self(), puc); }
participants (1)
-
source_changes@macosforge.org