1*2d543d20SAndroid Build Coastguard Worker /*
2*2d543d20SAndroid Build Coastguard Worker * Policy capability support functions
3*2d543d20SAndroid Build Coastguard Worker */
4*2d543d20SAndroid Build Coastguard Worker
5*2d543d20SAndroid Build Coastguard Worker #include <string.h>
6*2d543d20SAndroid Build Coastguard Worker #include <sepol/policydb/polcaps.h>
7*2d543d20SAndroid Build Coastguard Worker
8*2d543d20SAndroid Build Coastguard Worker static const char * const polcap_names[POLICYDB_CAP_MAX + 1] = {
9*2d543d20SAndroid Build Coastguard Worker [POLICYDB_CAP_NETPEER] = "network_peer_controls",
10*2d543d20SAndroid Build Coastguard Worker [POLICYDB_CAP_OPENPERM] = "open_perms",
11*2d543d20SAndroid Build Coastguard Worker [POLICYDB_CAP_EXTSOCKCLASS] = "extended_socket_class",
12*2d543d20SAndroid Build Coastguard Worker [POLICYDB_CAP_ALWAYSNETWORK] = "always_check_network",
13*2d543d20SAndroid Build Coastguard Worker [POLICYDB_CAP_CGROUPSECLABEL] = "cgroup_seclabel",
14*2d543d20SAndroid Build Coastguard Worker [POLICYDB_CAP_NNP_NOSUID_TRANSITION] = "nnp_nosuid_transition",
15*2d543d20SAndroid Build Coastguard Worker [POLICYDB_CAP_GENFS_SECLABEL_SYMLINKS] = "genfs_seclabel_symlinks",
16*2d543d20SAndroid Build Coastguard Worker [POLICYDB_CAP_IOCTL_SKIP_CLOEXEC] = "ioctl_skip_cloexec",
17*2d543d20SAndroid Build Coastguard Worker [POLICYDB_CAP_USERSPACE_INITIAL_CONTEXT] = "userspace_initial_context",
18*2d543d20SAndroid Build Coastguard Worker [POLICYDB_CAP_NETLINK_XPERM] = "netlink_xperm",
19*2d543d20SAndroid Build Coastguard Worker };
20*2d543d20SAndroid Build Coastguard Worker
sepol_polcap_getnum(const char * name)21*2d543d20SAndroid Build Coastguard Worker int sepol_polcap_getnum(const char *name)
22*2d543d20SAndroid Build Coastguard Worker {
23*2d543d20SAndroid Build Coastguard Worker int capnum;
24*2d543d20SAndroid Build Coastguard Worker
25*2d543d20SAndroid Build Coastguard Worker for (capnum = 0; capnum <= POLICYDB_CAP_MAX; capnum++) {
26*2d543d20SAndroid Build Coastguard Worker if (polcap_names[capnum] == NULL)
27*2d543d20SAndroid Build Coastguard Worker continue;
28*2d543d20SAndroid Build Coastguard Worker if (strcasecmp(polcap_names[capnum], name) == 0)
29*2d543d20SAndroid Build Coastguard Worker return capnum;
30*2d543d20SAndroid Build Coastguard Worker }
31*2d543d20SAndroid Build Coastguard Worker return -1;
32*2d543d20SAndroid Build Coastguard Worker }
33*2d543d20SAndroid Build Coastguard Worker
sepol_polcap_getname(unsigned int capnum)34*2d543d20SAndroid Build Coastguard Worker const char *sepol_polcap_getname(unsigned int capnum)
35*2d543d20SAndroid Build Coastguard Worker {
36*2d543d20SAndroid Build Coastguard Worker if (capnum > POLICYDB_CAP_MAX)
37*2d543d20SAndroid Build Coastguard Worker return NULL;
38*2d543d20SAndroid Build Coastguard Worker
39*2d543d20SAndroid Build Coastguard Worker return polcap_names[capnum];
40*2d543d20SAndroid Build Coastguard Worker }
41