core: call dynamic_user_acquire() only when 'group' is non-null
authorYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 3 Feb 2020 11:18:02 +0000 (20:18 +0900)
committerMichael Biebl <biebl@debian.org>
Sat, 15 Feb 2020 14:44:45 +0000 (14:44 +0000)
commitdc4e23cc4d7e25dd569b6ef2db4cc865159984c1
treefd4fc1282e7fb2cfd8a2ace9dba04db19b911a68
parentb83ab27152238f5e5678592933d10765bc58093d
core: call dynamic_user_acquire() only when 'group' is non-null

When unit is reloaded, and the reloaded unit has bad-setting, then
unit_patch_contexts() is not called and exec_context::user and group
may not be configured.

A minimum reproducer for the case is:
- step 1.
$ sudo systemctl edit --full hoge.service
[Service]
oneshot
ExecStart=sleep 1h

- step 2.
$ sudo systemctl start hoge.service

- step 3.
$ sudo systemctl edit --full hoge.service
[Service]
Type=oneshot
ExecStart=@bindir@/sleep 1h
DynamicUser=yes

Then pid1 crashed.

Fixes #14733.

(cherry picked from commit 50152bb1c5c311e97e9eeec3b09044925b6e3663)

Gbp-Pq: Name core-call-dynamic_user_acquire-only-when-group-is-non-nul.patch
src/core/dynamic-user.c