mirror of
https://github.com/systemd/systemd.git
synced 2025-03-22 06:50:18 +03:00
load-fragment: use path_simplify_and_warn() where applicable
This commit is contained in:
parent
cd4f53c5b5
commit
2f4d31c117
@ -314,18 +314,9 @@ int config_parse_unit_path_strv_printf(
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!utf8_is_valid(k)) {
|
||||
log_syntax_invalid_utf8(unit, LOG_ERR, filename, line, rvalue);
|
||||
r = path_simplify_and_warn(k, PATH_CHECK_ABSOLUTE, unit, filename, line, lvalue);
|
||||
if (r < 0)
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!path_is_absolute(k)) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0,
|
||||
"Symlink path is not absolute: %s", k);
|
||||
return 0;
|
||||
}
|
||||
|
||||
path_simplify(k, false);
|
||||
|
||||
r = strv_push(x, k);
|
||||
if (r < 0)
|
||||
@ -368,20 +359,24 @@ int config_parse_socket_listen(const char *unit,
|
||||
return log_oom();
|
||||
|
||||
if (ltype != SOCKET_SOCKET) {
|
||||
_cleanup_free_ char *k = NULL;
|
||||
|
||||
p->type = ltype;
|
||||
r = unit_full_printf(UNIT(s), rvalue, &p->path);
|
||||
r = unit_full_printf(UNIT(s), rvalue, &k);
|
||||
if (r < 0) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, r, "Failed to resolve unit specifiers in '%s', ignoring: %m", rvalue);
|
||||
return 0;
|
||||
}
|
||||
|
||||
path_simplify(p->path, false);
|
||||
r = path_simplify_and_warn(k, PATH_CHECK_ABSOLUTE, unit, filename, line, lvalue);
|
||||
if (r < 0)
|
||||
return 0;
|
||||
|
||||
free_and_replace(p->path, k);
|
||||
p->type = ltype;
|
||||
|
||||
} else if (streq(lvalue, "ListenNetlink")) {
|
||||
_cleanup_free_ char *k = NULL;
|
||||
|
||||
p->type = SOCKET_SOCKET;
|
||||
r = unit_full_printf(UNIT(s), rvalue, &k);
|
||||
if (r < 0) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, r, "Failed to resolve unit specifiers in '%s', ignoring: %m", rvalue);
|
||||
@ -394,10 +389,11 @@ int config_parse_socket_listen(const char *unit,
|
||||
return 0;
|
||||
}
|
||||
|
||||
p->type = SOCKET_SOCKET;
|
||||
|
||||
} else {
|
||||
_cleanup_free_ char *k = NULL;
|
||||
|
||||
p->type = SOCKET_SOCKET;
|
||||
r = unit_full_printf(UNIT(s), rvalue, &k);
|
||||
if (r < 0) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, r, "Failed to resolve unit specifiers in '%s', ignoring: %m", rvalue);
|
||||
@ -424,6 +420,8 @@ int config_parse_socket_listen(const char *unit,
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0, "Address family not supported, ignoring: %s", rvalue);
|
||||
return 0;
|
||||
}
|
||||
|
||||
p->type = SOCKET_SOCKET;
|
||||
}
|
||||
|
||||
p->fd = -1;
|
||||
@ -837,15 +835,9 @@ int config_parse_exec_input(
|
||||
if (r < 0)
|
||||
return log_syntax(unit, LOG_ERR, filename, line, r, "Failed to resolve unit specifiers in '%s': %m", n);
|
||||
|
||||
if (!path_is_absolute(resolved)) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0, "file: requires an absolute path name: %s", resolved);
|
||||
r = path_simplify_and_warn(resolved, PATH_CHECK_ABSOLUTE | PATH_CHECK_FATAL, unit, filename, line, lvalue);
|
||||
if (r < 0)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (!path_is_normalized(resolved)) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0, "file: requires a normalized path name: %s", resolved);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
free_and_replace(c->stdio_file[STDIN_FILENO], resolved);
|
||||
|
||||
@ -1021,15 +1013,9 @@ int config_parse_exec_output(
|
||||
if (r < 0)
|
||||
return log_syntax(unit, LOG_ERR, filename, line, r, "Failed to resolve unit specifiers in %s: %m", n);
|
||||
|
||||
if (!path_is_absolute(resolved)) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0, "file: requires an absolute path name: %s", resolved);
|
||||
r = path_simplify_and_warn(resolved, PATH_CHECK_ABSOLUTE | PATH_CHECK_FATAL, unit, filename, line, lvalue);
|
||||
if (r < 0)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (!path_is_normalized(resolved)) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0, "file: requires a normalized path name, ignoring: %s", resolved);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
eo = EXEC_OUTPUT_FILE;
|
||||
|
||||
@ -1624,12 +1610,9 @@ int config_parse_path_spec(const char *unit,
|
||||
return 0;
|
||||
}
|
||||
|
||||
path_simplify(k, false);
|
||||
|
||||
if (!path_is_absolute(k)) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0, "Path is not absolute, ignoring: %s", k);
|
||||
r = path_simplify_and_warn(k, PATH_CHECK_ABSOLUTE, unit, filename, line, lvalue);
|
||||
if (r < 0)
|
||||
return 0;
|
||||
}
|
||||
|
||||
s = new0(PathSpec, 1);
|
||||
if (!s)
|
||||
@ -2048,19 +2031,9 @@ int config_parse_working_directory(
|
||||
return missing_ok ? 0 : -ENOEXEC;
|
||||
}
|
||||
|
||||
path_simplify(k, false);
|
||||
|
||||
if (!utf8_is_valid(k)) {
|
||||
log_syntax_invalid_utf8(unit, LOG_ERR, filename, line, rvalue);
|
||||
r = path_simplify_and_warn(k, PATH_CHECK_ABSOLUTE | (missing_ok ? 0 : PATH_CHECK_FATAL), unit, filename, line, lvalue);
|
||||
if (r < 0)
|
||||
return missing_ok ? 0 : -ENOEXEC;
|
||||
}
|
||||
|
||||
if (!path_is_absolute(k)) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0,
|
||||
"Working directory path '%s' is not absolute%s.",
|
||||
rvalue, missing_ok ? ", ignoring" : "");
|
||||
return missing_ok ? 0 : -ENOEXEC;
|
||||
}
|
||||
|
||||
c->working_directory_home = false;
|
||||
free_and_replace(c->working_directory, k);
|
||||
@ -2103,15 +2076,16 @@ int config_parse_unit_env_file(const char *unit,
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!path_is_absolute(n[0] == '-' ? n + 1 : n)) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0, "Path '%s' is not absolute, ignoring.", n);
|
||||
r = path_simplify_and_warn(n[0] == '-' ? n + 1 : n, PATH_CHECK_ABSOLUTE, unit, filename, line, lvalue);
|
||||
if (r < 0)
|
||||
return 0;
|
||||
}
|
||||
|
||||
r = strv_extend(env, n);
|
||||
r = strv_push(env, n);
|
||||
if (r < 0)
|
||||
return log_oom();
|
||||
|
||||
n = NULL;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -2447,10 +2421,9 @@ int config_parse_unit_condition_path(
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!path_is_absolute(p)) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0, "Path in condition not absolute, ignoring: %s", p);
|
||||
r = path_simplify_and_warn(p, PATH_CHECK_ABSOLUTE, unit, filename, line, lvalue);
|
||||
if (r < 0)
|
||||
return 0;
|
||||
}
|
||||
|
||||
c = condition_new(t, p, trigger, negate);
|
||||
if (!c)
|
||||
@ -2599,17 +2572,16 @@ int config_parse_unit_requires_mounts_for(
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!utf8_is_valid(word)) {
|
||||
log_syntax_invalid_utf8(unit, LOG_ERR, filename, line, rvalue);
|
||||
continue;
|
||||
}
|
||||
|
||||
r = unit_full_printf(u, word, &resolved);
|
||||
if (r < 0) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, r, "Failed to resolve unit specifiers in '%s', ignoring: %m", word);
|
||||
continue;
|
||||
}
|
||||
|
||||
r = path_simplify_and_warn(resolved, PATH_CHECK_ABSOLUTE, unit, filename, line, lvalue);
|
||||
if (r < 0)
|
||||
continue;
|
||||
|
||||
r = unit_require_mounts_for(u, resolved, UNIT_DEPENDENCY_FILE);
|
||||
if (r < 0) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, r, "Failed to add required mount '%s', ignoring: %m", resolved);
|
||||
@ -3263,6 +3235,10 @@ int config_parse_device_allow(
|
||||
return 0;
|
||||
}
|
||||
|
||||
r = path_simplify_and_warn(resolved, 0, unit, filename, line, lvalue);
|
||||
if (r < 0)
|
||||
return 0;
|
||||
|
||||
if (!is_deviceallow_pattern(resolved) &&
|
||||
!path_startswith(resolved, "/run/systemd/inaccessible/")) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0, "Invalid device node path '%s', ignoring.", resolved);
|
||||
@ -3338,6 +3314,10 @@ int config_parse_io_device_weight(
|
||||
return 0;
|
||||
}
|
||||
|
||||
r = path_simplify_and_warn(resolved, 0, unit, filename, line, lvalue);
|
||||
if (r < 0)
|
||||
return 0;
|
||||
|
||||
if (!path_startswith(resolved, "/dev") &&
|
||||
!path_startswith(resolved, "/run/systemd/inaccessible/")) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0, "Invalid device node path '%s', ignoring.", resolved);
|
||||
@ -3417,6 +3397,10 @@ int config_parse_io_limit(
|
||||
return 0;
|
||||
}
|
||||
|
||||
r = path_simplify_and_warn(resolved, 0, unit, filename, line, lvalue);
|
||||
if (r < 0)
|
||||
return 0;
|
||||
|
||||
if (!path_startswith(resolved, "/dev") &&
|
||||
!path_startswith(resolved, "/run/systemd/inaccessible/")) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0, "Invalid device node path '%s', ignoring.", resolved);
|
||||
@ -3510,6 +3494,10 @@ int config_parse_blockio_device_weight(
|
||||
return 0;
|
||||
}
|
||||
|
||||
r = path_simplify_and_warn(resolved, 0, unit, filename, line, lvalue);
|
||||
if (r < 0)
|
||||
return 0;
|
||||
|
||||
if (!path_startswith(resolved, "/dev") &&
|
||||
!path_startswith(resolved, "/run/systemd/inaccessible/")) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0, "Invalid device node path '%s'. Ignoring.", resolved);
|
||||
@ -3590,6 +3578,10 @@ int config_parse_blockio_bandwidth(
|
||||
return 0;
|
||||
}
|
||||
|
||||
r = path_simplify_and_warn(resolved, 0, unit, filename, line, lvalue);
|
||||
if (r < 0)
|
||||
return 0;
|
||||
|
||||
if (!path_startswith(resolved, "/dev") &&
|
||||
!path_startswith(resolved, "/run/systemd/inaccessible/")) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0, "Invalid device node path '%s', ignoring.", resolved);
|
||||
@ -3709,21 +3701,13 @@ int config_parse_exec_directories(
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!path_is_normalized(k)) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0,
|
||||
"%s= path is not normalized, ignoring assignment: %s", lvalue, rvalue);
|
||||
r = path_simplify_and_warn(k, PATH_CHECK_RELATIVE, unit, filename, line, lvalue);
|
||||
if (r < 0)
|
||||
continue;
|
||||
}
|
||||
|
||||
if (path_is_absolute(k)) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0,
|
||||
"%s= path is absolute, ignoring assignment: %s", lvalue, rvalue);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (path_startswith(k, "private")) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0,
|
||||
"%s= path can't be 'private', ingoring assignment: %s", lvalue, rvalue);
|
||||
"%s= path can't be 'private', ingoring assignment: %s", lvalue, word);
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -3866,12 +3850,9 @@ int config_parse_namespace_path_strv(
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!path_is_absolute(resolved)) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0, "Not an absolute path, ignoring: %s", resolved);
|
||||
r = path_simplify_and_warn(resolved, PATH_CHECK_ABSOLUTE, unit, filename, line, lvalue);
|
||||
if (r < 0)
|
||||
continue;
|
||||
}
|
||||
|
||||
path_simplify(resolved, false);
|
||||
|
||||
joined = strjoin(ignore_enoent ? "-" : "",
|
||||
shall_prefix ? "+" : "",
|
||||
@ -3950,12 +3931,9 @@ int config_parse_temporary_filesystems(
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!path_is_absolute(resolved)) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0, "Not an absolute path, ignoring: %s", resolved);
|
||||
r = path_simplify_and_warn(resolved, PATH_CHECK_ABSOLUTE, unit, filename, line, lvalue);
|
||||
if (r < 0)
|
||||
continue;
|
||||
}
|
||||
|
||||
path_simplify(resolved, false);
|
||||
|
||||
r = temporary_filesystem_add(&c->temporary_filesystems, &c->n_temporary_filesystems, path, w);
|
||||
if (r == -ENOMEM)
|
||||
@ -4010,7 +3988,7 @@ int config_parse_bind_paths(
|
||||
if (r == -ENOMEM)
|
||||
return log_oom();
|
||||
if (r < 0) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, r, "Failed to parse %s: %s", lvalue, rvalue);
|
||||
log_syntax(unit, LOG_ERR, filename, line, r, "Failed to parse %s, ignoring: %s", lvalue, rvalue);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -4018,7 +3996,7 @@ int config_parse_bind_paths(
|
||||
if (r < 0) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, r,
|
||||
"Failed to resolved unit specifiers in \"%s\", ignoring: %m", source);
|
||||
return 0;
|
||||
continue;
|
||||
}
|
||||
|
||||
s = sresolved;
|
||||
@ -4027,16 +4005,9 @@ int config_parse_bind_paths(
|
||||
s++;
|
||||
}
|
||||
|
||||
if (!utf8_is_valid(s)) {
|
||||
log_syntax_invalid_utf8(unit, LOG_ERR, filename, line, s);
|
||||
return 0;
|
||||
}
|
||||
if (!path_is_absolute(s)) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0, "Not an absolute source path, ignoring: %s", s);
|
||||
return 0;
|
||||
}
|
||||
|
||||
path_simplify(s, false);
|
||||
r = path_simplify_and_warn(s, PATH_CHECK_ABSOLUTE, unit, filename, line, lvalue);
|
||||
if (r < 0)
|
||||
continue;
|
||||
|
||||
/* Optionally, the destination is specified. */
|
||||
if (p && p[-1] == ':') {
|
||||
@ -4044,31 +4015,26 @@ int config_parse_bind_paths(
|
||||
if (r == -ENOMEM)
|
||||
return log_oom();
|
||||
if (r < 0) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, r, "Failed to parse %s: %s", lvalue, rvalue);
|
||||
log_syntax(unit, LOG_ERR, filename, line, r, "Failed to parse %s, ignoring: %s", lvalue, rvalue);
|
||||
return 0;
|
||||
}
|
||||
if (r == 0) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0, "Missing argument after ':': %s", rvalue);
|
||||
return 0;
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0, "Missing argument after ':', ignoring: %s", s);
|
||||
continue;
|
||||
}
|
||||
|
||||
r = unit_full_printf(u, destination, &dresolved);
|
||||
if (r < 0) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, r,
|
||||
"Failed to resolved specifiers in \"%s\", ignoring: %m", destination);
|
||||
return 0;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!utf8_is_valid(dresolved)) {
|
||||
log_syntax_invalid_utf8(unit, LOG_ERR, filename, line, dresolved);
|
||||
return 0;
|
||||
}
|
||||
if (!path_is_absolute(dresolved)) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0, "Not an absolute destination path, ignoring: %s", dresolved);
|
||||
return 0;
|
||||
}
|
||||
r = path_simplify_and_warn(dresolved, PATH_CHECK_ABSOLUTE, unit, filename, line, lvalue);
|
||||
if (r < 0)
|
||||
continue;
|
||||
|
||||
d = path_simplify(dresolved, false);
|
||||
d = dresolved;
|
||||
|
||||
/* Optionally, there's also a short option string specified */
|
||||
if (p && p[-1] == ':') {
|
||||
@ -4088,7 +4054,7 @@ int config_parse_bind_paths(
|
||||
rbind = false;
|
||||
else {
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0, "Invalid option string, ignoring setting: %s", options);
|
||||
return 0;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
} else
|
||||
|
Loading…
x
Reference in New Issue
Block a user