Revision: 23319 http://trac.macosforge.org/projects/launchd/changeset/23319 Author: zarzycki@apple.com Date: 2007-07-27 10:59:56 -0700 (Fri, 27 Jul 2007) Log Message: ----------- <rdar://problem/5345685> kinit fails with Internal credentials cache error when run by root user over ssh 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-07-17 21:55:52 UTC (rev 23318) +++ trunk/launchd/src/launchd_core_logic.c 2007-07-27 17:59:56 UTC (rev 23319) @@ -5659,6 +5659,12 @@ kr = BOOTSTRAP_NOT_PRIVILEGED; goto out; } + } else if (ldc.uid == 0 && getpid() == 1 && strcmp(session_type, VPROCMGR_SESSION_STANDARDIO) == 0) { + ensure_root_bkgd_setup(); + + SLIST_REMOVE(&j->mgr->parentmgr->submgrs, j->mgr, jobmgr_s, sle); + j->mgr->parentmgr = background_jobmgr; + SLIST_INSERT_HEAD(&j->mgr->parentmgr->submgrs, j->mgr, sle); } jobmgr_log(j->mgr, LOG_DEBUG, "Renaming to: %s", session_type); Modified: trunk/launchd/src/libvproc.c =================================================================== --- trunk/launchd/src/libvproc.c 2007-07-17 21:55:52 UTC (rev 23318) +++ trunk/launchd/src/libvproc.c 2007-07-27 17:59:56 UTC (rev 23319) @@ -99,8 +99,7 @@ _vprocmgr_move_subset_to_user(uid_t target_user, const char *session_type) { launch_data_t output_obj; - kern_return_t kr = 1; - mach_port_t puc = 0, rootbs = get_root_bootstrap_port(); + kern_return_t kr = 0; bool is_bkgd = (strcmp(session_type, VPROCMGR_SESSION_BACKGROUND) == 0); int64_t ldpid, lduid; @@ -112,18 +111,6 @@ return (vproc_err_t)_vprocmgr_move_subset_to_user; } - if (target_user == 0) { - if (ldpid == 1 && rootbs != bootstrap_port) { - return _vprocmgr_init(session_type); - } - - task_set_bootstrap_port(mach_task_self(), rootbs); - mach_port_deallocate(mach_task_self(), bootstrap_port); - bootstrap_port = rootbs; - - return NULL; - } - if (ldpid != 1) { if (lduid == getuid()) { return NULL; @@ -135,22 +122,23 @@ return (vproc_err_t)_vprocmgr_move_subset_to_user; } - if (vproc_mig_lookup_per_user_context(rootbs, target_user, &puc) != 0) { - return (vproc_err_t)_vprocmgr_move_subset_to_user; - } + if (is_bkgd || target_user) { + mach_port_t puc = 0, rootbs = get_root_bootstrap_port(); - if (is_bkgd) { - kr = 0; - } else { - kr = vproc_mig_move_subset(puc, bootstrap_port, (char *)session_type); - } + if (vproc_mig_lookup_per_user_context(rootbs, target_user, &puc) != 0) { + return (vproc_err_t)_vprocmgr_move_subset_to_user; + } - if (is_bkgd) { - task_set_bootstrap_port(mach_task_self(), puc); - mach_port_deallocate(mach_task_self(), bootstrap_port); - bootstrap_port = puc; + if (is_bkgd) { + task_set_bootstrap_port(mach_task_self(), puc); + mach_port_deallocate(mach_task_self(), bootstrap_port); + bootstrap_port = puc; + } else { + kr = vproc_mig_move_subset(puc, bootstrap_port, (char *)session_type); + mach_port_deallocate(mach_task_self(), puc); + } } else { - mach_port_deallocate(mach_task_self(), puc); + kr = _vprocmgr_init(session_type) ? 1 : 0; } cached_pid = -1;
participants (1)
-
source_changes@macosforge.org