summaryrefslogtreecommitdiff
path: root/src/sysv-generator/sysv-generator.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/sysv-generator/sysv-generator.c')
-rw-r--r--src/sysv-generator/sysv-generator.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/sysv-generator/sysv-generator.c b/src/sysv-generator/sysv-generator.c
index a47b0722e0..3279c7f444 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