]> git.ipfire.org Git - thirdparty/systemd.git/log
thirdparty/systemd.git
7 years agocoredump: do not try to access unitialized CONTEXT_COMM field
Zbigniew Jędrzejewski-Szmek [Sat, 25 Feb 2017 19:00:39 +0000 (14:00 -0500)] 
coredump: do not try to access unitialized CONTEXT_COMM field

Most of the fields in the context array come from the kernel (passed
through argv), but two are special: comm and exe. We allocate them
ourselves. We forgot to initialize context[CONTEXT_COMM] with the value
we allocated (introduced in 9aa820231414baa28e6bf02a033932cb69ff6b8b).
To simplify things, just set context[CONTEXT_COMM] and context[CONTEXT_EXE],
and free those two fields at the end.

Fixes #5442.

7 years agocoredump: slight simplification
Zbigniew Jędrzejewski-Szmek [Sat, 25 Feb 2017 14:35:09 +0000 (09:35 -0500)] 
coredump: slight simplification

7 years agoNEWS: fix typo (#5453)
Thomas H. P. Andersen [Sat, 25 Feb 2017 14:19:26 +0000 (15:19 +0100)] 
NEWS: fix typo (#5453)

7 years agoMerge pull request #5449 from keszybz/blkd-error-handling
Martin Pitt [Sat, 25 Feb 2017 11:25:27 +0000 (12:25 +0100)] 
Merge pull request #5449 from keszybz/blkd-error-handling

blkid error handling

7 years agoMerge pull request #5429 from GiedriusS/master
Zbigniew Jędrzejewski-Szmek [Sat, 25 Feb 2017 02:35:38 +0000 (21:35 -0500)] 
Merge pull request #5429 from GiedriusS/master

coredumpctl: implement --since/--until (-S/-U) for info/list verbs

7 years agoMerge pull request #5444 from poettering/cgroups-revert-no-error
Zbigniew Jędrzejewski-Szmek [Fri, 24 Feb 2017 23:48:57 +0000 (18:48 -0500)] 
Merge pull request #5444 from poettering/cgroups-revert-no-error

Revert "core: simplify cg_[all_]unified()" and more.

7 years agoshell-completion: include the new coredumpctl options 5429/head
Giedrius Statkevičius [Fri, 24 Feb 2017 19:30:59 +0000 (21:30 +0200)] 
shell-completion: include the new coredumpctl options

7 years agoman/coredumpctl: document the new options -S/-U
Giedrius Statkevičius [Fri, 24 Feb 2017 19:30:41 +0000 (21:30 +0200)] 
man/coredumpctl: document the new options -S/-U

7 years agocoredumpctl: implement --since/--until (-S/-U) for info/list verbs
Giedrius Statkevičius [Fri, 24 Feb 2017 19:29:40 +0000 (21:29 +0200)] 
coredumpctl: implement --since/--until (-S/-U) for info/list verbs

Implement --since/--until (-S/-U) in the same fashion as journalctl.
This lets the user filter the results a bit so it would be easier to
find relevant info in case there were many core dumps.

7 years agoFix missing space in comments (#5439)
AsciiWolf [Fri, 24 Feb 2017 17:14:02 +0000 (18:14 +0100)] 
Fix missing space in comments (#5439)

7 years agocgroup: rework cg_all_unified() 5444/head
Lennart Poettering [Fri, 24 Feb 2017 17:05:31 +0000 (18:05 +0100)] 
cgroup: rework cg_all_unified()

Let's just check the unified level, directly. There's really no value in
wrapping cg_unified_controllers() with this, i.e. potentially do string
comparison when there's no reason to.

Also, this makes the clal more alike cg_hybrid_unified().

7 years agocgroup: rename cg_update_unified() → cg_unified_update()
Lennart Poettering [Fri, 24 Feb 2017 17:03:09 +0000 (18:03 +0100)] 
cgroup: rename cg_update_unified() → cg_unified_update()

We usually put the noun first, the verb (i.e. method) secont, for
example in cg_unified_flush(), let's follow the logic here...

7 years agocgroup: rename cg_unified() → cg_unified_controller()
Lennart Poettering [Fri, 24 Feb 2017 17:00:04 +0000 (18:00 +0100)] 
cgroup: rename cg_unified() → cg_unified_controller()

cg_unified() is a bit generic a name, let's make clear that it checks
whether a specified controller is in unified mode.

7 years agocgroup: change cg_unified() to possibly return errors again
Lennart Poettering [Fri, 24 Feb 2017 16:52:58 +0000 (17:52 +0100)] 
cgroup: change cg_unified() to possibly return errors again

We use our cgroup APIs in various contexts, including from our libraries
sd-login, sd-bus. As we don#t control those environments we can't rely
that the unified cgroup setup logic succeeds, and hence really shouldn't
assert on it.

This more or less reverts 415fc41ceaeada2e32639f24f134b1c248b9e43f.

7 years agocgroup-util: check unified_cache before invoking streq()
Lennart Poettering [Fri, 24 Feb 2017 14:53:17 +0000 (15:53 +0100)] 
cgroup-util: check unified_cache before invoking streq()

Just a minor optimization.

7 years agoMerge pull request #4670 from htejun/systemd-controller-on-unified-v2
Lennart Poettering [Thu, 23 Feb 2017 15:23:02 +0000 (16:23 +0100)] 
Merge pull request #4670 from htejun/systemd-controller-on-unified-v2

Systemd controller on unified v2

7 years agoMerge pull request #5434 from poettering/udev-log-revert
Evgeny Vereshchagin [Thu, 23 Feb 2017 12:06:03 +0000 (15:06 +0300)] 
Merge pull request #5434 from poettering/udev-log-revert

Udev log revert

7 years agojournal: avoid duplicated call to get cgroup path (#5404)
Namhyung Kim [Thu, 23 Feb 2017 12:04:57 +0000 (21:04 +0900)] 
journal: avoid duplicated call to get cgroup path (#5404)

The cg_pid_get_path_shifted() is called twice during
server_dispatch_message().  We can get rid of the second by passing the
path to dispatch_message_real().

7 years agoRevert "udev: Introduce UDEV_PROPAGATE_LOG macro (#5302)" 5434/head
Lennart Poettering [Thu, 23 Feb 2017 11:36:07 +0000 (12:36 +0100)] 
Revert "udev: Introduce UDEV_PROPAGATE_LOG macro (#5302)"

This reverts commit c22569eeeafa94cf510267071f5b75c4ab714e09.

Let's revert this for now, since it apparently doesn't fix the problem
at hand.

7 years agoRevert "Makefile.am: add a `\` (#5422)"
Lennart Poettering [Thu, 23 Feb 2017 11:36:04 +0000 (12:36 +0100)] 
Revert "Makefile.am: add a `\` (#5422)"

This reverts commit 00d1e0c9def4557c74f46cc2fe3a7ebc32a1dc8a.

7 years agotest-cgroup-util: add a "test" to print out cg_is_*_wanted() values 4670/head
Zbigniew Jędrzejewski-Szmek [Thu, 23 Feb 2017 00:57:11 +0000 (19:57 -0500)] 
test-cgroup-util: add a "test" to print out cg_is_*_wanted() values

This isn't terribly useful because /sys/fs/cgroup will usually be mounted.
But it at least allows checking if the values make sense in this case.

7 years agocgroup-util: fix the case of default=unified, unified-cgroup-hierarchy=0
Zbigniew Jędrzejewski-Szmek [Thu, 23 Feb 2017 00:55:31 +0000 (19:55 -0500)] 
cgroup-util: fix the case of default=unified, unified-cgroup-hierarchy=0

We should mount the hybrid hierarchy if the user disabled the unified
hierarchy on the kernel command line.

7 years agoMerge pull request #5424 from segfault-cc/master
Peter Hutterer [Thu, 23 Feb 2017 00:02:17 +0000 (10:02 +1000)] 
Merge pull request #5424 from segfault-cc/master

Added hwdb rule for E5570 laptop (PointingStick)

7 years agoman: journalctl: update --new-id128 format count (#5423)
Lucas Werkmeister [Wed, 22 Feb 2017 18:58:01 +0000 (19:58 +0100)] 
man: journalctl: update --new-id128 format count (#5423)

The Python format was added in d489071fb3.

7 years agocgroup-util: cache all cg_is_*_wanted answers, disable /sys/fs/cgroups/unified on...
Zbigniew Jędrzejewski-Szmek [Wed, 22 Feb 2017 17:57:43 +0000 (12:57 -0500)] 
cgroup-util: cache all cg_is_*_wanted answers, disable /sys/fs/cgroups/unified on unified

If we encounter an error in proc cmdline parsing, just treat that as permanent,
i.e. the same as if the option was not specified. Realistically, it is better
to use the same condition for all related mounts, then to have e.g.
/sys/fs/cgroup mounted and /sys/fs/cgroup/unified not. If we find something is
mounted and base our answer on that, cache that result too.

Fix the conditions so that if "unified" is used, make sure any "hybrid" mounts
are not mounted.

7 years agoMerge pull request #5421 from ssahani/net7
Zbigniew Jędrzejewski-Szmek [Wed, 22 Feb 2017 16:56:16 +0000 (11:56 -0500)] 
Merge pull request #5421 from ssahani/net7

networkd: Do not set config to NULL immediately.

7 years agoman: update descriptions of argument-less kernel cmdline args
Zbigniew Jędrzejewski-Szmek [Mon, 20 Feb 2017 01:02:12 +0000 (20:02 -0500)] 
man: update descriptions of argument-less kernel cmdline args

This updates the man page for the changes introduced in 1d84ad944520fc3e062ef518c4db4e1d3a1866af.
"=" is kep if the option is predominantly used with an argument, and dropped
otherwise.

v2:
 - update also description of log_color
 - drop '=' in all cases where it is optional
   (previous rule of dropping it only in some cases was just too arbitrary.)

7 years agoman: describe the cgroup hierarchy kernel commandline options
Zbigniew Jędrzejewski-Szmek [Mon, 20 Feb 2017 00:33:48 +0000 (19:33 -0500)] 
man: describe the cgroup hierarchy kernel commandline options

Fixes #4827.

v2:
- update for the inverted interpration of systemd.legacy_systemd_cgroup_controller

7 years agocore/mount-setup: if unified hierarchy is not supported, fall back to legacy
Zbigniew Jędrzejewski-Szmek [Sun, 19 Feb 2017 20:59:21 +0000 (15:59 -0500)] 
core/mount-setup: if unified hierarchy is not supported, fall back to legacy

We need this to gracefully support older or strangely configured kernels.

v2:
- do not install a callback handler, just embed the right conditions into
  cg_is_*_wanted()

v3:
- fix bug in cg_is_legacy_wanted()

7 years agoRename cg_is_unified_systemd_controller_wanted to cg_is_hybrid_wanted
Zbigniew Jędrzejewski-Szmek [Sun, 19 Feb 2017 20:36:56 +0000 (15:36 -0500)] 
Rename cg_is_unified_systemd_controller_wanted to cg_is_hybrid_wanted

Less typing and doesn't make the table so incredibly wide.

7 years agobuild-sys: default to hybrid cgroup hierarchy
Zbigniew Jędrzejewski-Szmek [Sun, 19 Feb 2017 05:09:31 +0000 (00:09 -0500)] 
build-sys: default to hybrid cgroup hierarchy

It is expected that general-purpose distributions might want to override this.
This commit is made separate from grandparent to make it easy to revert if
needed.

v2:
- use hybrid as the default
  (We tested that the default of unified seems boot correctly everywhere and behave
   correctly in general, but it is incompatible with docker/lxc and probably some
   other tools, so for now we default to hybrid. The new "hybrid" mode should work
   be OK for those tools.)

Fixes #4669.

7 years agoAdded hwdb rule for E5570 laptop (PointingStick) 5424/head
Vitaly Sulimov [Wed, 22 Feb 2017 09:57:21 +0000 (12:57 +0300)] 
Added hwdb rule for E5570 laptop (PointingStick)
Trackpoint sensivity is very high by default
https://bugs.freedesktop.org/show_bug.cgi?id=99860

7 years agonetworkd: address config add error checking 5421/head
Susant Sahani [Wed, 22 Feb 2017 05:41:28 +0000 (11:11 +0530)] 
networkd: address config add error checking

We not looking for hashmap_put return error code.

7 years agonetworkd: Do not set config to NULL immediately.
Susant Sahani [Wed, 22 Feb 2017 05:25:03 +0000 (10:55 +0530)] 
networkd: Do not set config to NULL immediately.

fd45e52 sets
n to NULL which leads to crash.

fixes: #5418

7 years agoMakefile.am: add a `\` (#5422)
Susant Sahani [Wed, 22 Feb 2017 04:04:02 +0000 (09:34 +0530)] 
Makefile.am: add a `\` (#5422)

fixes: #5419

7 years agoMerge pull request #5409 from keszybz/test-env-util-memleak
Evgeny Vereshchagin [Wed, 22 Feb 2017 01:02:57 +0000 (04:02 +0300)] 
Merge pull request #5409 from keszybz/test-env-util-memleak

test-env-util: fix typo leading to memleak

7 years agoNEWS: add a comment about udev's MemoryDenyWriteExecute= setting (#5414)
Lennart Poettering [Wed, 22 Feb 2017 00:36:12 +0000 (01:36 +0100)] 
NEWS: add a comment about udev's MemoryDenyWriteExecute= setting (#5414)

Apparently if people are adventurous enought to run Go programs in udev
rules they might run into problems with MemoryDenyWriteExecute=.

I am pretty sure the best way out is for the toolchain generating
programs incompatible with W^X to be fixed, but this still deserves
documentation.

This was forgotten for the 232 release, hence add it now, retroactively.

See: #5400

7 years agoudev: Introduce UDEV_PROPAGATE_LOG macro (#5302)
Susant Sahani [Tue, 21 Feb 2017 23:16:13 +0000 (04:46 +0530)] 
udev: Introduce UDEV_PROPAGATE_LOG macro (#5302)

As per commit 25e773e "udev: switch to systemd logging functions"
Now log_set_max_level() in udev_new() overwites system wide log level.

Propagate the udev.conf setting to log_set_max_level()
only if udev_new() is called from within udevd or one of its helpers.

Introduce a UDEV_PROPAGATE_LOG macro that we set with -D on
the gcc command line for all udev binaries we build, but not
for any others. The log_set_max_level() call is guarded by an
ifdef check for that macro, so that it only effects the various
udev binaries.

closes: #4525

7 years agocoredump: fix assign in while loop (#5417)
Thomas H. P. Andersen [Tue, 21 Feb 2017 23:14:54 +0000 (00:14 +0100)] 
coredump: fix assign in while loop (#5417)

From: #5393

7 years agoMerge pull request #5411 from poettering/various-pre-v233-fixes
Zbigniew Jędrzejewski-Szmek [Tue, 21 Feb 2017 22:35:01 +0000 (17:35 -0500)] 
Merge pull request #5411 from poettering/various-pre-v233-fixes

Various pre v233 fixes.

7 years agoudev-builtin-blkid: use -errno not -1 as error code 5449/head
Zbigniew Jędrzejewski-Szmek [Tue, 21 Feb 2017 21:42:46 +0000 (16:42 -0500)] 
udev-builtin-blkid: use -errno not -1 as error code

The code that calls this function doesn't care, but it looks bad.

7 years agotree-wide: simplify handling of blkid errors
Zbigniew Jędrzejewski-Szmek [Tue, 21 Feb 2017 21:41:33 +0000 (16:41 -0500)] 
tree-wide: simplify handling of blkid errors

7 years agoRevert "basic/strv: allow NULLs to be inserted into strv" 5411/head
Lennart Poettering [Tue, 21 Feb 2017 17:11:12 +0000 (18:11 +0100)] 
Revert "basic/strv: allow NULLs to be inserted into strv"

This reverts commit 18f71a3c8174774c5386c4aba94d54f3b5c36a84.

According to @keszybz we don't need this anymore, hence drop it:

https://github.com/systemd/systemd/pull/5131/commits/18f71a3c8174774c5386c4aba94d54f3b5c36a84#r102232368

7 years agolog: never log into foreign fd #2 in PID 1 or its pre-execve() children
Lennart Poettering [Tue, 21 Feb 2017 16:57:55 +0000 (17:57 +0100)] 
log: never log into foreign fd #2 in PID 1 or its pre-execve() children

Fixes: #5401
7 years agoman: document that ProtectKernelTunables= and ProtectControlGroups= implies MountAPIVFS=
Lennart Poettering [Tue, 21 Feb 2017 16:48:59 +0000 (17:48 +0100)] 
man: document that ProtectKernelTunables= and ProtectControlGroups= implies MountAPIVFS=

See: #5384

7 years agobootctl: create loader.conf only if it doesn't exist yet
Lennart Poettering [Tue, 21 Feb 2017 16:44:35 +0000 (17:44 +0100)] 
bootctl: create loader.conf only if it doesn't exist yet

If the snippet aleady exists, don't do anything, as the file was already
installed then.

(This also reworks the code to create the file atomically)

Fixes: #5396
7 years agobootctl: rework file copy routines to reuse copy_bytes() from copy.c
Lennart Poettering [Tue, 21 Feb 2017 16:13:36 +0000 (17:13 +0100)] 
bootctl: rework file copy routines to reuse copy_bytes() from copy.c

Also, make sure to reuse temporary file handling used elsewhere.

7 years agocopy: a plain unlink() works here too
Lennart Poettering [Tue, 21 Feb 2017 16:13:28 +0000 (17:13 +0100)] 
copy: a plain unlink() works here too

7 years agosd-netlink: don't give up on netlink on ENOBUFS
Lennart Poettering [Tue, 21 Feb 2017 15:25:02 +0000 (16:25 +0100)] 
sd-netlink: don't give up on netlink on ENOBUFS

If our netlink input buffer overruns the kernel will send us ENOBUFS on
the next recvmsg(). Don't consider this a complete failure resulting in
closing of the netlink socket. Instead, simply continue (after debug
logging).

Of course, ideally we'd have a better strategy for this, and would have
a way to resync if this happens (as well as a scheme for cancelling all
ongoing asynchronous transactions), but for now let's at least not choke
fatally, and simply accept that we lost some messages and continue.

Note that if we lose messages when synchronously waiting for an
operation to complete, we'll still propagate the ENOBUFS up, to make the
individual transaction fail.

See: #5398

(This bug does not properly fix the issue, hence we should leave the bug
open.)

7 years agodissect: generate friendly error messages for more error conditions
Lennart Poettering [Tue, 21 Feb 2017 15:18:03 +0000 (16:18 +0100)] 
dissect: generate friendly error messages for more error conditions

Fixes: #5408
7 years agoFix check for signal in set (#5416)
stuart-mclaren [Tue, 21 Feb 2017 20:39:52 +0000 (20:39 +0000)] 
Fix check for signal in set (#5416)

IN_SET(SIGCONT, SIGKILL) will always evaluate to false.
The signal needs to be included as the first argument.

Fixup for 26f417d3e8dd2522adfdc4c8fed4c36fa40f48fc.

7 years agoNEWS: document ExecStartPost change in NEWS (#5415)
Lennart Poettering [Tue, 21 Feb 2017 20:00:09 +0000 (21:00 +0100)] 
NEWS: document ExecStartPost change in NEWS (#5415)

Follow up for #4843.

Taking @joukewitteveen's suggestion into account:
https://github.com/systemd/systemd/pull/4843#issuecomment-280306811

7 years agoMerge pull request #5412 from AsciiWolf/https-urls-2
Zbigniew Jędrzejewski-Szmek [Tue, 21 Feb 2017 19:47:40 +0000 (14:47 -0500)] 
Merge pull request #5412 from AsciiWolf/https-urls-2

More https:// in URLs fixes.

7 years agoNEWS, README: use www prefix in freedesktop.org URLs 5412/head
AsciiWolf [Tue, 21 Feb 2017 17:26:23 +0000 (18:26 +0100)] 
NEWS, README: use www prefix in freedesktop.org URLs

7 years agocatalog: use https:// in URLs
AsciiWolf [Tue, 21 Feb 2017 17:21:13 +0000 (18:21 +0100)] 
catalog: use https:// in URLs

7 years agodocs: use https:// in URLs
AsciiWolf [Tue, 21 Feb 2017 17:18:24 +0000 (18:18 +0100)] 
docs: use https:// in URLs

7 years agobasic/env-util: drop leftover comment 5409/head
Zbigniew Jędrzejewski-Szmek [Tue, 21 Feb 2017 15:49:22 +0000 (10:49 -0500)] 
basic/env-util: drop leftover comment

7 years agoMerge pull request #5410 from AsciiWolf/https-urls
Zbigniew Jędrzejewski-Szmek [Tue, 21 Feb 2017 16:27:10 +0000 (11:27 -0500)] 
Merge pull request #5410 from AsciiWolf/https-urls

Use https:// in URLs when possible.

7 years agobasic/fileio: use IN_SET
Zbigniew Jędrzejewski-Szmek [Tue, 21 Feb 2017 16:15:27 +0000 (11:15 -0500)] 
basic/fileio: use IN_SET

7 years agobasic/fileio: fix memleak when discarding an invalid variable
Zbigniew Jędrzejewski-Szmek [Tue, 21 Feb 2017 16:15:19 +0000 (11:15 -0500)] 
basic/fileio: fix memleak when discarding an invalid variable

Fixes #5405.

7 years agomount-tools: silence gcc warning about uninit var
Zbigniew Jędrzejewski-Szmek [Tue, 21 Feb 2017 15:59:48 +0000 (10:59 -0500)] 
mount-tools: silence gcc warning about uninit var

7 years agotest-env-util: fix typo leading to memleak
Zbigniew Jędrzejewski-Szmek [Tue, 21 Feb 2017 14:58:50 +0000 (09:58 -0500)] 
test-env-util: fix typo leading to memleak

Partially fixes #5405.

7 years agoman: use https:// in URLs 5410/head
AsciiWolf [Tue, 21 Feb 2017 15:28:04 +0000 (16:28 +0100)] 
man: use https:// in URLs

7 years agoNEWS: use https:// in URLs
AsciiWolf [Tue, 21 Feb 2017 15:03:04 +0000 (16:03 +0100)] 
NEWS: use https:// in URLs

7 years agoREADME, README.md: use https:// in URLs
AsciiWolf [Tue, 21 Feb 2017 14:56:04 +0000 (15:56 +0100)] 
README, README.md: use https:// in URLs

7 years agoconfigure.am: use https:// in URLs
AsciiWolf [Tue, 21 Feb 2017 14:44:13 +0000 (15:44 +0100)] 
configure.am: use https:// in URLs

7 years agoNEWS: fix typos, grammar, and small errors (#5407)
Martin Pitt [Tue, 21 Feb 2017 14:41:44 +0000 (15:41 +0100)] 
NEWS: fix typos, grammar, and small errors (#5407)

7 years agoMerge pull request #5406 from poettering/v233-prep
Martin Pitt [Tue, 21 Feb 2017 14:04:02 +0000 (15:04 +0100)] 
Merge pull request #5406 from poettering/v233-prep

V233 preparation

7 years agobuild-sys: bump package version 5406/head
Lennart Poettering [Tue, 21 Feb 2017 13:01:09 +0000 (14:01 +0100)] 
build-sys: bump package version

7 years agostart putting together a NEWS entry for 233
Lennart Poettering [Tue, 21 Feb 2017 12:59:12 +0000 (13:59 +0100)] 
start putting together a NEWS entry for 233

7 years agosystemctl: suffix cmdline options that take arguments with =
Lennart Poettering [Tue, 21 Feb 2017 10:17:24 +0000 (11:17 +0100)] 
systemctl: suffix cmdline options that take arguments with =

Just to clarify, that these options expect arguments, following our
usual style.

7 years agoMerge pull request #5131 from keszybz/environment-generators
Lennart Poettering [Tue, 21 Feb 2017 10:11:44 +0000 (11:11 +0100)] 
Merge pull request #5131 from keszybz/environment-generators

Environment generators

7 years agocoredumpctl: print a hint if any coredumps are in flight (#5393)
Zbigniew Jędrzejewski-Szmek [Tue, 21 Feb 2017 10:08:35 +0000 (05:08 -0500)] 
coredumpctl: print a hint if any coredumps are in flight (#5393)

Fixes #4685.

7 years agoMerge pull request #5390 from keszybz/coverity
Lennart Poettering [Tue, 21 Feb 2017 09:49:49 +0000 (10:49 +0100)] 
Merge pull request #5390 from keszybz/coverity

Clarifications to make coverity happy

7 years agotest-env-util: add more tests for "extended syntax" 5131/head
Zbigniew Jędrzejewski-Szmek [Tue, 21 Feb 2017 04:21:26 +0000 (23:21 -0500)] 
test-env-util: add more tests for "extended syntax"

This is only the tip of the iceberg. It would be great to test all kinds of nesting, handling
of invalid syntax, etc., but I'm leaving that for later.

7 years agobasic: support default and alternate values for env expansion
Ray Strode [Tue, 9 Aug 2016 14:20:22 +0000 (10:20 -0400)] 
basic: support default and alternate values for env expansion

Sometimes it's useful to provide a default value during an environment
expansion, if the environment variable isn't already set.

For instance $XDG_DATA_DIRS is suppose to default to:

/usr/local/share/:/usr/share/

if it's not yet set. That means callers wishing to augment
XDG_DATA_DIRS need to manually add those two values.

This commit changes replace_env to support the following shell
compatible default value syntax:

XDG_DATA_DIRS=/foo:${XDG_DATA_DIRS:-/usr/local/share/:/usr/share}

Likewise, it's useful to provide an alternate value during an
environment expansion, if the environment variable isn't already set.

For instance, $LD_LIBRARY_PATH will inadvertently search the current
working directory if it starts or ends with a colon, so the following
is usually wrong:

LD_LIBRARY_PATH=/foo/lib:${LD_LIBRARY_PATH}

To address that, this changes replace_env to support the following
shell compatible alternate value syntax:

LD_LIBRARY_PATH=/foo/lib${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

[zj: gate the new syntax under REPLACE_ENV_ALLOW_EXTENDED switch, so
existing callers are not modified.]

7 years agobasic: add replace_env_n function
Ray Strode [Tue, 9 Aug 2016 14:20:22 +0000 (10:20 -0400)] 
basic: add replace_env_n function

It's like replace_env, but lets you pass in a substring.

7 years agobuild-sys: make environment.d support conditional
Zbigniew Jędrzejewski-Szmek [Sat, 18 Feb 2017 16:28:12 +0000 (11:28 -0500)] 
build-sys: make environment.d support conditional

We have ./configure switches for various parts of non-essential functionality,
let's add one for this new stuff too. Support for environment generators is
not conditional — if you don't want them, just don't install any.

7 years agoTighten checking for variable validity
Zbigniew Jędrzejewski-Szmek [Sat, 18 Feb 2017 03:56:28 +0000 (22:56 -0500)] 
Tighten checking for variable validity

In the future we might want to allow additional syntax (for example
"unset VAR". But let's check that the data we're getting does not contain
anything unexpected.

7 years agoAllow braceless variables to be expanded
Zbigniew Jędrzejewski-Szmek [Sat, 11 Feb 2017 19:05:10 +0000 (14:05 -0500)] 
Allow braceless variables to be expanded

(Only in environment.d files.)

We have only basic compatibility with shell syntax, but specifying variables
without using braces is probably more common, and I think a lot of people would
be surprised if this didn't work.

7 years agobasic/env-util: use _cleanup_ in replace_env()
Zbigniew Jędrzejewski-Szmek [Sat, 11 Feb 2017 18:22:13 +0000 (13:22 -0500)] 
basic/env-util: use _cleanup_ in replace_env()

7 years agobuild-sys,man: load /etc/environment and describe the new environment.d syntax
Ray Strode [Fri, 29 Jul 2016 17:52:55 +0000 (13:52 -0400)] 
build-sys,man: load /etc/environment and describe the new environment.d syntax

Add support for /etc/environment and document the changes to the user manager
to automatically import environment *.conf files from:

        ~/.config/environment.d/
        /etc/environment.d/
        /run/environment.d/
        /usr/local/lib/environment.d/
        /usr/lib/environment.d/
        /etc/environment

7 years agoenvironment-generator: new generator to peruse environment.d
Zbigniew Jędrzejewski-Szmek [Sat, 11 Feb 2017 16:32:17 +0000 (11:32 -0500)] 
environment-generator: new generator to peruse environment.d

Why the strange name: the prefix is necessary to follow our own advice that
environment generators should have numerical prefixes. I also put -d- in the
name because otherwise the name was very easy to mistake with
systemd.environment-generator. This additional letter clarifies that this
on special generator that supports environment.d files.

7 years agobasic: add new merge_env_file function
Ray Strode [Thu, 4 Aug 2016 16:00:00 +0000 (12:00 -0400)] 
basic: add new merge_env_file function

merge_env_file is a new function, that's like load_env_file, but takes a
pre-existing environment as an input argument. New environment entries are
merged. Variable expansion is performed.

Falling back to the process environment is supported (when a flag is set).
Alternatively this could be implemented as passing an additional fallback
environment array, but later on we're adding another flag to allow braceless
expansion, and the two flags can be combined in one arg, so there's less
stuff to pass around.

7 years agobasic: drop unnecessary strempty() call in replace_env
Ray Strode [Tue, 9 Aug 2016 14:39:15 +0000 (10:39 -0400)] 
basic: drop unnecessary strempty() call in replace_env

strempty() converts a NULL value to empty string, so
that it can be passed on to functions that don't support NULL.

replace_env calls strempty before passing its value on to strappend.

strappend supports NULL just fine, though, so this commit drops the
strempty call.

7 years agobasic: fix strv_env_get_n for unclean arrays
Ray Strode [Wed, 3 Aug 2016 18:35:50 +0000 (14:35 -0400)] 
basic: fix strv_env_get_n for unclean arrays

If an environment array has duplicates, strv_env_get_n returns
the results for the first match. This is wrong, because later
entries in the environment are supposed to replace earlier
entries.

7 years agoman: add systemd.environment-generator(7) with two examples
Zbigniew Jędrzejewski-Szmek [Mon, 23 Jan 2017 06:11:45 +0000 (01:11 -0500)] 
man: add systemd.environment-generator(7) with two examples

v2:
  - add example files to EXTRA_DIST
v3:
  - rework for the new scheme where nothing is written to disk
v4:
  - use separate dirs for system and user env generators

7 years agomanager: run environment generators
Zbigniew Jędrzejewski-Szmek [Sun, 22 Jan 2017 06:13:47 +0000 (01:13 -0500)] 
manager: run environment generators

Environment file generators are a lot like unit file generators, but not
exactly:

1. environment file generators are run for each manager instance, and their
   output is (or at least can be) individualized.

   The generators themselves are system-wide, the same for all users.

2. environment file generators are run sequentially, in priority order.

Thus, the lifetime of those files is tied to lifecycle of the manager
instance. Because generators are run sequentially, later generators can use or
modify the output of earlier generators.

Each generator is run with no arguments, and the whole state is stored in the
environment variables. The generator can echo a set of variable assignments to
standard output:

  VAR_A=something
  VAR_B=something else

This output is parsed, and the next and subsequent generators run with those
updated variables in the environment. After the last generator is done, the
environment that the manager itself exports is updated.

Each generator must return 0, otherwise the output is ignored.

The generators in */user-env-generator are for the user session managers,
including root, and the ones in */system-env-generator are for pid1.

7 years agoexec-util: implement a set of callbacks to pass variables around
Zbigniew Jędrzejewski-Szmek [Sat, 11 Feb 2017 02:49:01 +0000 (21:49 -0500)] 
exec-util: implement a set of callbacks to pass variables around

Only tests are added, otherwise the new code is unused.

7 years agobasic/env-util: drop _pure_ from static function
Zbigniew Jędrzejewski-Szmek [Sat, 18 Feb 2017 21:23:03 +0000 (16:23 -0500)] 
basic/env-util: drop _pure_ from static function

7 years agoenv-util,fileio: immediately replace variables in load_env_file_push()
Zbigniew Jędrzejewski-Szmek [Sat, 11 Feb 2017 04:08:53 +0000 (23:08 -0500)] 
env-util,fileio: immediately replace variables in load_env_file_push()

strv_env_replace was calling env_match(), which in effect allowed multiple
values for the same key to be inserted into the environment block. That's
pointless, because APIs to access variables only return a single value (the
latest entry), so it's better to keep the block clean, i.e. with just a single
entry for each key.

Add a new helper function that simply tests if the part before '=' is equal in
two strings and use that in strv_env_replace.

In load_env_file_push, use strv_env_replace to immediately replace the previous
assignment with a matching name.

Afaict, none of the callers are materially affected by this change, but it
seems like some pointless work was being done, if the same value was set
multiple times. We'd go through parsing and assigning the value for each
entry. With this change, we handle just the last one.

7 years agobasic/fileio: add helper function for a set of two common checks
Zbigniew Jędrzejewski-Szmek [Sat, 11 Feb 2017 03:14:03 +0000 (22:14 -0500)] 
basic/fileio: add helper function for a set of two common checks

7 years agocore/manager: move environment serialization out to basic/env-util.c
Zbigniew Jędrzejewski-Szmek [Sat, 11 Feb 2017 02:44:21 +0000 (21:44 -0500)] 
core/manager: move environment serialization out to basic/env-util.c

This protocol is generally useful, we might just as well reuse it for the
env. generators.

The implementation is changed a bit: instead of making a new strv and freeing
the old one, just mutate the original. This is much faster with larger arrays,
while in fact atomicity is preserved, since we only either insert the new
entry or not, without being in inconsistent state.

v2:
- fix confusion with return value

7 years agocore/manager: fix grammar in comment
Zbigniew Jędrzejewski-Szmek [Fri, 10 Feb 2017 20:41:42 +0000 (15:41 -0500)] 
core/manager: fix grammar in comment

7 years agobasic/exec-util: add support for synchronous (ordered) execution
Zbigniew Jędrzejewski-Szmek [Sun, 22 Jan 2017 20:22:37 +0000 (15:22 -0500)] 
basic/exec-util: add support for synchronous (ordered) execution

The output of processes can be gathered, and passed back to the callee.
(This commit just implements the basic functionality and tests.)

After the preparation in previous commits, the change in functionality is
relatively simple. For coding convenience, alarm is prepared *before* any
children are executed, and not before. This shouldn't matter usually, since
just forking of the children should be pretty quick. One could also argue that
this is more correct, because we will also catch the case when (for whatever
reason), forking itself is slow.

Three callback functions and three levels of serialization are used:
- from individual generator processes to the generator forker
- from the forker back to the main process
- deserialization in the main process

v2:
- replace an structure with an indexed array of callbacks

7 years agocore/manager: split out creation of serialization fd out to a helper
Zbigniew Jędrzejewski-Szmek [Sat, 11 Feb 2017 23:33:16 +0000 (18:33 -0500)] 
core/manager: split out creation of serialization fd out to a helper

There is a slight change in behaviour: the user manager for root will create a
temporary file in /run/systemd, not /tmp. I don't think this matters, but
simplifies implementation.

7 years agotree-wide: add man: to manpage references (#5402)
Lucas Werkmeister [Mon, 20 Feb 2017 23:45:35 +0000 (00:45 +0100)] 
tree-wide: add man: to manpage references (#5402)

Found with:

    git grep '"[^"]*[a-z0-9]([0-9]\+p\?)' src/ | grep -vF man:

7 years agoSyntax for defines that is also unterstood by the GNU C/C++ compilers. (#5397)
pyBlob [Mon, 20 Feb 2017 21:24:45 +0000 (22:24 +0100)] 
Syntax for defines that is also unterstood by the GNU C/C++ compilers. (#5397)

7 years agosystemctl: Fix condition in start_special() (#5399)
Benjamin Robin [Mon, 20 Feb 2017 21:11:34 +0000 (22:11 +0100)] 
systemctl: Fix condition in start_special() (#5399)

7 years agosd-device: replace lstat() + open() with open(O_NOFOLLOW) 5390/head
Zbigniew Jędrzejewski-Szmek [Sun, 19 Feb 2017 19:17:19 +0000 (14:17 -0500)] 
sd-device: replace lstat() + open() with open(O_NOFOLLOW)

Coverity was complaining about TOCTOU (CID #745806). Indeed, it seems better
to open the file and avoid the stat altogether:

- O_NOFOLLOW means we'll get ELOOP, which we can translate to EINVAL as before,
- similarly, open(O_WRONLY) on a directory will fail with EISDIR,
- and finally, it makes no sense to check access mode ourselves: just let
  the kernel do it and propagate the error.

v2:
- fix memleak, don't clober input arg