Commit Graph
18 Commits
Author SHA1 Message Date
Cristian Rodríguez 8874d83156 sysv-generator: only allow regular files in enumerate_sysv()
Otherwise, if the directory contains other directories we fail
at fopen in load_sysv() with EISDIR.

(cherry picked from commit 0814f65ec6)

Conflicts:
	src/sysv-generator/sysv-generator.c
2015-01-22 10:56:29 -05:00
Martin Pitt cd1694328b sysv-generator: Handle .sh suffixes when translating Provides:
When deciding whether the provided name equals the file name in
sysv_translate_facility(), also consider them equal if the file name has a
".sh" suffix.

This was uncovered by commit b7e7184 which then created a symlink
"<name>.service" to itself for ".sh" suffixed init.d scripts.

For additional robustness, refuse to create symlinks to itself in add_alias().

Add test case which reproduces the bug.

https://bugs.debian.org/775889
(cherry picked from commit 29e0e6d8c1)

Conflicts:
	test/sysv-generator-test.py
2015-01-22 10:50:12 -05:00
Lennart Poettering 46c3a085f0 sysv-generator: always use fstatat() if we can
(cherry picked from commit 805e5dda0a)
2015-01-16 09:40:08 -05:00
Lennart Poettering 7bc3b3007e sysv-generator: fix memory leak on failure
This fixes a memory leak introduced by
1ed0c19f81

(cherry picked from commit b3fae863ef)
2015-01-16 09:40:08 -05:00
Michael Biebl 24f984a147 sysv-generator: initialize units before use to ensure correct ordering
The original loop called fix_order() on each service immediately after
loading it, but fix_order() would reference other units which were not
loaded yet.
This resulted in bogus and unnecessary orderings based on the static
start priorities.

Therefore call load_sysv() for every init script when traversing them in
enumerate_sysv(). This ensures that all units are loaded when
fix_order() is called.

Bug-Debian: https://bugs.debian.org/771118
(cherry picked from commit 1ed0c19f81)
2015-01-16 00:56:59 -05:00
Michael Biebl 5bf11a0f2e 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 95ed3294c6 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
(cherry picked from commit b7e7184634)
2015-01-16 00:56:59 -05:00
Zbigniew Jędrzejewski-Szmek 5f7252443d sysv-generator: advertise the man page
(cherry picked from commit aad0a2c800)
2015-01-16 00:56:52 -05:00
Thomas Hindoe Paaboel Andersen cf4acf84c6 Remove repeated includes
In pty.c there was both an include of our pty.h and the system installed pty.h.
The latter contains only two functions openpty and forkpty. We use neither so
I assume it was a typo and removed it. We still compile and pass all tests.
2014-10-01 23:25:50 +02:00
Thomas Hindoe Paaboel Andersen 8c84621c25 sysv-generator: don't check first if hashmap contains the service name
Just test if hashmap_get returns null. hashmap_contains does exactly
same thing internally so this is slightly more efficient for the true
case.

Silences a coverity warning too. CID#1237648
2014-09-17 23:11:58 +02:00
Andreas Henriksson 91e7bad45d sysv-generator: fix resource leak
The "unit" string allocation is not freed on either error or success path.

Found by coverity. Fixes: CID#1237755
2014-09-16 21:49:03 +02:00
Michal Schmidt d5099efc47 hashmap: introduce hash_ops to make struct Hashmap smaller
It is redundant to store 'hash' and 'compare' function pointers in
struct Hashmap separately. The functions always comprise a pair.
Store a single pointer to struct hash_ops instead.

systemd keeps hundreds of hashmaps, so this saves a little bit of
memory.
2014-09-15 16:08:50 +02:00
Zbigniew Jędrzejewski-Szmek b2fadec604 Properly report invalid quoted strings
$ systemd-analyze verify trailing-g.service
[./trailing-g.service:2] Trailing garbage, ignoring.
trailing-g.service lacks ExecStart setting. Refusing.
Error: org.freedesktop.systemd1.LoadFailed: Unit trailing-g.service failed to load: Invalid argument.
Failed to create trailing-g.service/start: Invalid argument
2014-07-31 08:56:03 -04:00
Zbigniew Jędrzejewski-Szmek a2a5291b3f Reject invalid quoted strings
String which ended in an unfinished quote were accepted, potentially
with bad memory accesses.

Reject anything which ends in a unfished quote, or contains
non-whitespace characters right after the closing quote.

_FOREACH_WORD now returns the invalid character in *state. But this return
value is not checked anywhere yet.

Also, make 'word' and 'state' variables const pointers, and rename 'w'
to 'word' in various places. Things are easier to read if the same name
is used consistently.

mbiebl_> am I correct that something like this doesn't work
mbiebl_> ExecStart=/usr/bin/encfs --extpass='/bin/systemd-ask-passwd "Unlock EncFS"'
mbiebl_> systemd seems to strip of the quotes
mbiebl_> systemctl status shows
mbiebl_> ExecStart=/usr/bin/encfs --extpass='/bin/systemd-ask-password Unlock EncFS  $RootDir $MountPoint
mbiebl_> which is pretty weird
2014-07-31 04:00:31 -04:00
Lukas Nykryn 805b573fad sysv: order initscripts which provide $network before network.target
Due to recent changes where $network "maps" to network-online.target
it is not guaranteed that initscript which provides networking will
be terminated after network.target during shutdown which is against LSB.
2014-07-30 09:55:35 +02:00
Thomas Hindoe Paaboel Andersen 260ad50f5b sysv-generator: fix incorect ordering of Wants 2014-06-26 00:37:26 +02:00
Thomas Hindoe Paaboel Andersen d171ed1c50 sysv-generator: rename PidFile to PIDFile
Spotted by Alexey Shabalin
2014-06-24 23:07:48 +02:00
Colin Ian King 855d111304 Fix spelling mistake, scirpt --> script 2014-06-13 23:00:48 +02:00
Thomas Hindoe Paaboel Andersen 95ed3294c6 Move handling of sysv initscripts to a generator
Reuses logic from service.c and the rc-local generator.

Note that this drops reading of chkconfig entirely. It also drops reading
runlevels from the LSB headers. The runlevels were only used to check for
runlevels outside of the normal 1-5 range and then add special dependencies
and settings. Special runlevels were dropped in the past so it seemed to be
unused code.

The generator does not know about non-generated units with a value set with
SysVStartPriority=. These are therefor not taken into account when converting
start priority to before/after.
2014-06-07 00:59:32 +02:00