summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2013-03-01 13:54:55 (GMT)
committerLennart Poettering <lennart@poettering.net>2013-03-01 13:54:55 (GMT)
commit487060c2394b7703e59650ef332053645ffae2a3 (patch)
tree486a9e914a633f25a8f7c07ba1cf23d3700615f0
parent3f8ee7918207d7128d4edbc20a1e81f4c6e1110e (diff)
specifier: when resolving specifier strings when loading configuration, don't misunderstand parse failures as OOM
http://lists.freedesktop.org/archives/systemd-devel/2013-February/009179.html
-rw-r--r--TODO2
-rw-r--r--src/core/load-fragment.c57
2 files changed, 37 insertions, 22 deletions
diff --git a/TODO b/TODO
index 2366470..168913b 100644
--- a/TODO
+++ b/TODO
@@ -49,6 +49,8 @@ Fedora 19:
Features:
+* rework specifier logic so that we can distuingish OOM errors from other errors
+
* systemd-inhibit: refuse taking delay locks
* journal-or-kmsg is currently broken? See reverted commit 4a01181e460686d8b4a543b1dfa7f77c9e3c5ab8.
diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c
index d79e1d9..2204c67 100644
--- a/src/core/load-fragment.c
+++ b/src/core/load-fragment.c
@@ -127,9 +127,10 @@ int config_parse_unit_string_printf(
k = unit_full_printf(u, rvalue);
if (!k)
- return log_oom();
+ log_error("[%s:%u] Failed to resolve unit specifiers on %s. Ignoring.",
+ filename, line, rvalue);
- return config_parse_string(filename, line, section, lvalue, ltype, k, data, userdata);
+ return config_parse_string(filename, line, section, lvalue, ltype, k ? k : rvalue, data, userdata);
}
int config_parse_unit_strv_printf(
@@ -152,9 +153,10 @@ int config_parse_unit_strv_printf(
k = unit_full_printf(u, rvalue);
if (!k)
- return log_oom();
+ log_error("[%s:%u] Failed to resolve unit specifiers on %s. Ignoring.",
+ filename, line, rvalue);
- return config_parse_strv(filename, line, section, lvalue, ltype, k, data, userdata);
+ return config_parse_strv(filename, line, section, lvalue, ltype, k ? k : rvalue, data, userdata);
}
int config_parse_unit_path_printf(
@@ -177,9 +179,10 @@ int config_parse_unit_path_printf(
k = unit_full_printf(u, rvalue);
if (!k)
- return log_oom();
+ log_error("[%s:%u] Failed to resolve unit specifiers on %s. Ignoring.",
+ filename, line, rvalue);
- return config_parse_path(filename, line, section, lvalue, ltype, k, data, userdata);
+ return config_parse_path(filename, line, section, lvalue, ltype, k ? k : rvalue, data, userdata);
}
int config_parse_socket_listen(
@@ -217,8 +220,13 @@ int config_parse_socket_listen(
p->type = ltype;
p->path = unit_full_printf(UNIT(s), rvalue);
if (!p->path) {
- free(p);
- return log_oom();
+ p->path = strdup(rvalue);
+ if (!p->path) {
+ free(p);
+ return log_oom();
+ } else
+ log_error("[%s:%u] Failed to resolve unit specifiers on %s. Ignoring.",
+ filename, line, rvalue);
}
path_kill_slashes(p->path);
@@ -229,12 +237,11 @@ int config_parse_socket_listen(
p->type = SOCKET_SOCKET;
k = unit_full_printf(UNIT(s), rvalue);
- if (!k) {
- free(p);
- return log_oom();
- }
+ if (!k)
+ log_error("[%s:%u] Failed to resolve unit specifiers on %s. Ignoring.",
+ filename, line, rvalue);
- r = socket_address_parse_netlink(&p->address, k);
+ r = socket_address_parse_netlink(&p->address, k ? k : rvalue);
if (r < 0) {
log_error("[%s:%u] Failed to parse address value, ignoring: %s", filename, line, rvalue);
free(p);
@@ -247,12 +254,11 @@ int config_parse_socket_listen(
p->type = SOCKET_SOCKET;
k = unit_full_printf(UNIT(s), rvalue);
- if (!k) {
- free(p);
- return log_oom();
- }
+ if (!k)
+ log_error("[%s:%u] Failed to resolve unit specifiers on %s. Ignoring.",
+ filename, line, rvalue);
- r = socket_address_parse(&p->address, k);
+ r = socket_address_parse(&p->address, k ? k : rvalue);
if (r < 0) {
log_error("[%s:%u] Failed to parse address value, ignoring: %s", filename, line, rvalue);
free(p);
@@ -995,9 +1001,10 @@ int config_parse_unit_cgroup(
k = unit_full_printf(u, t);
if (!k)
- return log_oom();
+ log_error("[%s:%u] Failed to resolve unit specifiers on %s. Ignoring.",
+ filename, line, t);
- ku = cunescape(k);
+ ku = cunescape(k ? k : t);
if (!ku)
return log_oom();
@@ -1284,8 +1291,14 @@ int config_parse_path_spec(
}
k = unit_full_printf(UNIT(p), rvalue);
- if (!k)
- return log_oom();
+ if (!k) {
+ k = strdup(rvalue);
+ if (!k)
+ return log_oom();
+ else
+ log_error("[%s:%u] Failed to resolve unit specifiers on %s. Ignoring.",
+ filename, line, rvalue);
+ }
if (!path_is_absolute(k)) {
log_error("[%s:%u] Path is not absolute, ignoring: %s", filename, line, k);