You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
54 lines
1.2 KiB
54 lines
1.2 KiB
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
#include <sepol/policydb/hashtab.h>
|
|
#include <sepol/policydb/policydb.h>
|
|
|
|
#include "debug.h"
|
|
#include "handle.h"
|
|
|
|
/* Check if a role exists */
|
|
int sepol_role_exists(sepol_handle_t * handle __attribute__ ((unused)),
|
|
sepol_policydb_t * p, const char *role, int *response)
|
|
{
|
|
|
|
policydb_t *policydb = &p->p;
|
|
*response = (hashtab_search(policydb->p_roles.table, role) != NULL);
|
|
|
|
return STATUS_SUCCESS;
|
|
}
|
|
|
|
/* Fill an array with all valid roles */
|
|
int sepol_role_list(sepol_handle_t * handle,
|
|
sepol_policydb_t * p, char ***roles, unsigned int *nroles)
|
|
{
|
|
|
|
policydb_t *policydb = &p->p;
|
|
unsigned int tmp_nroles = policydb->p_roles.nprim;
|
|
char **tmp_roles = (char **)malloc(tmp_nroles * sizeof(char *));
|
|
char **ptr;
|
|
unsigned int i;
|
|
if (!tmp_roles)
|
|
goto omem;
|
|
|
|
for (i = 0; i < tmp_nroles; i++) {
|
|
tmp_roles[i] = strdup(policydb->p_role_val_to_name[i]);
|
|
if (!tmp_roles[i])
|
|
goto omem;
|
|
}
|
|
|
|
*nroles = tmp_nroles;
|
|
*roles = tmp_roles;
|
|
|
|
return STATUS_SUCCESS;
|
|
|
|
omem:
|
|
ERR(handle, "out of memory, could not list roles");
|
|
|
|
ptr = tmp_roles;
|
|
while (ptr && *ptr)
|
|
free(*ptr++);
|
|
free(tmp_roles);
|
|
return STATUS_ERR;
|
|
}
|