summaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
authorNicolas Braud-Santoni <nicolas@braud-santoni.eu>2016-04-12 18:00:19 +0200
committerLennart Poettering <lennart@poettering.net>2016-04-12 18:00:19 +0200
commit1116e14c49ac1291eb5e46fcf5e691ef57267b54 (patch)
treed352d07bbd52cdf7029ad2dca4c65b87e8c47cce /src/core
parent1ade1cc0bfde6171e9142ec8ed6d2c3492367b7d (diff)
load-fragment: Resolve specifiers in DeviceAllow (#3019)
Closes #1602
Diffstat (limited to 'src/core')
-rw-r--r--src/core/load-fragment.c19
1 files changed, 14 insertions, 5 deletions
diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c
index f1a874cfdf..a54f0d764c 100644
--- a/src/core/load-fragment.c
+++ b/src/core/load-fragment.c
@@ -2847,11 +2847,12 @@ int config_parse_device_allow(
void *data,
void *userdata) {
- _cleanup_free_ char *path = NULL;
+ _cleanup_free_ char *path = NULL, *t = NULL;
CGroupContext *c = data;
CGroupDeviceAllow *a;
- const char *m;
+ const char *m = NULL;
size_t n;
+ int r;
if (isempty(rvalue)) {
while (c->device_allow)
@@ -2860,8 +2861,16 @@ int config_parse_device_allow(
return 0;
}
- n = strcspn(rvalue, WHITESPACE);
- path = strndup(rvalue, n);
+ r = unit_full_printf(userdata, rvalue, &t);
+ if(r < 0) {
+ log_syntax(unit, LOG_WARNING, filename, line, r,
+ "Failed to resolve specifiers in %s, ignoring: %m",
+ rvalue);
+ }
+
+ n = strcspn(t, WHITESPACE);
+
+ path = strndup(t, n);
if (!path)
return log_oom();
@@ -2872,7 +2881,7 @@ int config_parse_device_allow(
return 0;
}
- m = rvalue + n + strspn(rvalue + n, WHITESPACE);
+ m = t + n + strspn(t + n, WHITESPACE);
if (isempty(m))
m = "rwm";