| #if defined(linux) |
| |
| |
| #include <stdio.h> /* printf() */ |
| #include <unistd.h> /* syscall() */ |
| #include <sys/syscall.h> /* __NR_capget */ |
| #include <sys/types.h> /* uid_t */ |
| #include <linux/capability.h> /* _LINUX_CAPABILITY_VERSION */ |
| |
| |
| int main() |
| { |
| struct __user_cap_header_struct h; |
| struct __user_cap_data_struct d; |
| int syscall_result; |
| |
| if (getuid() == 0) |
| fprintf(stderr, "Running as root\n"); |
| h.version = _LINUX_CAPABILITY_VERSION; |
| h.pid = 0; |
| syscall_result = syscall(__NR_capget, &h, &d); |
| if (syscall_result >= 0) |
| { |
| fprintf(stderr, |
| "capget result:\n" |
| "effective %#x\n" |
| "permitted %#x\n" |
| "inheritable %#x\n", |
| d.effective, |
| d.permitted, |
| d.inheritable); |
| } |
| else |
| { |
| perror("capget"); |
| } |
| return 0; |
| } |
| |
| |
| #else |
| |
| |
| #include <stdio.h> |
| |
| int main() |
| { |
| fprintf(stderr, "This program is Linux-specific\n"); |
| return 0; |
| } |
| |
| |
| #endif |