From 264581a2f1599a27de577549dc75fccefef6a579 Mon Sep 17 00:00:00 2001 From: Felipe Sateler Date: Sat, 27 Jun 2015 21:00:32 -0300 Subject: sysv-generator: escape names when translating from sysv name While the LSB suggests only [A-Za-z0-9], that doesn't prevent admins from doing the wrong thing. Lets not generate invalid names in that case. --- src/sysv-generator/sysv-generator.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) (limited to 'src/sysv-generator/sysv-generator.c') diff --git a/src/sysv-generator/sysv-generator.c b/src/sysv-generator/sysv-generator.c index c9dd3b6302..0d246b1835 100644 --- a/src/sysv-generator/sysv-generator.c +++ b/src/sysv-generator/sysv-generator.c @@ -241,19 +241,21 @@ static bool usage_contains_reload(const char *line) { static char *sysv_translate_name(const char *name) { char *r; + _cleanup_free_ char *c; - r = new(char, strlen(name) + strlen(".service") + 1); - if (!r) - return NULL; + c = strdup(name); + if (!c) + return NULL; - if (endswith(name, ".sh")) - /* Drop .sh suffix */ - strcpy(stpcpy(r, name) - 3, ".service"); - else - /* Normal init script name */ - strcpy(stpcpy(r, name), ".service"); + r = endswith(c, ".sh"); + if (r) { + *r = '\0'; + } - return r; + if (unit_name_mangle(c, UNIT_NAME_NOGLOB, &r) >= 0) + return r; + else + return NULL; } static int sysv_translate_facility(const char *name, const char *filename, char **_r) { -- cgit v1.2.3-54-g00ecf