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
7 months ago
|
#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;
|
||
|
}
|