From e7eb49db071f9aab2a9bad0660962f2aa4d0c7d1 Mon Sep 17 00:00:00 2001 From: Daniel Mack Date: Fri, 19 Sep 2014 22:05:01 +0200 Subject: [PATCH 1/1] bus-policy: append items rather than prepending them In the D-Bus policy, the order of items matters, so make sure to store them in the same order as they are parsed by the sax parser. --- src/bus-proxyd/bus-policy.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/bus-proxyd/bus-policy.c b/src/bus-proxyd/bus-policy.c index 8676d31f6..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,9 +338,9 @@ 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->mandatory_items, i); + item_append(i, &p->mandatory_items); else if (policy_category == POLICY_CATEGORY_USER) { const char *u = policy_user; @@ -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) { @@ -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) { -- 2.30.2