From bcd816bd349241bcd9c0bfbfd9cfe7b034ba351b Mon Sep 17 00:00:00 2001
From: Lennart Poettering <lennart@poettering.net>
Date: Thu, 22 May 2014 16:49:12 +0900
Subject: [PATCH] core: never consider failure when reading drop-ins fatal

drop-ins don't carry the main configuration of a unit, hence read them
if we can't, complain if we cannot, but don't fail.
---
 src/core/load-dropin.c |   42 +++++++++++++-----------------------------
 1 file changed, 13 insertions(+), 29 deletions(-)

Index: src/core/load-dropin.c
===================================================================
--- src/core/load-dropin.c.orig
+++ src/core/load-dropin.c
@@ -58,6 +58,7 @@ static int iterate_dir(
                 if (errno == ENOENT)
                         return 0;
 
+                log_error("Failed to open directory %s: %m", path);
                 return -errno;
         }
 
@@ -101,7 +102,6 @@ static int process_dir(
                 char ***strv) {
 
         _cleanup_free_ char *path = NULL;
-        int r;
 
         assert(u);
         assert(unit_path);
@@ -112,11 +112,8 @@ static int process_dir(
         if (!path)
                 return log_oom();
 
-        if (!u->manager->unit_path_cache || set_get(u->manager->unit_path_cache, path)) {
-                r = iterate_dir(u, path, dependency, strv);
-                if (r < 0)
-                        return r;
-        }
+        if (!u->manager->unit_path_cache || set_get(u->manager->unit_path_cache, path))
+                iterate_dir(u, path, dependency, strv);
 
         if (u->instance) {
                 _cleanup_free_ char *template = NULL, *p = NULL;
@@ -130,11 +127,8 @@ static int process_dir(
                 if (!p)
                         return log_oom();
 
-                if (!u->manager->unit_path_cache || set_get(u->manager->unit_path_cache, p)) {
-                        r = iterate_dir(u, p, dependency, strv);
-                        if (r < 0)
-                                return r;
-                }
+                if (!u->manager->unit_path_cache || set_get(u->manager->unit_path_cache, p))
+                        iterate_dir(u, p, dependency, strv);
         }
 
         return 0;
@@ -152,12 +146,8 @@ char **unit_find_dropin_paths(Unit *u) {
         SET_FOREACH(t, u->names, i) {
                 char **p;
 
-                STRV_FOREACH(p, u->manager->lookup_paths.unit_path) {
-                        /* This loads the drop-in config snippets */
-                        r = process_dir(u, *p, t, ".d", _UNIT_DEPENDENCY_INVALID, &strv);
-                        if (r < 0)
-                                return NULL;
-                }
+                STRV_FOREACH(p, u->manager->lookup_paths.unit_path)
+                        process_dir(u, *p, t, ".d", _UNIT_DEPENDENCY_INVALID, &strv);
         }
 
         if (strv_isempty(strv))
@@ -176,7 +166,6 @@ char **unit_find_dropin_paths(Unit *u) {
 int unit_load_dropin(Unit *u) {
         Iterator i;
         char *t, **f;
-        int r;
 
         assert(u);
 
@@ -186,13 +175,8 @@ int unit_load_dropin(Unit *u) {
                 char **p;
 
                 STRV_FOREACH(p, u->manager->lookup_paths.unit_path) {
-                        r = process_dir(u, *p, t, ".wants", UNIT_WANTS, NULL);
-                        if (r < 0)
-                                return r;
-
-                        r = process_dir(u, *p, t, ".requires", UNIT_REQUIRES, NULL);
-                        if (r < 0)
-                                return r;
+                        process_dir(u, *p, t, ".wants", UNIT_WANTS, NULL);
+                        process_dir(u, *p, t, ".requires", UNIT_REQUIRES, NULL);
                 }
         }
 
@@ -201,11 +185,9 @@ int unit_load_dropin(Unit *u) {
                 return 0;
 
         STRV_FOREACH(f, u->dropin_paths) {
-                r = config_parse(u->id, *f, NULL,
-                                 UNIT_VTABLE(u)->sections, config_item_perf_lookup,
-                                 (void*) load_fragment_gperf_lookup, false, false, u);
-                if (r < 0)
-                        return r;
+                config_parse(u->id, *f, NULL,
+                             UNIT_VTABLE(u)->sections, config_item_perf_lookup,
+                             (void*) load_fragment_gperf_lookup, false, false, u);
         }
 
         u->dropin_mtime = now(CLOCK_REALTIME);
