33 lines
		
	
	
		
			559 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			33 lines
		
	
	
		
			559 B
		
	
	
	
		
			C
		
	
	
	
	
	
| #include <errno.h>
 | |
| #include <lib.h>
 | |
| #include <string.h>
 | |
| #include <unistd.h>
 | |
| 
 | |
| #include <sys/ucred.h>
 | |
| 
 | |
| int 
 | |
| getnucred(endpoint_t proc_ep, struct uucred *ucred)
 | |
| {
 | |
| 	message m;
 | |
| 	pid_t pid;
 | |
| 
 | |
| 	if (ucred == NULL) {
 | |
| 		errno = EFAULT;
 | |
| 		return -1;
 | |
| 	}
 | |
| 
 | |
| 	m.m1_i1 = proc_ep;		/* search for this process */
 | |
| 
 | |
| 	pid = _syscall(PM_PROC_NR, GETEPINFO, &m);
 | |
| 	if (pid < 0) {
 | |
| 		 return -1;
 | |
| 	}
 | |
| 
 | |
| 	/* Only two fields are used for now, so ensure the rest is zeroed out. */
 | |
| 	memset(ucred, 0, sizeof(struct uucred));
 | |
| 	ucred->cr_uid = m.PM_NUID;
 | |
| 	ucred->cr_gid = m.PM_NGID;
 | |
| 
 | |
| 	return 0;
 | |
| }
 | 
