X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fload-fragment.c;h=1f082d57b3b78213aaad9872a22538c648f029e7;hb=3ba686c107b2b33e706f59432584875a4152d19a;hp=79b0893addef64adcf7500a20fbbd3e68a933381;hpb=84e3543ef4c4758621f8a304b14642072303ef82;p=elogind.git diff --git a/src/load-fragment.c b/src/load-fragment.c index 79b0893ad..1f082d57b 100644 --- a/src/load-fragment.c +++ b/src/load-fragment.c @@ -1160,7 +1160,7 @@ static int open_follow(char **filename, FILE **_f, Set *names, char **_final) { * reached by a symlink. The old string will be freed. */ for (;;) { - char *target, *k, *name; + char *target, *name; if (c++ >= FOLLOW_MAX) return -ELOOP; @@ -1189,17 +1189,11 @@ static int open_follow(char **filename, FILE **_f, Set *names, char **_final) { return -errno; /* Hmm, so this is a symlink. Let's read the name, and follow it manually */ - if ((r = readlink_malloc(*filename, &target)) < 0) + if ((r = readlink_and_make_absolute(*filename, &target)) < 0) return r; - k = file_in_same_dir(*filename, target); - free(target); - - if (!k) - return -ENOMEM; - free(*filename); - *filename = k; + *filename = target; } if (!(f = fdopen(fd, "r"))) { @@ -1397,7 +1391,9 @@ static int load_from_path(Unit *u, const char *path) { { "ReadOnlyDirectories", config_parse_path_strv, &(context).read_only_dirs, section }, \ { "InaccessibleDirectories",config_parse_path_strv, &(context).inaccessible_dirs, section }, \ { "PrivateTmp", config_parse_bool, &(context).private_tmp, section }, \ - { "MountFlags", config_parse_mount_flags, &(context), section } + { "MountFlags", config_parse_mount_flags, &(context), section }, \ + { "TCPWrapName", config_parse_string, &(context).tcpwrap_name, section }, \ + { "PAMName", config_parse_string, &(context).pam_name, section } const ConfigItem items[] = { { "Names", config_parse_names, u, "Unit" }, @@ -1477,12 +1473,17 @@ static int load_from_path(Unit *u, const char *path) { { "DirectoryNotEmpty", config_parse_path_spec, &u->path, "Path" }, { "Unit", config_parse_path_unit, &u->path, "Path" }, + /* The [Install] section is ignored here. */ + { "Alias", NULL, NULL, "Install" }, + { "WantedBy", NULL, NULL, "Install" }, + { "Also", NULL, NULL, "Install" }, + { NULL, NULL, NULL, NULL } }; #undef EXEC_CONTEXT_CONFIG_ITEMS - const char *sections[3]; + const char *sections[4]; int r; Set *symlink_names; FILE *f = NULL; @@ -1500,7 +1501,8 @@ static int load_from_path(Unit *u, const char *path) { sections[0] = "Unit"; sections[1] = section_table[u->meta.type]; - sections[2] = NULL; + sections[2] = "Install"; + sections[3] = NULL; if (!(symlink_names = set_new(string_hash_func, string_compare_func))) return -ENOMEM; @@ -1569,7 +1571,7 @@ static int load_from_path(Unit *u, const char *path) { } /* Now, parse the file contents */ - if ((r = config_parse(filename, f, sections, items, u)) < 0) + if ((r = config_parse(filename, f, sections, items, false, u)) < 0) goto finish; free(u->meta.fragment_path);