From 1977d783a60647a384e6ab79bfd4e63f5b38d0a4 Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Sat, 22 Dec 2001 21:00:25 +0000 Subject: 2001-12-22 Roland McGrath * proc.h (check_owner): Move this extern inline function ... * info.c (check_owner): ... to here, made static inline. --- proc/info.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'proc/info.c') diff --git a/proc/info.c b/proc/info.c index 580ce8fb..342813c5 100644 --- a/proc/info.c +++ b/proc/info.c @@ -33,6 +33,20 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "proc.h" #include "process_S.h" + +/* Returns true if PROC1 has `owner' privileges over PROC2 (and can thus get + its task port &c). If PROC2 has an owner, then PROC1 must have that uid; + otherwise, both must be in the same login collection. */ +static inline int +check_owner (struct proc *proc1, struct proc *proc2) +{ + return + proc2->p_noowner + ? check_uid (proc1, 0) || proc1->p_login == proc2->p_login + : check_uid (proc1, proc2->p_owner); +} + + /* Implement S_proc_pid2task as described in . */ kern_return_t S_proc_pid2task (struct proc *callerp, @@ -40,7 +54,7 @@ S_proc_pid2task (struct proc *callerp, task_t *t) { struct proc *p; - + if (!callerp) return EOPNOTSUPP; -- cgit v1.2.3