xref: /aosp_15_r20/external/selinux/libsepol/src/polcaps.c (revision 2d543d20722ada2425b5bdab9d0d1d29470e7bba)
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