Lennart Poettering [Fri, 3 Aug 2018 14:46:26 +0000 (16:46 +0200)]
hashmap: add an explicit assert() for detecting when objects migrated between threads
When clients don't follow protocol and use the same object from
different threads, then we previously would silently corrupt memory.
With this assert we'll fail with an assert(). This doesn't fix anything
but certainly makes mis-uses easier to detect and debug.
Triggered by https://bugzilla.redhat.com/show_bug.cgi?id=1609349
Lennart Poettering [Fri, 3 Aug 2018 14:45:21 +0000 (16:45 +0200)]
hashmap: add an environment variable to turn off the memory pool used by hashmaps
Triggered by https://bugzilla.redhat.com/show_bug.cgi?id=1609349
Lennart Poettering [Fri, 3 Aug 2018 14:43:30 +0000 (16:43 +0200)]
man: be more explicit about thread safety of sd_journal
Triggered by https://bugzilla.redhat.com/show_bug.cgi?id=1609349
This adds two generic paragaphs we include via xinclude. One is the
"strict" version, which contains wording saying that we are thread
agnostic and what that means. And the other is the "safe" version, for
the cases we provide fully safety.
Let's then change most man pages to use either of these generic
paragraphs. With one exception: man/sd_journal_get_catalog.xml contains
both kinds of function, we hence use manual wording.
Lennart Poettering [Fri, 3 Aug 2018 14:41:42 +0000 (16:41 +0200)]
update TODO
Zbigniew Jędrzejewski-Szmek [Fri, 3 Aug 2018 11:32:01 +0000 (13:32 +0200)]
Merge pull request #9791 from poettering/user-runtime-dir-fixes
user-runtime-dir@.service fixes
Lennart Poettering [Fri, 3 Aug 2018 11:11:18 +0000 (13:11 +0200)]
Merge pull request #9787 from yuwata/dns-over-tls-log
DNS-over-TLS(openssl): fix error handling
Lennart Poettering [Fri, 3 Aug 2018 08:45:31 +0000 (10:45 +0200)]
units: assign user-runtime-dir@.service to user-%i.slice
This service won't use much resources, but it's certainly nicer to see
it attached th the user's slice along with user@.service, so that
everything we run for a specific user is properly bound into one unit.
Lennart Poettering [Fri, 3 Aug 2018 08:42:09 +0000 (10:42 +0200)]
units: order user-runtime-dir@.service after systemd-user-sessions.service
We use systemd-user-sessions.service as barrier when to allow login
sessions. With this patch user@.service is ordered after that too, so
that any login related code (which user-runtime-dir@.service is) is
guaranteed to run after the barrier, and never before.
Lennart Poettering [Thu, 2 Aug 2018 18:57:56 +0000 (20:57 +0200)]
units: make sure user-runtime-dir@.service is Type=oneshot
We order user@.service after it, hence we need to properly know when it
finished starting up.
Lennart Poettering [Thu, 2 Aug 2018 18:56:34 +0000 (20:56 +0200)]
user-runtime-dir: downgrade a few log messages to LOG_DEBUG that we ignore
As the comments already say it might be quite likely that
$XDG_RUNTIME_DIR is not set up as mount, and we shouldn't complain about
that.
Moreover, let's make this idempotent, so that a runtime dir that is
already gone and is removed again doesn't cause failure.
Yu Watanabe [Thu, 2 Aug 2018 22:18:43 +0000 (07:18 +0900)]
resolve: openssl: make dnstls_stream_{write,read}() may return zero
Yu Watanabe [Thu, 2 Aug 2018 21:34:19 +0000 (06:34 +0900)]
resolve: fix error handling of SSL_shutdown()
Yu Watanabe [Thu, 2 Aug 2018 21:29:38 +0000 (06:29 +0900)]
resolve: fix typo and coding style cleanups
Yu Watanabe [Thu, 2 Aug 2018 21:26:58 +0000 (06:26 +0900)]
resolve: clear error queue before calling SSL_*()
Lennart Poettering [Thu, 2 Aug 2018 18:05:51 +0000 (20:05 +0200)]
man: document that 'nofail' also has an effect on ordering
Prompted by #9765
Lennart Poettering [Thu, 2 Aug 2018 15:07:03 +0000 (17:07 +0200)]
Merge pull request #9776 from keszybz/sd-bus-docs
More man pages for sd-bus and related changes
Yu Watanabe [Thu, 2 Aug 2018 13:38:22 +0000 (22:38 +0900)]
resolve: fix error handling of dns_stream_read()
Zbigniew Jędrzejewski-Szmek [Thu, 2 Aug 2018 13:53:05 +0000 (15:53 +0200)]
Merge pull request #9764 from yuwata/hash_ops-cleanups
Hash ops cleanups
Zbigniew Jędrzejewski-Szmek [Thu, 2 Aug 2018 08:38:51 +0000 (10:38 +0200)]
man: add sd_bus_message_rewind(3)
Zbigniew Jędrzejewski-Szmek [Wed, 1 Aug 2018 22:00:15 +0000 (00:00 +0200)]
man: document sd_bus_slot_get_bus in sd_bus_slot_ref(3)
Similar reasoning as for sd_bus_message_get_bus().
Zbigniew Jędrzejewski-Szmek [Wed, 1 Aug 2018 21:56:36 +0000 (23:56 +0200)]
man: add sd_bus_slot_set_description(3)
Zbigniew Jędrzejewski-Szmek [Wed, 1 Aug 2018 21:41:49 +0000 (23:41 +0200)]
man: add sd_bus_slot_set_userdata(3)
Zbigniew Jędrzejewski-Szmek [Wed, 1 Aug 2018 15:27:31 +0000 (17:27 +0200)]
man: add sd_bus_message_set_expect_reply(3)
Zbigniew Jędrzejewski-Szmek [Fri, 27 Jul 2018 15:47:17 +0000 (17:47 +0200)]
man: document sd_bus_message_get_bus() in sd_bus_message_new(3)
It's not a particularly obvious place, but it's a trivial function that isn't
worth a man page of its own, and it doesn't fit anywhere else either.
Zbigniew Jędrzejewski-Szmek [Fri, 27 Jul 2018 14:33:02 +0000 (16:33 +0200)]
man: add sd_bus_message_verify_type(3)
Zbigniew Jędrzejewski-Szmek [Fri, 27 Jul 2018 13:39:46 +0000 (15:39 +0200)]
sd-bus: verify destination and sender values when setting
We would verify destination e.g. in sd_bus_message_new_call, but allow setting
any value later on with sd_bus_message_set_destination. I assume this check was
omitted not on purpose.
Zbigniew Jędrzejewski-Szmek [Fri, 27 Jul 2018 12:58:41 +0000 (14:58 +0200)]
man: add sd_bus_message_get_type(3)
sd_bus_message{get_type,is_signal,is_method_call,is_method_error} get one man
page.
sd_bus_message_{set,get}_{destination,path,interface,member,sender} are put in
the second one.
Zbigniew Jędrzejewski-Szmek [Fri, 27 Jul 2018 12:15:50 +0000 (14:15 +0200)]
man: add sd_bus_slot_ref(3)
Zbigniew Jędrzejewski-Szmek [Fri, 27 Jul 2018 12:07:02 +0000 (14:07 +0200)]
man: document sd_bus_message_new_method_return
Zbigniew Jędrzejewski-Szmek [Fri, 27 Jul 2018 08:32:20 +0000 (10:32 +0200)]
meson: print stats in check-api-docs
Zbigniew Jędrzejewski-Szmek [Fri, 27 Jul 2018 07:56:43 +0000 (09:56 +0200)]
man: document *_with_description functions
Zbigniew Jędrzejewski-Szmek [Fri, 27 Jul 2018 07:03:04 +0000 (09:03 +0200)]
man: add sd_bus_message_new(3)
Zbigniew Jędrzejewski-Szmek [Fri, 27 Jul 2018 06:24:45 +0000 (08:24 +0200)]
man: move more examples to stand-alone files and use 2-space indentation consistenty
Moving them out makes it easier to run them through a compiler, use automatic
indentation, and opens the possibility to provide a download link in the
future. I verified that all examples compile cleanly.
(2-space indentation is used because the examples are already significantly
indented in the man page, and we need to keep them narrow so that they display
well on standard terminals.)
Zbigniew Jędrzejewski-Szmek [Fri, 27 Jul 2018 06:06:07 +0000 (08:06 +0200)]
man: clarify what can be NULL in an sd_bus_unrefp call
Confusingly, the argument is called 'bus' in all cases. Let's not give people
the idea to call sd_bus_unrefp(NULL).
Zbigniew Jędrzejewski-Szmek [Thu, 26 Jul 2018 18:00:36 +0000 (20:00 +0200)]
man: add sd_bus_message_new_call(3)
Zbigniew Jędrzejewski-Szmek [Tue, 24 Jul 2018 21:23:29 +0000 (23:23 +0200)]
man: add sd_bus_message_new_signal(3)
Yu Watanabe [Tue, 31 Jul 2018 16:18:57 +0000 (01:18 +0900)]
basic: use FAMILY_ADDRESS_SIZE() macro in hash_ops for in_addr_data
Yu Watanabe [Tue, 31 Jul 2018 16:15:23 +0000 (01:15 +0900)]
network: make compare functions safe
As the variable 'line' is unsigned.
Zbigniew Jędrzejewski-Szmek [Thu, 2 Aug 2018 07:50:39 +0000 (09:50 +0200)]
Merge pull request #9624 from poettering/service-state-flush
flush out ExecStatus structures when a new service cycle begins
Yu Watanabe [Wed, 1 Aug 2018 01:42:49 +0000 (10:42 +0900)]
network: add more log messages in configuring DHCP6 client
Yu Watanabe [Wed, 1 Aug 2018 01:35:17 +0000 (10:35 +0900)]
network: add more log messages in configuring DHCP4 client
Yu Watanabe [Thu, 2 Aug 2018 03:54:50 +0000 (12:54 +0900)]
Merge pull request #9770 from keszybz/etc-resolved-no-address
Slightly more efficient handling of /etc/hosts blacklist entries
Zbigniew Jędrzejewski-Szmek [Wed, 1 Aug 2018 10:41:54 +0000 (12:41 +0200)]
resolved: change error handling for manager_etc_hosts_read()
The choice what errors to ignore is left to the caller, and the caller is
changed to ignore all errors.
On error, previously read data is kept. So if e.g. an oom error happens, we
will continue to return slightly stale data instead of pretending we have no
entries for the given address. I think that's better, for example when
/etc/hosts contains some important overrides that external DNS should not be
queried for.
Zbigniew Jędrzejewski-Szmek [Tue, 31 Jul 2018 13:09:13 +0000 (15:09 +0200)]
resolved: keep addresses mapped to ::0 in a separate set
We'd store every 0.0.0.0 and ::0 entry as a structure without any addresses
allocated. This is a somewhat common use case, let's optimize it a bit.
This gives some memory savings and a bit faster response time too:
'time build/test-resolved-etc-hosts hosts' goes from 7.7s to 5.6s, and
memory use as reported by valgrind for ~10000 hosts is reduced
==18097== total heap usage: 29,902 allocs, 29,902 frees, 2,136,437 bytes allocated
==18240== total heap usage: 19,955 allocs, 19,955 frees, 1,556,021 bytes allocated
Also rename 'suppress' to 'found' (with reverse meaning). I think this makes
the intent clearer.
Zbigniew Jędrzejewski-Szmek [Tue, 31 Jul 2018 09:01:21 +0000 (11:01 +0200)]
test-resolved-etc-hosts: add tests for /etc/hosts parsing
Calling 'build/test-resolved-etc-hosts filename' parses just that file.
This is useful to test against https://hosts.ubuntu101.co.za/hosts.
Zbigniew Jędrzejewski-Szmek [Tue, 31 Jul 2018 08:01:46 +0000 (10:01 +0200)]
resolved: put /etc/hosts hashmaps in a structure and pass that around
This hides the details of juggling the two hashmaps from the callers a bit.
It also makes memory management a bit easier, because those two hashmaps share
some strings, so we can only free them together.
etc_hosts_parse() is made responsible to free the half-filled data structures
on error, which makes the caller a bit simpler.
No functional change. A refactoring to prepare for later changes.
Zbigniew Jędrzejewski-Szmek [Tue, 31 Jul 2018 14:06:43 +0000 (16:06 +0200)]
test-nss-files: simplify module name handling
- drop compatibility with autotools (/.libs/ directory)
- don't special-case "libnss_dns", just try build/libnss_foo.so.2 and libnss_foo.so.2.
This makes it possible to call e.g. build/test-nss files google.com.
Zbigniew Jędrzejewski-Szmek [Tue, 31 Jul 2018 07:44:11 +0000 (09:44 +0200)]
meson: drop parens when appending to list
Meson does not care either way, so let's use the simpler syntax. And files()
already gives a list, so nesting this in a list wouldn't be necessary even
if meson did not flatten everything.
Lennart Poettering [Tue, 31 Jul 2018 08:52:34 +0000 (10:52 +0200)]
Merge pull request #9760 from yuwata/resolve-etc-hosts-cleanup
resolve: several cleanups of handing /etc/hosts
Evgeni Golov [Mon, 30 Jul 2018 11:56:07 +0000 (13:56 +0200)]
udev: net_id: document predictable names for SR-IOV virtual devices
Yu Watanabe [Tue, 31 Jul 2018 07:12:13 +0000 (16:12 +0900)]
resolve: support address with ifname in /etc/hosts
Yu Watanabe [Tue, 31 Jul 2018 06:46:28 +0000 (15:46 +0900)]
resolve: use in_addr_data type for storing address
Yu Watanabe [Tue, 31 Jul 2018 06:45:38 +0000 (15:45 +0900)]
basic: introduce in_addr_data_hash_ops
Yu Watanabe [Fri, 27 Jul 2018 08:52:12 +0000 (17:52 +0900)]
man: move explanations about boolean and time-span value from systemd.unit to systemd.syntax
Fixes #9735.
Lennart Poettering [Mon, 30 Jul 2018 12:13:05 +0000 (14:13 +0200)]
Merge pull request #9734 from irtimmer/feature/dns-over-tls-openssl
resolved: Add OpenSSL as alternative SSL library
Lennart Poettering [Mon, 30 Jul 2018 11:25:37 +0000 (13:25 +0200)]
Merge pull request #9747 from yuwata/workaround-structured-initialization
sd-resolve: use structured initialization and a workaround for nested structs
Mike Palmer [Sun, 29 Jul 2018 06:08:31 +0000 (23:08 -0700)]
Expanding evdev device match for Razer Blade Stealth (2017)
Lennart Poettering [Mon, 30 Jul 2018 10:40:20 +0000 (12:40 +0200)]
Merge pull request #9742 from yuwata/workaround-9718
resolve: add option to toggle reading /etc/hosts
Yu Watanabe [Sun, 29 Jul 2018 07:04:56 +0000 (16:04 +0900)]
sd-resolve: workaround for structured initialization to nested structs
When a nested struct is initialized by structured initializer, then
padding space is not cleared by zero. So, before setting values,
this makes explicitly set zero including padding.
This fixes the following false positive warning by valgrind:
```
==492== Syscall param sendmsg(msg.msg_iov[0]) points to uninitialised byte(s)
==492== at 0x56D0CF7: sendmsg (in /usr/lib64/libpthread-2.27.so)
==492== by 0x4FDD3C5: sd_resolve_getaddrinfo (sd-resolve.c:975)
==492== by 0x110B9E: manager_connect (timesyncd-manager.c:879)
==492== by 0x10B729: main (timesyncd.c:165)
==492== Address 0x1fff0008f1 is on thread 1's stack
==492== in frame #1, created by sd_resolve_getaddrinfo (sd-resolve.c:928)
==492==
```
Yu Watanabe [Sun, 29 Jul 2018 07:01:37 +0000 (16:01 +0900)]
sd-resolve: use structured initialization at more places
Yu Watanabe [Sat, 28 Jul 2018 12:46:22 +0000 (21:46 +0900)]
man: use literal tag
Yu Watanabe [Sat, 28 Jul 2018 12:46:00 +0000 (21:46 +0900)]
resolve: add option to toggle reading /etc/hosts
Workaround for #9718.
Yu Watanabe [Sat, 28 Jul 2018 11:36:13 +0000 (20:36 +0900)]
resolve: make manager_etc_hosts_read() static
Iwan Timmer [Thu, 26 Jul 2018 23:01:58 +0000 (00:01 +0100)]
resolved: TCP Fast Open and TLS Session Tickets for OpenSSL
To decreae latency this add support for TFO and TLS Session Tickets. As OpenSSL wouldn't let you easily set a different function all written data is temporarily cached and therefore needs to be flushed after each SSL function which can write data.
Iwan Timmer [Thu, 26 Jul 2018 21:47:50 +0000 (22:47 +0100)]
resolved: basic OpenSSL support for DNS-over-TLS
This provides basic OpenSSL support without optimizations like TCP Fast Open and TLS Session Tickets.
Notice only a single SSL library can be enabled at a time and therefore journald functions provided by GnuTLS will be disabled when using OpenSSL.
Fixes #9531
Iwan Timmer [Thu, 26 Jul 2018 19:34:16 +0000 (20:34 +0100)]
resolved: set io events after receiving EAGAIN for TLS
During handshake and TLS session closing, messages needs to be exchanged. Therefore this patch overrides the requested IO events for the TCP stream when the TLS is waiting for sending or receiving of messages during theses periods. This fixes issues with correctly closing the TLS stream and prevents the handshake from hanging in rare cases (not seen yet).
Iwan Timmer [Tue, 17 Jul 2018 06:34:29 +0000 (23:34 -0700)]
resolved: refactor GnuTLS specific code in separate source file
This is a first step towards supporting alternative TLS implementations for DNS-over-TLS.
Co-authored-by: Filipe Brandenburger <filbranden@google.com>
Michael Biebl [Wed, 25 Jul 2018 11:58:00 +0000 (13:58 +0200)]
test: Increase qemu timeout from 90s to 180s
The usage of an initrd made TEST-09-ISSUE-2691 more likely to fail with
a timeout, so increase the timeout by 90s and adjust TimeoutStopSec=
accordingly.
Lennart Poettering [Fri, 27 Jul 2018 07:56:24 +0000 (09:56 +0200)]
Merge pull request #9726 from dkozovsk/master
signal safety fixes exit ->_exit, call of page_size to prevent call of sysconf from signal handler
Lennart Poettering [Thu, 26 Jul 2018 14:55:27 +0000 (16:55 +0200)]
update TODO
Erik Kooistra [Thu, 26 Jul 2018 11:35:55 +0000 (13:35 +0200)]
hwdb: Added correct ACCEL_MOUNT_MATRIX for the Asus TP412UA
Daniel [Thu, 26 Jul 2018 13:39:12 +0000 (15:39 +0200)]
void call of page_size guarantees that sysconf is not called from signal handler
Daniel [Thu, 26 Jul 2018 12:47:38 +0000 (14:47 +0200)]
changed exit(4) to asynchronous-safe _exit(4) in signal handler sig_alrm
Zbigniew Jędrzejewski-Szmek [Thu, 26 Jul 2018 12:22:15 +0000 (14:22 +0200)]
Merge pull request #9721 from yuwata/fix-resolve-memleak
Fix resolve memleak
Lennart Poettering [Thu, 26 Jul 2018 12:03:18 +0000 (14:03 +0200)]
Merge pull request #9719 from poettering/sleep-fixes
require the kernel image to still exist before allowing hibernation
Zbigniew Jędrzejewski-Szmek [Thu, 26 Jul 2018 09:42:00 +0000 (11:42 +0200)]
Merge pull request #9720 from yuwata/fix-9702
Fix DynamicUser=yes with static User= whose UID and GID are different
Lennart Poettering [Wed, 25 Jul 2018 20:23:17 +0000 (22:23 +0200)]
hwbd: whitespace fix-up
A correction for
505707490a201c27121dbeb27101fe0c9b5f9664.
Lennart Poettering [Wed, 25 Jul 2018 20:22:37 +0000 (22:22 +0200)]
sleep-config: library code should not log beyond LOG_DEBUG
Lennart Poettering [Wed, 25 Jul 2018 20:19:44 +0000 (22:19 +0200)]
sleep: offer hibernation only if the kernel image still exists
This makes hibernation unavailable if the kernel image we are currently
running was removed. This is supposed to be superficial protection
against hibernating a system we can never return from because the kernel
has been updated and the kernel we currently run is not available
anymore.
We look at a couple of places for the kernel, which should cover all
distributions I know off. Should I have missed a path I am sure people
will quickly notice and we can add more places to check. (or maybe
convince those distros to stick their kernels at a standard place)
Lennart Poettering [Wed, 25 Jul 2018 19:43:09 +0000 (21:43 +0200)]
sleep-config: eat up errors only after debug logging about them
Lennart Poettering [Wed, 25 Jul 2018 19:41:58 +0000 (21:41 +0200)]
sleep-config: partitions can't be deleted, only files can
This fixes something I think was basically a typo introduced in
db69869f264af2d1afcdd3e573e0e9fdd5bef065.
Yu Watanabe [Thu, 26 Jul 2018 08:43:09 +0000 (17:43 +0900)]
resolve: use structured initialization and use new() instead of new0()
Yu Watanabe [Thu, 26 Jul 2018 08:33:23 +0000 (17:33 +0900)]
resolve: fix memleak
Zbigniew Jędrzejewski-Szmek [Thu, 26 Jul 2018 08:42:50 +0000 (10:42 +0200)]
Merge pull request #9684 from yuwata/fix-9672
timedate, locale: fix barrier to suppress multiple function calls
Andrew Jorgensen [Wed, 25 Jul 2018 15:06:57 +0000 (08:06 -0700)]
shared/sleep-config: exclude zram devices from hibernation candidates
On a host with sufficiently large zram but with no actual swap, logind will
respond to CanHibernate() with yes. With this patch, it will correctly respond
no, unless there are other swap devices to consider.
Zbigniew Jędrzejewski-Szmek [Thu, 26 Jul 2018 08:16:25 +0000 (10:16 +0200)]
Merge pull request #9504 from poettering/nss-deadlock
some nss deadlock love
Zbigniew Jędrzejewski-Szmek [Thu, 26 Jul 2018 08:13:56 +0000 (10:13 +0200)]
Merge pull request #9484 from poettering/permille-everywhere
Permille everywhere
Zbigniew Jędrzejewski-Szmek [Thu, 26 Jul 2018 07:34:11 +0000 (09:34 +0200)]
Merge pull request #9620 from poettering/type-exec
add new Type=exec service type
Yu Watanabe [Thu, 26 Jul 2018 02:59:53 +0000 (11:59 +0900)]
test: add tests for DynamicUser= with static User= whose UID and GID are different
Yu Watanabe [Thu, 26 Jul 2018 02:42:54 +0000 (11:42 +0900)]
core: fix gid when DynamicUser=yes with static User=
When DynamicUser=yes and static User= are set, and the user has
different uid and gid, then as the storage socket for the dynamic
user does not contains gid, we need to obtain gid.
Follow-up for
9ec655cbbd7505ef465e0444da0622e46099ce42.
Fixes #9702.
Yu Watanabe [Sun, 22 Jul 2018 14:10:02 +0000 (23:10 +0900)]
timedate: defer the property changed signal until job of starting/stopping NTP service is finished
Before this, the property changed signal is emitted immediately after
StartUnit/StopUnit method is called. So, the running state of the NTP
client service may not updated.
This makes the timing of emitting property changed signal is deferred
until job of starting/stopping NTP client service is completed.
Fixes #9672.
Yu Watanabe [Sat, 21 Jul 2018 14:21:28 +0000 (23:21 +0900)]
locale: increment reference count of sd_bus_message
Yu Watanabe [Sat, 21 Jul 2018 14:07:53 +0000 (23:07 +0900)]
timedate: increment reference count of sd_bus_message
The commit
5d280742b645a69a19e7f9131adc0c95f5c7fa07 introduces a
barrier to suppress calling context_update_ntp_status() multiple times.
However, it just stores the address of sd_bus_message object. So,
when an address is reused on the subsequent message, then the status
of NTP clients are not updated.
This makes the stored message object is referenced by the context
object. So, the subsequent message is on cirtainly different address.
Lennart Poettering [Wed, 25 Jul 2018 18:36:11 +0000 (20:36 +0200)]
NEWS: add entry about Type=exec and announce that systemd-run is going to default to it in 241
Lennart Poettering [Tue, 17 Jul 2018 10:35:12 +0000 (12:35 +0200)]
test: add test for Type=exec
Lennart Poettering [Tue, 17 Jul 2018 10:01:26 +0000 (12:01 +0200)]
man: document the new Type=exec type
And while we are at it, let's rearrange and extend the Type=
documentation a bit. Let's make it an itemized list, and let's add a
paragraph explaining which type best to use.
Lennart Poettering [Tue, 17 Jul 2018 09:47:14 +0000 (11:47 +0200)]
core: introduce new Type=exec service type
Users are often surprised that "systemd-run" command lines like
"systemd-run -p User=idontexist /bin/true" will return successfully,
even though the logs show that the process couldn't be invoked, as the
user "idontexist" doesn't exist. This is because Type=simple will only
wait until fork() succeeded before returning start-up success.
This patch adds a new service type Type=exec, which is very similar to
Type=simple, but waits until the child process completed the execve()
before returning success. It uses a pipe that has O_CLOEXEC set for this
logic, so that the kernel automatically sends POLLHUP on it when the
execve() succeeded but leaves the pipe open if not. This means PID 1
waits exactly until the execve() succeeded in the child, and not longer
and not shorter, which is the desired functionality.
Making use of this new functionality, the command line
"systemd-run -p User=idontexist -p Type=exec /bin/true" will now fail,
as expected.
Lennart Poettering [Thu, 5 Jul 2018 08:00:52 +0000 (10:00 +0200)]
execute: use our usual syntax for defining bit masks
Lennart Poettering [Thu, 5 Jul 2018 07:56:54 +0000 (09:56 +0200)]
core: swap order of "n_storage_fds" and "n_socket_fds" parameters
When process fd lists to pass to activated programs we always place the
socket activation fds first, and the storage fds last. Irritatingly in
almost all calls the "n_storage_fds" parameter (i.e. the number of
storage fds to pass) came first so far, and the "n_socket_fds" parameter
second. Let's clean this up, and specify the number of fds in the order
the fds themselves are passed.
(Also, let's fix one more case where "unsigned" was used to size an
array, while we should use "size_t" instead.)
Lennart Poettering [Tue, 17 Jul 2018 10:24:50 +0000 (12:24 +0200)]
sd-login: let's also make sd-login understand ".host"
if sd-bus and machined grok it, then sd-login should grok it too.