X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fload-fragment.c;h=cd66b2dd141bfd2d5ff190bb888097d646af9a86;hp=50008101a1d2e81c2d594166d41df27ef8cad4a5;hb=8f05424d50045ffd85912e4df36618e8aabd8988;hpb=c24eb49e6aecd6de2ad450083e826d4c9d9c75b6 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;