1 /* $OpenBSD: setuid_regress.h,v 1.1 2014/08/27 07:36:14 blambert Exp $ */ 2 /* 3 * Written by Bret Stephen Lambert <blambert@openbsd.org> 2014 4 * Public Domain. 5 */ 6 7 #ifndef _SETUID_REGRESS_H_ 8 #define _SETUID_REGRESS_H_ 9 10 #define _SETUID_REGRESS_USER "nobody" 11 12 static inline int 13 read_kproc_pid(struct kinfo_proc *kproc, pid_t pid) 14 { 15 int args[6]; 16 size_t size; 17 18 args[0] = CTL_KERN; 19 args[1] = KERN_PROC; 20 args[2] = KERN_PROC_PID; 21 args[3] = pid; 22 args[4] = sizeof(*kproc); 23 args[5] = 1; 24 25 size = sizeof(*kproc); 26 return (sysctl(args, 6, kproc, &size, NULL, 0)); 27 } 28 29 static inline void 30 checkuids(uid_t truid, uid_t teuid, uid_t tsuid, const char *str) 31 { 32 uid_t ruid, euid, suid; 33 34 if (getresuid(&ruid, &euid, &suid) == -1) 35 err(1, "getresuid %s", str); 36 37 if (ruid != truid) 38 errx(1, "real uid incorrectly set %s: is %u should be %u", 39 str, ruid, truid); 40 if (euid != teuid) 41 errx(1, "effective uid incorrectly set %s: is %u should be %u", 42 str, euid, teuid); 43 if (suid != tsuid) 44 errx(1, "saved uid incorrectly set %s: is %u should be %u", 45 str, suid, tsuid); 46 } 47 48 void 49 checkgids(gid_t trgid, gid_t tegid, gid_t tsgid, const char *str) 50 { 51 gid_t rgid, egid, sgid; 52 53 if (getresgid(&rgid, &egid, &sgid) == -1) 54 err(1, "getresgid %s", str); 55 56 if (rgid != trgid) 57 errx(1, "real gid incorrectly set %s: is %u should be %u", 58 str, rgid, trgid); 59 if (egid != tegid) 60 errx(1, "effective gid incorrectly set %s: is %u should be %u", 61 str, egid, tegid); 62 if (sgid != tsgid) 63 errx(1, "saved gid incorrectly set %s: is %u should be %u", 64 str, sgid, tsgid); 65 } 66 #endif 67