1#if defined(linux) 2 3 4#include <stdio.h> /* printf() */ 5#include <unistd.h> /* syscall() */ 6#include <sys/syscall.h> /* __NR_capget */ 7#include <sys/types.h> /* uid_t */ 8#include <linux/capability.h> /* _LINUX_CAPABILITY_VERSION */ 9 10 11int main() 12{ 13 struct __user_cap_header_struct h; 14 struct __user_cap_data_struct d; 15 int syscall_result; 16 17 if (getuid() == 0) 18 fprintf(stderr, "Running as root\n"); 19 h.version = _LINUX_CAPABILITY_VERSION; 20 h.pid = 0; 21 syscall_result = syscall(__NR_capget, &h, &d); 22 if (syscall_result >= 0) 23 { 24 fprintf(stderr, 25 "capget result:\n" 26 "effective %#x\n" 27 "permitted %#x\n" 28 "inheritable %#x\n", 29 d.effective, 30 d.permitted, 31 d.inheritable); 32 } 33 else 34 { 35 perror("capget"); 36 } 37 return 0; 38} 39 40 41#else 42 43 44#include <stdio.h> 45 46int main() 47{ 48 fprintf(stderr, "This program is Linux-specific\n"); 49 return 0; 50} 51 52 53#endif 54