#include "attribute.h" void attribute_usage() { fprintf(stderr, "\tattribute <attribute-name>\n"); } static int list_attribute(policydb_t * policydb, char *name) { struct type_datum *attr; struct ebitmap_node *n; unsigned int bit; attr = hashtab_search(policydb->p_types.table, name); if (!attr) { fprintf(stderr, "%s is not defined in this policy.\n", name); return -1; } if (attr->flavor != TYPE_ATTRIB) { fprintf(stderr, "%s is a type not an attribute in this policy.\n", name); return -1; } ebitmap_for_each_bit(&policydb->attr_type_map[attr->s.value - 1], n, bit) { if (!ebitmap_node_get_bit(n, bit)) continue; printf("%s\n", policydb->p_type_val_to_name[bit]); } return 0; } int attribute_func (int argc, char **argv, policydb_t *policydb) { if (argc != 2) { USAGE_ERROR = true; return -1; } return list_attribute(policydb, argv[1]); }