Changeset 23319
- Timestamp:
- 07/27/07 10:59:56 (16 months ago)
- Location:
- trunk/launchd/src
- Files:
-
- 2 modified
-
launchd_core_logic.c (modified) (1 diff)
-
libvproc.c (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/launchd/src/launchd_core_logic.c
r23317 r23319 5660 5660 goto out; 5661 5661 } 5662 } else if (ldc.uid == 0 && getpid() == 1 && strcmp(session_type, VPROCMGR_SESSION_STANDARDIO) == 0) { 5663 ensure_root_bkgd_setup(); 5664 5665 SLIST_REMOVE(&j->mgr->parentmgr->submgrs, j->mgr, jobmgr_s, sle); 5666 j->mgr->parentmgr = background_jobmgr; 5667 SLIST_INSERT_HEAD(&j->mgr->parentmgr->submgrs, j->mgr, sle); 5662 5668 } 5663 5669 -
trunk/launchd/src/libvproc.c
r23307 r23319 100 100 { 101 101 launch_data_t output_obj; 102 kern_return_t kr = 1; 103 mach_port_t puc = 0, rootbs = get_root_bootstrap_port(); 102 kern_return_t kr = 0; 104 103 bool is_bkgd = (strcmp(session_type, VPROCMGR_SESSION_BACKGROUND) == 0); 105 104 int64_t ldpid, lduid; … … 111 110 if (vproc_swap_integer(NULL, VPROC_GSK_MGR_UID, 0, &lduid) != 0) { 112 111 return (vproc_err_t)_vprocmgr_move_subset_to_user; 113 }114 115 if (target_user == 0) {116 if (ldpid == 1 && rootbs != bootstrap_port) {117 return _vprocmgr_init(session_type);118 }119 120 task_set_bootstrap_port(mach_task_self(), rootbs);121 mach_port_deallocate(mach_task_self(), bootstrap_port);122 bootstrap_port = rootbs;123 124 return NULL;125 112 } 126 113 … … 136 123 } 137 124 138 if (vproc_mig_lookup_per_user_context(rootbs, target_user, &puc) != 0) { 139 return (vproc_err_t)_vprocmgr_move_subset_to_user; 140 } 141 142 if (is_bkgd) { 143 kr = 0; 125 if (is_bkgd || target_user) { 126 mach_port_t puc = 0, rootbs = get_root_bootstrap_port(); 127 128 if (vproc_mig_lookup_per_user_context(rootbs, target_user, &puc) != 0) { 129 return (vproc_err_t)_vprocmgr_move_subset_to_user; 130 } 131 132 if (is_bkgd) { 133 task_set_bootstrap_port(mach_task_self(), puc); 134 mach_port_deallocate(mach_task_self(), bootstrap_port); 135 bootstrap_port = puc; 136 } else { 137 kr = vproc_mig_move_subset(puc, bootstrap_port, (char *)session_type); 138 mach_port_deallocate(mach_task_self(), puc); 139 } 144 140 } else { 145 kr = vproc_mig_move_subset(puc, bootstrap_port, (char *)session_type); 146 } 147 148 if (is_bkgd) { 149 task_set_bootstrap_port(mach_task_self(), puc); 150 mach_port_deallocate(mach_task_self(), bootstrap_port); 151 bootstrap_port = puc; 152 } else { 153 mach_port_deallocate(mach_task_self(), puc); 141 kr = _vprocmgr_init(session_type) ? 1 : 0; 154 142 } 155 143

