[launchd-changes] [23319] trunk/launchd/src

source_changes at macosforge.org source_changes at macosforge.org
Fri Jul 27 10:59:56 PDT 2007


Revision: 23319
          http://trac.macosforge.org/projects/launchd/changeset/23319
Author:   zarzycki at 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;

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20070727/135c7247/attachment.html


More information about the launchd-changes mailing list