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