Commit 7024b511 authored by Martin Pitt's avatar Martin Pitt
Browse files

sysv-generator: handle Provides: for non-virtual facility names

Patch cherry-picked from upstream git.

Closes: #774335
parent 78d97ace
......@@ -13,6 +13,10 @@ systemd (215-9) UNRELEASED; urgency=medium
* Don't auto-clean PrivateTmp dir in /var/tmp; in Debian we don't want to
clean /var/tmp/ automatically. (Closes: #773313)
[ Michael Biebl ]
* sysv-generator: handle Provides: for non-virtual facility names.
(Closes: #774335)
-- Didier Roche <didrocks@ubuntu.com> Wed, 10 Dec 2014 13:57:17 +0100
systemd (215-8) unstable; urgency=medium
......
......@@ -124,6 +124,7 @@ journal-do-server_vacuum-for-sigusr1.patch
journalctl-correct-help-text-for-until.patch
Raise-level-of-Found-dependency.-lines.patch
systemd-tmpfiles-Fix-IGNORE_DIRECTORY_PATH-age-handl.patch
sysv-generator-handle-Provides-for-non-virtual-facil.patch
## Debian specific patches:
Add-back-support-for-Debian-specific-config-files.patch
......
From: Michael Biebl <biebl@debian.org>
Date: Mon, 5 Jan 2015 09:49:44 +0100
Subject: sysv-generator: handle Provides: for non-virtual facility names
The list of provided facility names as specified via Provides: in the
LSB header was originally implemented by adding those facilities to the
Names= property via unit_add_name().
In commit 95ed3294c632f5606327149f10cef1eb34422862 the internal SysV
support was replaced by a generator and support for parsing the Names=
option had been removed from the unit file parsing in v186.
As a result, Provides: for non-virtual facility was dropped when
introducing the sysv-generator.
Since quite a few SysV init scripts still use that functionality (at
least in distros like Debian which have a large body of SysV init
scripts), add back support by making those facility names available via
symlinks to the unit filename to ensure correct orderings between
SysV init scripts which use those facility names.
Bug-Debian: https://bugs.debian.org/774335
---
src/sysv-generator/sysv-generator.c | 25 ++++++++++++++++++++++++-
1 file changed, 24 insertions(+), 1 deletion(-)
diff --git a/src/sysv-generator/sysv-generator.c b/src/sysv-generator/sysv-generator.c
index da6b4f6..2f116fb 100644
--- a/src/sysv-generator/sysv-generator.c
+++ b/src/sysv-generator/sysv-generator.c
@@ -118,6 +118,27 @@ static int add_symlink(const char *service, const char *where) {
return 1;
}
+static int add_alias(const char *service, const char *alias) {
+ _cleanup_free_ char *link = NULL;
+ int r;
+
+ assert(service);
+ assert(alias);
+
+ link = strjoin(arg_dest, "/", alias, NULL);
+ if (!link)
+ return log_oom();
+
+ r = symlink(service, link);
+ if (r < 0) {
+ if (errno == EEXIST)
+ return 0;
+ return -errno;
+ }
+
+ return 1;
+}
+
static int generate_unit_file(SysvStub *s) {
char *unit;
char **p;
@@ -477,7 +498,9 @@ static int load_sysv(SysvStub *s) {
if (r == 0)
continue;
- if (unit_name_to_type(m) != UNIT_SERVICE) {
+ if (unit_name_to_type(m) == UNIT_SERVICE) {
+ r = add_alias(s->name, m);
+ } else {
/* NB: SysV targets
* which are provided
* by a service are
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment