chiark / gitweb /
bus-proxy: read the right policy when running in user mode
[elogind.git] / src / bus-proxyd / bus-policy.c
index 053495cebe7c13a8ea98e26a6bb5c2b181838935..2234e7af3a6619a5f103af1484f07ddefa6fe0aa 100644 (file)
@@ -83,6 +83,8 @@ static int file_load(Policy *p, const char *path) {
         if (r < 0) {
                 if (r == -ENOENT)
                         return 0;
+                if (r == -EISDIR)
+                        return r;
 
                 log_error("Failed to load %s: %s", path, strerror(-r));
                 return r;
@@ -513,24 +515,31 @@ static int file_load(Policy *p, const char *path) {
         }
 }
 
-int policy_load(Policy *p) {
-        _cleanup_strv_free_ char **l = NULL;
+int policy_load(Policy *p, char **files) {
         char **i;
         int r;
 
         assert(p);
 
-        file_load(p, "/etc/dbus-1/system.conf");
-        file_load(p, "/etc/dbus-1/system-local.conf");
+        STRV_FOREACH(i, files) {
 
-        r = conf_files_list(&l, ".conf", NULL, "/etc/dbus-1/system.d/", NULL);
-        if (r < 0) {
-                log_error("Failed to get configuration file list: %s", strerror(-r));
-                return r;
-        }
+                r = file_load(p, *i);
+                if (r == -EISDIR) {
+                        _cleanup_strv_free_ char **l = NULL;
+                        char **j;
+
+                        r = conf_files_list(&l, ".conf", NULL, *i, NULL);
+                        if (r < 0) {
+                                log_error("Failed to get configuration file list: %s", strerror(-r));
+                                return r;
+                        }
+
+                        STRV_FOREACH(j, l)
+                                file_load(p, *j);
+                }
 
-        STRV_FOREACH(i, l)
-                file_load(p, *i);
+                /* We ignore all errors but EISDIR, and just proceed. */
+        }
 
         return 0;
 }
@@ -644,16 +653,16 @@ static void dump_hashmap_items(Hashmap *h) {
 
 noreturn void policy_dump(Policy *p) {
 
-        printf("→ Default Items:\n");
+        printf("%s Default Items:\n", draw_special_char(DRAW_ARROW));
         dump_items(p->default_items);
 
-        printf("→ Mandatory Items:\n");
+        printf("%s Mandatory Items:\n", draw_special_char(DRAW_ARROW));
         dump_items(p->mandatory_items);
 
-        printf("→ Group Items:\n");
+        printf("%s Group Items:\n", draw_special_char(DRAW_ARROW));
         dump_hashmap_items(p->group_items);
 
-        printf("→ User Items:\n");
+        printf("%s User Items:\n", draw_special_char(DRAW_ARROW));
         dump_hashmap_items(p->user_items);
         exit(0);
 }