X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fsysv-generator%2Fsysv-generator.c;h=3279c7f44482ef6f0e2ead2a17b25e4de985df8f;hp=a47b0722e0aa50a5afe894dfff2c7e669696dadc;hb=77354c7e6f096a447245a8781c1eaa4acbe67089;hpb=d816e2b7909e50ee887e1a0a825db760cf6fd3b0 diff --git a/src/sysv-generator/sysv-generator.c b/src/sysv-generator/sysv-generator.c index a47b0722e..3279c7f44 100644 --- a/src/sysv-generator/sysv-generator.c +++ b/src/sysv-generator/sysv-generator.c @@ -147,6 +147,7 @@ static int generate_unit_file(SysvStub *s) { _cleanup_free_ char *wants = NULL; _cleanup_free_ char *conflicts = NULL; int r; + struct stat st; before = strv_join(s->before, " "); if (!before) @@ -168,6 +169,14 @@ static int generate_unit_file(SysvStub *s) { if (!unit) return log_oom(); + /* We might already have a symlink with the same name from a Provides:, + * or from backup files like /etc/init.d/foo.bak. Real scripts always win, + * so remove an existing link */ + if (lstat(unit, &st) == 0 && S_ISLNK(st.st_mode)) { + log_warning("Overwriting existing symlink %s with real service", unit); + unlink(unit); + } + f = fopen(unit, "wxe"); if (!f) return log_error_errno(errno, "Failed to create unit file %s: %m", unit); @@ -343,6 +352,8 @@ static int load_sysv(SysvStub *s) { if (!f) return errno == ENOENT ? 0 : -errno; + log_debug("Loading SysV script %s", s->path); + while (!feof(f)) { char l[LINE_MAX], *t; @@ -492,6 +503,7 @@ static int load_sysv(SysvStub *s) { continue; if (unit_name_to_type(m) == UNIT_SERVICE) { + log_debug("Adding Provides: alias '%s' for '%s'", m, s->name); r = add_alias(s->name, m); } else { /* NB: SysV targets