X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fbus-proxyd%2Fbus-policy.c;h=eed542d8f89ff425a782e8a2310d8bb745120efb;hb=e7eb49db071f9aab2a9bad0660962f2aa4d0c7d1;hp=3f1d7557c178a53493ad4f3755612cd433ec97b7;hpb=ba98e746e63d749ab2bf84c9e050206468019b7f;p=elogind.git diff --git a/src/bus-proxyd/bus-policy.c b/src/bus-proxyd/bus-policy.c index 3f1d7557c..eed542d8f 100644 --- a/src/bus-proxyd/bus-policy.c +++ b/src/bus-proxyd/bus-policy.c @@ -39,6 +39,14 @@ static void policy_item_free(PolicyItem *i) { DEFINE_TRIVIAL_CLEANUP_FUNC(PolicyItem*, policy_item_free); +static void item_append(PolicyItem *i, PolicyItem **list) { + + PolicyItem *tail; + + LIST_FIND_TAIL(items, *list, tail); + LIST_INSERT_AFTER(items, *list, tail, i); +} + static int file_load(Policy *p, const char *path) { _cleanup_free_ char *c = NULL, *policy_user = NULL, *policy_group = NULL; @@ -330,15 +338,15 @@ static int file_load(Policy *p, const char *path) { } if (policy_category == POLICY_CATEGORY_DEFAULT) - LIST_PREPEND(items, p->default_items, i); + item_append(i, &p->default_items); else if (policy_category == POLICY_CATEGORY_MANDATORY) - LIST_PREPEND(items, p->default_items, i); + item_append(i, &p->mandatory_items); else if (policy_category == POLICY_CATEGORY_USER) { const char *u = policy_user; assert_cc(sizeof(uid_t) == sizeof(uint32_t)); - r = hashmap_ensure_allocated(&p->user_items, trivial_hash_func, trivial_compare_func); + r = hashmap_ensure_allocated(&p->user_items, NULL); if (r < 0) return log_oom(); @@ -355,7 +363,7 @@ static int file_load(Policy *p, const char *path) { PolicyItem *first; first = hashmap_get(p->user_items, UINT32_TO_PTR(i->uid)); - LIST_PREPEND(items, first, i); + item_append(i, &first); r = hashmap_replace(p->user_items, UINT32_TO_PTR(i->uid), first); if (r < 0) { @@ -369,7 +377,7 @@ static int file_load(Policy *p, const char *path) { assert_cc(sizeof(gid_t) == sizeof(uint32_t)); - r = hashmap_ensure_allocated(&p->group_items, trivial_hash_func, trivial_compare_func); + r = hashmap_ensure_allocated(&p->group_items, NULL); if (r < 0) return log_oom(); @@ -386,7 +394,7 @@ static int file_load(Policy *p, const char *path) { PolicyItem *first; first = hashmap_get(p->group_items, UINT32_TO_PTR(i->gid)); - LIST_PREPEND(items, first, i); + item_append(i, &first); r = hashmap_replace(p->group_items, UINT32_TO_PTR(i->gid), first); if (r < 0) { @@ -724,5 +732,6 @@ static const char* const policy_item_class_table[_POLICY_ITEM_CLASS_MAX] = { [POLICY_ITEM_OWN_PREFIX] = "own-prefix", [POLICY_ITEM_USER] = "user", [POLICY_ITEM_GROUP] = "group", + [POLICY_ITEM_IGNORE] = "ignore", }; DEFINE_STRING_TABLE_LOOKUP(policy_item_class, PolicyItemClass);