Changeset 23260
- Timestamp:
- 05/22/07 13:08:55 (19 months ago)
- Files:
-
- 1 modified
-
trunk/launchd/src/launchd_core_logic.c (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/launchd/src/launchd_core_logic.c
r23258 r23260 108 108 }; 109 109 110 static bool mspolicy_new(job_t j, const char *name, bool allow, bool pid_local); 110 static bool mspolicy_new(job_t j, const char *name, bool allow, bool pid_local, bool skip_check); 111 static bool mspolicy_copy(job_t j_to, job_t j_from); 111 112 static void mspolicy_setup(launch_data_t obj, const char *key, void *context); 112 113 static bool mspolicy_check(job_t j, const char *name, bool pid_local); … … 978 979 { 979 980 int mib[] = { CTL_KERN, KERN_PROC, KERN_PROC_PID, anonpid }; 980 struct kinfo_proc kp , ppid_kp;981 struct kinfo_proc kp; 981 982 size_t len = sizeof(kp); 982 983 bool shutdown_state; 983 job_t j r = NULL;984 job_t jp = NULL, jr = NULL; 984 985 985 986 if (!jobmgr_assumes(jm, sysctl(mib, 4, &kp, &len, NULL, 0) != -1)) { … … 987 988 } 988 989 989 mib[3] = kp.kp_eproc.e_ppid; 990 991 if (!jobmgr_assumes(jm, sysctl(mib, 4, &ppid_kp, &len, NULL, 0) != -1)) { 992 return NULL; 990 switch (kp.kp_eproc.e_ppid) { 991 case 0: 992 /* the kernel */ 993 break; 994 case 1: 995 if (getpid() != 1) { 996 break; 997 } 998 /* fall through */ 999 default: 1000 jp = jobmgr_find_by_pid(jm, kp.kp_eproc.e_ppid, true); 1001 jobmgr_assumes(jm, jp != NULL); 1002 break; 993 1003 } 994 1004 … … 1004 1014 jr->anonymous = true; 1005 1015 jr->p = anonpid; 1016 1006 1017 /* anonymous process reaping is messy */ 1007 1018 LIST_INSERT_HEAD(&jm->active_jobs[ACTIVE_JOB_HASH(jr->p)], jr, pid_hash_sle); 1008 1019 job_assumes(jr, kevent_mod(jr->p, EVFILT_PROC, EV_ADD, proc_fflags, 0, root_jobmgr) != -1); 1020 1021 if (jp) { 1022 job_assumes(jr, mspolicy_copy(jr, jp)); 1023 } 1024 1009 1025 if (shutdown_state && jm->hopefully_first_cnt == 0) { 1010 job_log(jr, LOG_APPLEONLY, "This process showed up to the party while all the guests were leaving. Odds are that it will have a miserable time. Blame PID %u: %s",1011 kp.kp_eproc.e_ppid, ppid_kp.kp_proc.p_comm);1012 } 1013 job_log(jr, LOG_DEBUG, "Created anonymously by PPID %u : %s", kp.kp_eproc.e_ppid, ppid_kp.kp_proc.p_comm);1026 job_log(jr, LOG_APPLEONLY, "This process showed up to the party while all the guests were leaving. Odds are that it will have a miserable time."); 1027 } 1028 1029 job_log(jr, LOG_DEBUG, "Created anonymously by PPID %u%s%s", kp.kp_eproc.e_ppid, jp ? ": " : "", jp ? jp->label : ""); 1014 1030 } 1015 1031 … … 5573 5589 job_log(j, LOG_DEBUG, "Setting policy on job \"%s\" for Mach service: %s", target_j->label, target_service); 5574 5590 if (target_service[0]) { 5575 job_assumes(j, mspolicy_new(target_j, target_service, flags & BOOTSTRAP_ALLOW_LOOKUP, flags & BOOTSTRAP_PER_PID_SERVICE ));5591 job_assumes(j, mspolicy_new(target_j, target_service, flags & BOOTSTRAP_ALLOW_LOOKUP, flags & BOOTSTRAP_PER_PID_SERVICE, false)); 5576 5592 } else { 5577 5593 target_j->deny_unknown_mslookups = !(flags & BOOTSTRAP_ALLOW_LOOKUP); … … 5710 5726 5711 5727 bool 5712 mspolicy_ new(job_t j, const char *name, bool allow, bool pid_local)5728 mspolicy_copy(job_t j_to, job_t j_from) 5713 5729 { 5714 5730 struct mspolicy *msp; 5715 5731 5716 SLIST_FOREACH(msp, &j->mspolicies, sle) { 5732 SLIST_FOREACH(msp, &j_from->mspolicies, sle) { 5733 if (!mspolicy_new(j_to, msp->name, msp->allow, msp->per_pid, true)) { 5734 return false; 5735 } 5736 } 5737 5738 return true; 5739 } 5740 5741 bool 5742 mspolicy_new(job_t j, const char *name, bool allow, bool pid_local, bool skip_check) 5743 { 5744 struct mspolicy *msp; 5745 5746 if (!skip_check) SLIST_FOREACH(msp, &j->mspolicies, sle) { 5717 5747 if (msp->per_pid != pid_local) { 5718 5748 continue; … … 5728 5758 strcpy((char *)msp->name, name); 5729 5759 msp->per_pid = pid_local; 5760 msp->allow = allow; 5730 5761 5731 5762 SLIST_INSERT_HEAD(&j->mspolicies, msp, sle); … … 5744 5775 } 5745 5776 5746 job_assumes(j, mspolicy_new(j, key, launch_data_get_bool(obj), false ));5777 job_assumes(j, mspolicy_new(j, key, launch_data_get_bool(obj), false, false)); 5747 5778 } 5748 5779

