From 5f7c426e2a7f72c473f98be9978d243db79d8910 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 5 Jan 2011 16:06:35 +0100 Subject: fragment: properly handle quotes in assignments in EnvironmentFile= files --- src/util.c | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) (limited to 'src/util.c') diff --git a/src/util.c b/src/util.c index 08bdec223e..21afdceb8c 100644 --- a/src/util.c +++ b/src/util.c @@ -3326,6 +3326,44 @@ char *unquote(const char *s, const char* quotes) { return strdup(s); } +char *normalize_env_assignment(const char *s) { + char *name, *value, *p, *r; + + p = strchr(s, '='); + + if (!p) { + if (!(r = strdup(s))) + return NULL; + + return strstrip(r); + } + + if (!(name = strndup(s, p - s))) + return NULL; + + if (!(p = strdup(p+1))) { + free(name); + return NULL; + } + + value = unquote(strstrip(p), QUOTES); + free(p); + + if (!value) { + free(p); + free(name); + return NULL; + } + + if (asprintf(&r, "%s=%s", name, value) < 0) + r = NULL; + + free(value); + free(name); + + return r; +} + int wait_for_terminate(pid_t pid, siginfo_t *status) { assert(pid >= 1); assert(status); -- cgit v1.2.3-54-g00ecf