11da7c95b62537f066c74972e2b59a322446ca86eDmitry V. Levin#ifdef HAVE_CONFIG_H 21da7c95b62537f066c74972e2b59a322446ca86eDmitry V. Levin# include "config.h" 31da7c95b62537f066c74972e2b59a322446ca86eDmitry V. Levin#endif 41da7c95b62537f066c74972e2b59a322446ca86eDmitry V. Levin#include <assert.h> 5530bed0ca8285188ce6cbc9406e817da0ef4828bDmitry V. Levin#include <stdlib.h> 61da7c95b62537f066c74972e2b59a322446ca86eDmitry V. Levin#include <unistd.h> 71da7c95b62537f066c74972e2b59a322446ca86eDmitry V. Levin#include <sys/syscall.h> 81da7c95b62537f066c74972e2b59a322446ca86eDmitry V. Levin 91da7c95b62537f066c74972e2b59a322446ca86eDmitry V. Levinint 101da7c95b62537f066c74972e2b59a322446ca86eDmitry V. Levinmain(void) 111da7c95b62537f066c74972e2b59a322446ca86eDmitry V. Levin{ 121da7c95b62537f066c74972e2b59a322446ca86eDmitry V. Levin#if defined(__NR_getuid32) \ 131da7c95b62537f066c74972e2b59a322446ca86eDmitry V. Levin && defined(__NR_setuid32) \ 141da7c95b62537f066c74972e2b59a322446ca86eDmitry V. Levin && defined(__NR_getresuid32) \ 151da7c95b62537f066c74972e2b59a322446ca86eDmitry V. Levin && defined(__NR_setreuid32) \ 161da7c95b62537f066c74972e2b59a322446ca86eDmitry V. Levin && defined(__NR_setresuid32) \ 1768804b326709fadc7bb03f510a11771f07216a59Dmitry V. Levin && defined(__NR_fchown32) \ 18530bed0ca8285188ce6cbc9406e817da0ef4828bDmitry V. Levin && defined(__NR_getgroups32) 19530bed0ca8285188ce6cbc9406e817da0ef4828bDmitry V. Levin int r, e, s; 20530bed0ca8285188ce6cbc9406e817da0ef4828bDmitry V. Levin int size; 21530bed0ca8285188ce6cbc9406e817da0ef4828bDmitry V. Levin int *list = 0; 221da7c95b62537f066c74972e2b59a322446ca86eDmitry V. Levin 233a15bc8adf3031b474a81e1c672c11817c8ee8f0Dmitry V. Levin r = syscall(__NR_getuid32); 243a15bc8adf3031b474a81e1c672c11817c8ee8f0Dmitry V. Levin assert(syscall(__NR_setuid32, r) == 0); 251da7c95b62537f066c74972e2b59a322446ca86eDmitry V. Levin assert(syscall(__NR_getresuid32, &r, &e, &s) == 0); 261da7c95b62537f066c74972e2b59a322446ca86eDmitry V. Levin assert(syscall(__NR_setreuid32, -1, -1L) == 0); 273a15bc8adf3031b474a81e1c672c11817c8ee8f0Dmitry V. Levin assert(syscall(__NR_setresuid32, r, -1, -1L) == 0); 2868804b326709fadc7bb03f510a11771f07216a59Dmitry V. Levin assert(syscall(__NR_fchown32, 1, -1, -1L) == 0); 29530bed0ca8285188ce6cbc9406e817da0ef4828bDmitry V. Levin assert((size = syscall(__NR_getgroups32, 0, list)) >= 0); 30530bed0ca8285188ce6cbc9406e817da0ef4828bDmitry V. Levin assert(list = calloc(size + 1, sizeof(*list))); 31530bed0ca8285188ce6cbc9406e817da0ef4828bDmitry V. Levin assert(syscall(__NR_getgroups32, size, list) == size); 321da7c95b62537f066c74972e2b59a322446ca86eDmitry V. Levin return 0; 331da7c95b62537f066c74972e2b59a322446ca86eDmitry V. Levin#else 341da7c95b62537f066c74972e2b59a322446ca86eDmitry V. Levin return 77; 351da7c95b62537f066c74972e2b59a322446ca86eDmitry V. Levin#endif 361da7c95b62537f066c74972e2b59a322446ca86eDmitry V. Levin} 37