Lines Matching +full:- +full:- +full:include +full:- +full:cat
7 * Copyright (C) 2004-2005 Trusted Computer Solutions, Inc.
21 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
27 * Implementation of the multi-level security (MLS) policy.
30 #include <sepol/context.h>
31 #include <sepol/policydb/policydb.h>
32 #include <sepol/policydb/services.h>
33 #include <sepol/policydb/context.h>
35 #include <stdlib.h>
37 #include "handle.h"
38 #include "debug.h"
39 #include "private.h"
40 #include "mls.h"
49 /* Temporary buffer - length + NULL terminator */ in mls_to_string()
57 ptr2 = (char *)malloc(len - 1); in mls_to_string()
62 ptr -= len - 1; in mls_to_string()
116 if (!policydb->mls) in mls_compute_context_len()
123 strlen(policydb-> in mls_compute_context_len()
124 p_sens_val_to_name[context->range.level[l].sens - in mls_compute_context_len()
127 ebitmap_for_each_bit(&context->range.level[l].cat, cnode, i) { in mls_compute_context_len()
135 strlen(policydb->p_cat_val_to_name[i]) + 1; in mls_compute_context_len()
140 strlen(policydb-> in mls_compute_context_len()
141 p_cat_val_to_name[i - 1]) + in mls_compute_context_len()
148 len += strlen(policydb->p_cat_val_to_name[i - 1]) + 1; in mls_compute_context_len()
151 if (mls_level_eq(&context->range.level[0], in mls_compute_context_len()
152 &context->range.level[1])) in mls_compute_context_len()
175 if (!policydb->mls) in mls_sid_to_context()
187 policydb->p_sens_val_to_name[context->range.level[l]. in mls_sid_to_context()
188 sens - 1]); in mls_sid_to_context()
190 strlen(policydb-> in mls_sid_to_context()
191 p_sens_val_to_name[context->range.level[l].sens - in mls_sid_to_context()
194 ebitmap_for_each_bit(&context->range.level[l].cat, cnode, i) { in mls_sid_to_context()
207 policydb->p_cat_val_to_name[i]); in mls_sid_to_context()
209 strlen(policydb->p_cat_val_to_name[i]); in mls_sid_to_context()
219 policydb->p_cat_val_to_name[i - in mls_sid_to_context()
222 strlen(policydb-> in mls_sid_to_context()
223 p_cat_val_to_name[i - 1]); in mls_sid_to_context()
235 strcpy(scontextp, policydb->p_cat_val_to_name[i - 1]); in mls_sid_to_context()
236 scontextp += strlen(policydb->p_cat_val_to_name[i - 1]); in mls_sid_to_context()
240 if (mls_level_eq(&context->range.level[0], in mls_sid_to_context()
241 &context->range.level[1])) in mls_sid_to_context()
244 *scontextp = '-'; in mls_sid_to_context()
267 if (!p->mls) in mls_context_isvalid()
272 * be valid (category set <-> sensitivity check), and high level must in mls_context_isvalid()
273 * be valid (category set <-> sensitivity check) in mls_context_isvalid()
275 if (!mls_level_dom(&c->range.level[1], &c->range.level[0])) in mls_context_isvalid()
280 if (!c->range.level[l].sens in mls_context_isvalid()
281 || c->range.level[l].sens > p->p_levels.nprim) in mls_context_isvalid()
284 key = p->p_sens_val_to_name[c->range.level[l].sens - 1]; in mls_context_isvalid()
288 levdatum = (level_datum_t *) hashtab_search(p->p_levels.table, key); in mls_context_isvalid()
292 ebitmap_for_each_positive_bit(&c->range.level[l].cat, cnode, i) { in mls_context_isvalid()
293 if (i > p->p_cats.nprim) in mls_context_isvalid()
295 if (!ebitmap_get_bit(&levdatum->level->cat, i)) in mls_context_isvalid()
304 if (c->role == OBJECT_R_VAL) in mls_context_isvalid()
310 if (!c->user || c->user > p->p_users.nprim) in mls_context_isvalid()
312 usrdatum = p->user_val_to_struct[c->user - 1]; in mls_context_isvalid()
313 if (!usrdatum || !mls_range_contains(usrdatum->exp_range, c->range)) in mls_context_isvalid()
339 if (!policydb->mls) in mls_context_to_sid()
348 while (*p && *p != ':' && *p != '-') in mls_context_to_sid()
357 (level_datum_t *) hashtab_search(policydb->p_levels.table, in mls_context_to_sid()
363 context->range.level[l].sens = levdatum->level->sens; in mls_context_to_sid()
369 while (*p && *p != ',' && *p != '-') in mls_context_to_sid()
382 (cat_datum_t *) hashtab_search(policydb-> in mls_context_to_sid()
390 (&context->range.level[l].cat, in mls_context_to_sid()
391 catdatum->s.value - 1, 1)) in mls_context_to_sid()
399 hashtab_search(policydb->p_cats. in mls_context_to_sid()
406 if (catdatum->s.value >= in mls_context_to_sid()
407 rngdatum->s.value) in mls_context_to_sid()
410 for (i = catdatum->s.value; in mls_context_to_sid()
411 i < rngdatum->s.value; i++) { in mls_context_to_sid()
413 (&context->range.level[l]. in mls_context_to_sid()
414 cat, i, 1)) in mls_context_to_sid()
423 if (delim == '-') { in mls_context_to_sid()
438 if (mls_level_cpy(&context->range.level[1], in mls_context_to_sid()
439 &context->range.level[0]) < 0) in mls_context_to_sid()
460 dst->range.level[l].sens = src->range.level[l].sens; in mls_copy_context()
461 rc = ebitmap_cpy(&dst->range.level[l].cat, in mls_copy_context()
462 &src->range.level[l].cat); in mls_copy_context()
480 dst->range.level[l].sens = src->range.level[0].sens; in mls_scopy_context()
481 rc = ebitmap_cpy(&dst->range.level[l].cat, in mls_scopy_context()
482 &src->range.level[0].cat); in mls_scopy_context()
499 context->range.level[l].sens = range->level[l].sens; in mls_range_set()
500 rc = ebitmap_cpy(&context->range.level[l].cat, in mls_range_set()
501 &range->level[l].cat); in mls_range_set()
513 mls_level_t *fromcon_sen = &(fromcon->range.level[0]); in mls_setup_user_range()
514 mls_level_t *fromcon_clr = &(fromcon->range.level[1]); in mls_setup_user_range()
515 mls_level_t *user_low = &(user->exp_range.level[0]); in mls_setup_user_range()
516 mls_level_t *user_clr = &(user->exp_range.level[1]); in mls_setup_user_range()
517 mls_level_t *user_def = &(user->exp_dfltlevel); in mls_setup_user_range()
518 mls_level_t *usercon_sen = &(usercon->range.level[0]); in mls_setup_user_range()
519 mls_level_t *usercon_clr = &(usercon->range.level[1]); in mls_setup_user_range()
529 return -EINVAL; in mls_setup_user_range()
541 return -EINVAL; in mls_setup_user_range()
561 if (!oldp->mls) in mls_convert_context()
566 (level_datum_t *) hashtab_search(newp->p_levels.table, in mls_convert_context()
567 oldp-> in mls_convert_context()
568 p_sens_val_to_name[c-> in mls_convert_context()
572 sens - in mls_convert_context()
576 return -EINVAL; in mls_convert_context()
577 c->range.level[l].sens = levdatum->level->sens; in mls_convert_context()
580 ebitmap_for_each_positive_bit(&c->range.level[l].cat, cnode, i) { in mls_convert_context()
584 (cat_datum_t *) hashtab_search(newp->p_cats. in mls_convert_context()
586 oldp-> in mls_convert_context()
590 return -EINVAL; in mls_convert_context()
592 catdatum->s.value - 1, 1); in mls_convert_context()
596 ebitmap_destroy(&c->range.level[l].cat); in mls_convert_context()
597 c->range.level[l].cat = bitmap; in mls_convert_context()
614 if (!policydb->mls) in mls_compute_sid()
620 rtr.source_type = scontext->type; in mls_compute_sid()
621 rtr.target_type = tcontext->type; in mls_compute_sid()
623 r = hashtab_search(policydb->range_tr, (hashtab_key_t) &rtr); in mls_compute_sid()
627 if (tclass && tclass <= policydb->p_classes.nprim) { in mls_compute_sid()
628 cladatum = policydb->class_val_to_struct[tclass - 1]; in mls_compute_sid()
630 default_range = cladatum->default_range; in mls_compute_sid()
652 if (tclass == policydb->process_class) in mls_compute_sid()
662 return -EINVAL; in mls_compute_sid()
664 return -EINVAL; in mls_compute_sid()
680 if (mls_from_string(handle, &policydb->p, mls1, ctx1) < 0) in sepol_mls_contains()
683 if (mls_from_string(handle, &policydb->p, mls2, ctx2) < 0) in sepol_mls_contains()
686 *response = mls_range_contains(ctx1->range, ctx2->range); in sepol_mls_contains()
719 ret = mls_from_string(handle, &policydb->p, mls, con); in sepol_mls_check()
732 /* it's currently a simple struct - really nothing to destroy */ in mls_semantic_cat_destroy()
748 next = l->cat; in mls_semantic_level_destroy()
751 next = cur->next; in mls_semantic_level_destroy()
760 mls_semantic_cat_t *cat, *newcat, *lnewcat = NULL; in mls_semantic_level_cpy() local
763 dst->sens = src->sens; in mls_semantic_level_cpy()
764 cat = src->cat; in mls_semantic_level_cpy()
765 while (cat) { in mls_semantic_level_cpy()
773 lnewcat->next = newcat; in mls_semantic_level_cpy()
775 dst->cat = newcat; in mls_semantic_level_cpy()
777 newcat->low = cat->low; in mls_semantic_level_cpy()
778 newcat->high = cat->high; in mls_semantic_level_cpy()
781 cat = cat->next; in mls_semantic_level_cpy()
787 return -1; in mls_semantic_level_cpy()
792 mls_semantic_level_init(&r->level[0]); in mls_semantic_range_init()
793 mls_semantic_level_init(&r->level[1]); in mls_semantic_range_init()
798 mls_semantic_level_destroy(&r->level[0]); in mls_semantic_range_destroy()
799 mls_semantic_level_destroy(&r->level[1]); in mls_semantic_range_destroy()
805 if (mls_semantic_level_cpy(&dst->level[0], &src->level[0]) < 0) in mls_semantic_range_cpy()
806 return -1; in mls_semantic_range_cpy()
808 if (mls_semantic_level_cpy(&dst->level[1], &src->level[1]) < 0) { in mls_semantic_range_cpy()
809 mls_semantic_level_destroy(&dst->level[0]); in mls_semantic_range_cpy()
810 return -1; in mls_semantic_range_cpy()