From: Lennart Poettering Date: Wed, 21 Jul 2010 01:13:15 +0000 (+0200) Subject: unit: allow symlinking unit files to /dev/null X-Git-Tag: v4~20 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=8f05424d50045ffd85912e4df36618e8aabd8988 unit: allow symlinking unit files to /dev/null --- diff --git a/fixme b/fixme index 29a6db425..ddb4a6b37 100644 --- 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! diff --git a/src/load-fragment.c b/src/load-fragment.c index 50008101a..cd66b2dd1 100644 --- a/src/load-fragment.c +++ b/src/load-fragment.c @@ -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;