Projects
Browse Source     Search     Timeline     Wiki

Changeset 23319

Show
Ignore:
Timestamp:
07/27/07 10:59:56 (16 months ago)
Author:
zarzycki@…
Message:

<rdar://problem/5345685> kinit fails with Internal credentials cache error when run by root user over ssh

Location:
trunk/launchd/src
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • trunk/launchd/src/launchd_core_logic.c

    r23317 r23319  
    56605660                                goto out; 
    56615661                        } 
     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); 
    56625668                } 
    56635669 
  • trunk/launchd/src/libvproc.c

    r23307 r23319  
    100100{ 
    101101        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; 
    104103        bool is_bkgd = (strcmp(session_type, VPROCMGR_SESSION_BACKGROUND) == 0); 
    105104        int64_t ldpid, lduid; 
     
    111110        if (vproc_swap_integer(NULL, VPROC_GSK_MGR_UID, 0, &lduid) != 0) { 
    112111                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; 
    125112        } 
    126113 
     
    136123        } 
    137124 
    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                } 
    144140        } 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; 
    154142        } 
    155143