Home | History | Annotate | Download | only in src
      1 #include <stdlib.h>
      2 #include <string.h>
      3 
      4 #include <sepol/policydb/hashtab.h>
      5 #include <sepol/policydb/policydb.h>
      6 
      7 #include "debug.h"
      8 #include "handle.h"
      9 
     10 /* Check if a role exists */
     11 int sepol_role_exists(sepol_handle_t * handle __attribute__ ((unused)),
     12 		      sepol_policydb_t * p, const char *role, int *response)
     13 {
     14 
     15 	policydb_t *policydb = &p->p;
     16 	*response = (hashtab_search(policydb->p_roles.table,
     17 				    (const hashtab_key_t)role) != NULL);
     18 
     19 	handle = NULL;
     20 	return STATUS_SUCCESS;
     21 }
     22 
     23 /* Fill an array with all valid roles */
     24 int sepol_role_list(sepol_handle_t * handle,
     25 		    sepol_policydb_t * p, char ***roles, unsigned int *nroles)
     26 {
     27 
     28 	policydb_t *policydb = &p->p;
     29 	unsigned int tmp_nroles = policydb->p_roles.nprim;
     30 	char **tmp_roles = (char **)malloc(tmp_nroles * sizeof(char *));
     31 	char **ptr;
     32 	unsigned int i;
     33 	if (!tmp_roles)
     34 		goto omem;
     35 
     36 	for (i = 0; i < tmp_nroles; i++) {
     37 		tmp_roles[i] = strdup(policydb->p_role_val_to_name[i]);
     38 		if (!tmp_roles[i])
     39 			goto omem;
     40 	}
     41 
     42 	*nroles = tmp_nroles;
     43 	*roles = tmp_roles;
     44 
     45 	return STATUS_SUCCESS;
     46 
     47       omem:
     48 	ERR(handle, "out of memory, could not list roles");
     49 
     50 	ptr = tmp_roles;
     51 	while (ptr && *ptr)
     52 		free(*ptr++);
     53 	free(tmp_roles);
     54 	return STATUS_ERR;
     55 }
     56