Zbigniew Jędrzejewski-Szmek 62fe94
From e7eb49db071f9aab2a9bad0660962f2aa4d0c7d1 Mon Sep 17 00:00:00 2001
Zbigniew Jędrzejewski-Szmek 62fe94
From: Daniel Mack <daniel@zonque.org>
Zbigniew Jędrzejewski-Szmek 62fe94
Date: Fri, 19 Sep 2014 22:05:01 +0200
Zbigniew Jędrzejewski-Szmek 62fe94
Subject: [PATCH] bus-policy: append items rather than prepending them
Zbigniew Jędrzejewski-Szmek 62fe94
Zbigniew Jędrzejewski-Szmek 62fe94
In the D-Bus policy, the order of items matters, so make sure to store them
Zbigniew Jędrzejewski-Szmek 62fe94
in the same order as they are parsed by the sax parser.
Zbigniew Jędrzejewski-Szmek 62fe94
---
Zbigniew Jędrzejewski-Szmek 62fe94
 src/bus-proxyd/bus-policy.c | 16 ++++++++++++----
Zbigniew Jędrzejewski-Szmek 62fe94
 1 file changed, 12 insertions(+), 4 deletions(-)
Zbigniew Jędrzejewski-Szmek 62fe94
Zbigniew Jędrzejewski-Szmek 62fe94
diff --git a/src/bus-proxyd/bus-policy.c b/src/bus-proxyd/bus-policy.c
Zbigniew Jędrzejewski-Szmek 62fe94
index 8676d31f62..eed542d8f8 100644
Zbigniew Jędrzejewski-Szmek 62fe94
--- a/src/bus-proxyd/bus-policy.c
Zbigniew Jędrzejewski-Szmek 62fe94
+++ b/src/bus-proxyd/bus-policy.c
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -39,6 +39,14 @@ static void policy_item_free(PolicyItem *i) {
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
 DEFINE_TRIVIAL_CLEANUP_FUNC(PolicyItem*, policy_item_free);
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
+static void item_append(PolicyItem *i, PolicyItem **list) {
Zbigniew Jędrzejewski-Szmek 62fe94
+
Zbigniew Jędrzejewski-Szmek 62fe94
+        PolicyItem *tail;
Zbigniew Jędrzejewski-Szmek 62fe94
+
Zbigniew Jędrzejewski-Szmek 62fe94
+        LIST_FIND_TAIL(items, *list, tail);
Zbigniew Jędrzejewski-Szmek 62fe94
+        LIST_INSERT_AFTER(items, *list, tail, i);
Zbigniew Jędrzejewski-Szmek 62fe94
+}
Zbigniew Jędrzejewski-Szmek 62fe94
+
Zbigniew Jędrzejewski-Szmek 62fe94
 static int file_load(Policy *p, const char *path) {
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
         _cleanup_free_ char *c = NULL, *policy_user = NULL, *policy_group = NULL;
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -330,9 +338,9 @@ static int file_load(Policy *p, const char *path) {
Zbigniew Jędrzejewski-Szmek 62fe94
                                 }
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
                                 if (policy_category == POLICY_CATEGORY_DEFAULT)
Zbigniew Jędrzejewski-Szmek 62fe94
-                                        LIST_PREPEND(items, p->default_items, i);
Zbigniew Jędrzejewski-Szmek 62fe94
+                                        item_append(i, &p->default_items);
Zbigniew Jędrzejewski-Szmek 62fe94
                                 else if (policy_category == POLICY_CATEGORY_MANDATORY)
Zbigniew Jędrzejewski-Szmek 62fe94
-                                        LIST_PREPEND(items, p->mandatory_items, i);
Zbigniew Jędrzejewski-Szmek 62fe94
+                                        item_append(i, &p->mandatory_items);
Zbigniew Jędrzejewski-Szmek 62fe94
                                 else if (policy_category == POLICY_CATEGORY_USER) {
Zbigniew Jędrzejewski-Szmek 62fe94
                                         const char *u = policy_user;
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -355,7 +363,7 @@ static int file_load(Policy *p, const char *path) {
Zbigniew Jędrzejewski-Szmek 62fe94
                                                 PolicyItem *first;
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
                                                 first = hashmap_get(p->user_items, UINT32_TO_PTR(i->uid));
Zbigniew Jędrzejewski-Szmek 62fe94
-                                                LIST_PREPEND(items, first, i);
Zbigniew Jędrzejewski-Szmek 62fe94
+                                                item_append(i, &first);
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
                                                 r = hashmap_replace(p->user_items, UINT32_TO_PTR(i->uid), first);
Zbigniew Jędrzejewski-Szmek 62fe94
                                                 if (r < 0) {
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -386,7 +394,7 @@ static int file_load(Policy *p, const char *path) {
Zbigniew Jędrzejewski-Szmek 62fe94
                                                 PolicyItem *first;
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
                                                 first = hashmap_get(p->group_items, UINT32_TO_PTR(i->gid));
Zbigniew Jędrzejewski-Szmek 62fe94
-                                                LIST_PREPEND(items, first, i);
Zbigniew Jędrzejewski-Szmek 62fe94
+                                                item_append(i, &first);
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
                                                 r = hashmap_replace(p->group_items, UINT32_TO_PTR(i->gid), first);
Zbigniew Jędrzejewski-Szmek 62fe94
                                                 if (r < 0) {