chiark / gitweb /
unit: allow symlinking unit files to /dev/null
authorLennart Poettering <lennart@poettering.net>
Wed, 21 Jul 2010 01:13:15 +0000 (03:13 +0200)
committerLennart Poettering <lennart@poettering.net>
Wed, 21 Jul 2010 01:13:15 +0000 (03:13 +0200)
fixme
src/load-fragment.c

diff --git a/fixme b/fixme
index 29a6db425edb9c63e881030a28732c5f745caecf..ddb4a6b37afd429130a91d4cbc18ed7127edbdb2 100644 (file)
--- a/fixme
+++ b/fixme
@@ -35,8 +35,6 @@
 
 * systemctl status $PID, systemctl stop $PID!
 
-/dev/null symlinks supporten
-
 * place /etc/inittab with explaining blurb.
 
 * /etc must always take precedence even if we follow symlinks!
index 50008101a1d2e81c2d594166d41df27ef8cad4a5..cd66b2dd141bfd2d5ff190bb888097d646af9a86 100644 (file)
@@ -1312,16 +1312,20 @@ static int open_follow(char **filename, FILE **_f, Set *names, char **_final) {
                 path_kill_slashes(*filename);
 
                 /* Add the file name we are currently looking at to
-                 * the names of this unit */
+                 * the names of this unit, but only if it is a valid
+                 * unit name. */
                 name = file_name_from_path(*filename);
-                if (!(id = set_get(names, name))) {
 
-                        if (!(id = strdup(name)))
-                                return -ENOMEM;
+                if (unit_name_is_valid(name)) {
+                        if (!(id = set_get(names, name))) {
 
-                        if ((r = set_put(names, id)) < 0) {
-                                free(id);
-                                return r;
+                                if (!(id = strdup(name)))
+                                        return -ENOMEM;
+
+                                if ((r = set_put(names, id)) < 0) {
+                                        free(id);
+                                        return r;
+                                }
                         }
                 }
 
@@ -1340,7 +1344,7 @@ static int open_follow(char **filename, FILE **_f, Set *names, char **_final) {
                 *filename = target;
         }
 
-        if (!(f = fdopen(fd, "r"))) {
+        if (!(f = fdopen(fd, "re"))) {
                 r = -errno;
                 close_nointr_nofail(fd);
                 return r;
@@ -1730,6 +1734,7 @@ static int load_from_path(Unit *u, const char *path) {
         }
 
         if (!filename) {
+                /* Hmm, no suitable file found? */
                 r = 0;
                 goto finish;
         }
@@ -1750,11 +1755,6 @@ static int load_from_path(Unit *u, const char *path) {
                 goto finish;
         }
 
-        if (!S_ISREG(st.st_mode)) {
-                r = -ENOENT;
-                goto finish;
-        }
-
         /* Now, parse the file contents */
         if ((r = config_parse(filename, f, sections, items, false, u)) < 0)
                 goto finish;