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