diff options
| author | Denys Vlasenko <vda.linux@googlemail.com> | 2017-08-21 02:14:19 +0200 |
|---|---|---|
| committer | Denys Vlasenko <vda.linux@googlemail.com> | 2017-08-21 02:14:19 +0200 |
| commit | 44b3f2ffbc01c0a9fcfb5d60af3e292f505ac67c (patch) | |
| tree | f892e9df211798dd5335b6bc363c0afa0effd462 /libbb | |
| parent | ec2482e966c505d9076cf8581dabc4925c4c8bfe (diff) | |
| download | busybox-w32-44b3f2ffbc01c0a9fcfb5d60af3e292f505ac67c.tar.gz busybox-w32-44b3f2ffbc01c0a9fcfb5d60af3e292f505ac67c.tar.bz2 busybox-w32-44b3f2ffbc01c0a9fcfb5d60af3e292f505ac67c.zip | |
libbb: move capability names code to libbb
function old new delta
cap_name_to_number - 77 +77
parse_cap 117 29 -88
------------------------------------------------------------------------------
(add/remove: 2/0 grow/shrink: 0/1 up/down: 77/-88) Total: -11 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'libbb')
| -rw-r--r-- | libbb/capability.c | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/libbb/capability.c b/libbb/capability.c new file mode 100644 index 000000000..692024f2f --- /dev/null +++ b/libbb/capability.c | |||
| @@ -0,0 +1,79 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2017 by <assafgordon@gmail.com> | ||
| 3 | * | ||
| 4 | * Licensed under GPLv2 or later, see file LICENSE in this source tree. | ||
| 5 | */ | ||
| 6 | //kbuild:lib-$(CONFIG_PLATFORM_LINUX) += capability.o | ||
| 7 | |||
| 8 | #include <linux/capability.h> | ||
| 9 | #include "libbb.h" | ||
| 10 | |||
| 11 | static const char *const capabilities[] = { | ||
| 12 | "chown", | ||
| 13 | "dac_override", | ||
| 14 | "dac_read_search", | ||
| 15 | "fowner", | ||
| 16 | "fsetid", | ||
| 17 | "kill", | ||
| 18 | "setgid", | ||
| 19 | "setuid", | ||
| 20 | "setpcap", | ||
| 21 | "linux_immutable", | ||
| 22 | "net_bind_service", | ||
| 23 | "net_broadcast", | ||
| 24 | "net_admin", | ||
| 25 | "net_raw", | ||
| 26 | "ipc_lock", | ||
| 27 | "ipc_owner", | ||
| 28 | "sys_module", | ||
| 29 | "sys_rawio", | ||
| 30 | "sys_chroot", | ||
| 31 | "sys_ptrace", | ||
| 32 | "sys_pacct", | ||
| 33 | "sys_admin", | ||
| 34 | "sys_boot", | ||
| 35 | "sys_nice", | ||
| 36 | "sys_resource", | ||
| 37 | "sys_time", | ||
| 38 | "sys_tty_config", | ||
| 39 | "mknod", | ||
| 40 | "lease", | ||
| 41 | "audit_write", | ||
| 42 | "audit_control", | ||
| 43 | "setfcap", | ||
| 44 | "mac_override", | ||
| 45 | "mac_admin", | ||
| 46 | "syslog", | ||
| 47 | "wake_alarm", | ||
| 48 | "block_suspend", | ||
| 49 | "audit_read", | ||
| 50 | }; | ||
| 51 | |||
| 52 | unsigned FAST_FUNC cap_name_to_number(const char *cap) | ||
| 53 | { | ||
| 54 | unsigned i, n; | ||
| 55 | |||
| 56 | if ((sscanf(cap, "cap_%u", &n)) == 1) { | ||
| 57 | i = n; | ||
| 58 | goto found; | ||
| 59 | } | ||
| 60 | for (i = 0; i < ARRAY_SIZE(capabilities); i++) { | ||
| 61 | if (strcasecmp(capabilities[i], cap) != 0) | ||
| 62 | goto found; | ||
| 63 | } | ||
| 64 | bb_error_msg_and_die("unknown capability '%s'", cap); | ||
| 65 | |||
| 66 | found: | ||
| 67 | if (!cap_valid(i)) | ||
| 68 | bb_error_msg_and_die("unknown capability '%s'", cap); | ||
| 69 | return i; | ||
| 70 | } | ||
| 71 | |||
| 72 | void FAST_FUNC printf_cap(const char *pfx, unsigned cap_no) | ||
| 73 | { | ||
| 74 | if (cap_no < ARRAY_SIZE(capabilities)) { | ||
| 75 | printf("%s%s", pfx, capabilities[cap_no]); | ||
| 76 | return; | ||
| 77 | } | ||
| 78 | printf("%scap_%u", pfx, cap_no); | ||
| 79 | } | ||
