Compare commits

...

35 Commits

Author SHA1 Message Date
Lennart Poettering 9494da41c2 nss-systemd: don't synthesize root/nobody when iterating
Fixes: #15160
2020-04-23 23:07:08 +02:00
Daan De Meyer 68b5003bc1 sd-bus: Add sd_bus_message_get_creds docs 2020-04-23 22:56:10 +02:00
Daan De Meyer 0e4305eeea sd-bus: Add sd_bus_get_name_machine_id docs 2020-04-23 22:40:20 +02:00
Daan De Meyer d7fbc6804e sd-bus: Add sd_bus_send_to docs 2020-04-23 22:38:44 +02:00
Lennart Poettering bf39cb7b92
Merge pull request #15566 from poettering/destroy-binfmt
unregister binary formats during shutdown
2020-04-23 21:15:22 +02:00
Lennart Poettering 113a51d221 home: fix strv NUL termination
Fixes: #15559
2020-04-23 21:15:02 +02:00
Zbigniew Jędrzejewski-Szmek 927cffd57f Merge pull request #15569 from DaanDeMeyer/sd-bus-message-peek-type-docs 2020-04-23 20:11:14 +02:00
Lennart Poettering b2cdefad3a networkd: don't do lldp rx nor tx on bond devices
Fixes: #15146
2020-04-23 20:01:30 +02:00
Zbigniew Jędrzejewski-Szmek 37f446eab7
Merge pull request #15550 from DaanDeMeyer/sd-bus-open/close/enter/exit-container-docs
sd-bus: Add sd_bus_open/close/enter/exit_container docs
2020-04-23 19:58:43 +02:00
Zbigniew Jędrzejewski-Szmek 9d569d5fcb man: add a description of handling of single-label names
It turns out that our man page didn't describe the handling of single-label
names almost at all. This probably adds to the confusion regarding the subject.
So let's first describe what our current implementation is doing.

Quoting https://www.iab.org/documents/correspondence-reports-documents/2013-2/iab-statement-dotless-domains-considered-harmful/:
> Applications and platforms that apply a suffix search list to a single-label
> name are in conformance with IETF standards track RFCs. Furthermore,
> applications and platforms that do not query DNS for a TLD are in conformance
> with IETF standards track recommendations

Current behaviour is in line with that recommendation.

For #13763.
2020-04-23 19:54:52 +02:00
Lennart Poettering 035e3cb9f9
Merge pull request #15563 from keszybz/wait-callback-tweak
Add NULL callback check in one more place
2020-04-23 19:50:36 +02:00
Lennart Poettering 08508c4862
Merge pull request #15561 from poettering/udev-memdup-fix
udev: nulstr NUL termination fix
2020-04-23 19:50:12 +02:00
Daan De Meyer 3df22bb5c8 sd-bus: Add sd_bus_message_peek_type docs 2020-04-23 19:37:21 +02:00
Daan De Meyer 7cd40caa66 sd-bus: Add sd_bus_message_open/close/enter/exit_container docs 2020-04-23 18:30:40 +02:00
Daan De Meyer 31e4abd1a6 sd-bus: Fix typo in sd_bus_message_append_array docs 2020-04-23 18:27:34 +02:00
Lennart Poettering 0f4a141744
Merge pull request #15504 from poettering/cmsg-find-pure
just the recvmsg_safe() stuff from #15457
2020-04-23 17:28:19 +02:00
Lennart Poettering cd9aa8f0f9 man: document binfmt's new --unregister switch 2020-04-23 17:14:54 +02:00
Lennart Poettering 846acb6798 binfmt: also unregister binfmt entries from unit
We unregister binfmt_misc twice during shutdown with this change:

1. A previous commit added support for doing that in the final shutdown
   phase, i.e. when we do the aggressive umount loop. This is the robust
   thing to do, in case the earlier ("clean") shutdown phase didn't work
   for some reason.

2. This commit adds support for doing that when systemd-binfmt.service
   is stopped. This is a good idea so that people can order mounts
   before the service if they want to register binaries from such
   mounts, as in that case we'll undo the registration on shutdown
   again, before unmounting those mounts.

And all that, just because of that weird "F" flag the kernel introduced
that can pin files...

Fixes: #14981
2020-04-23 17:14:45 +02:00
Lennart Poettering f3670df13e binfmt: modernize code a bit
Let's just copy out the bit of the string we need, and let's make sure
we refuse rules called "status" and "register", since those are special
files in binfmt_misc's file system.
2020-04-23 17:14:41 +02:00
Lennart Poettering 0282c0285a shutdown: unregister all binfmt_misc entries before entering shutdown loop
Apparently if the new "F" flag is used they might pin files, which
blocks us from unmounting things. Let's hence clear this up explicitly.
Before entering our umount loop.

Fixes: #14981
2020-04-23 17:14:38 +02:00
Lennart Poettering 965cc99416 shared: add common helper for unregistering all binfmt entries 2020-04-23 17:13:50 +02:00
Lennart Poettering a9ab5cdb50
Merge pull request #15472 from keszybz/dbus-api-docs
A few more dbus api documentation updates
2020-04-23 17:01:11 +02:00
Zbigniew Jędrzejewski-Szmek d3d53e5cd1 shared: add NULL callback check in one more place
Follow-up for 9f65637308.
2020-04-23 14:53:54 +02:00
Zbigniew Jędrzejewski-Szmek 8f3e342fa9 core: fix unused variable warning when !HAVE_SECCOMP 2020-04-23 14:42:09 +02:00
Lennart Poettering 9663ed378e udev: use STR_IN_SET() wher eit makes sense 2020-04-23 13:56:21 +02:00
Lennart Poettering cd3c8a117c udev: prepare memory for extra NUL termination for NULSTR
Fixes: #15162
2020-04-23 13:56:21 +02:00
Lennart Poettering 3691bcf3c5 tree-wide: use recvmsg_safe() at various places
Let's be extra careful whenever we return from recvmsg() and see
MSG_CTRUNC set. This generally means we ran into a programming error, as
we didn't size the control buffer large enough. It's an error condition
we should at least log about, or propagate up. Hence do that.

This is particularly important when receiving fds, since for those the
control data can be of any size. In particular on stream sockets that's
nasty, because if we miss an fd because of control data truncation we
cannot recover, we might not even realize that we are one off.

(Also, when failing early, if there's any chance the socket might be
AF_UNIX let's close all received fds, all the time. We got this right
most of the time, but there were a few cases missing. God, UNIX is hard
to use)
2020-04-23 09:41:47 +02:00
Lennart Poettering 47eae6ce0c socket-util: add recvmsg_safe() wrapper that handles MSG_CTRUNC 2020-04-23 09:40:56 +02:00
Zbigniew Jędrzejewski-Szmek beb1d28654 man: remove gendered pronoun and reindent a paragraph 2020-04-21 17:10:21 +02:00
Zbigniew Jędrzejewski-Szmek 98ab0daeeb docs: use "polkit" to refer to PolicyKit
See d35f51ea84 for justification.

First use in each file is turned into a link to the documentation page.
2020-04-21 17:10:02 +02:00
Zbigniew Jędrzejewski-Szmek 10d5ce0aa5 man: fix two typos
Pointed out by @boucman and @DaanDeMeyer during review.
2020-04-21 17:10:02 +02:00
Zbigniew Jędrzejewski-Szmek 2a9159244b man: timedate1(5) — add missing descriptions 2020-04-21 17:10:02 +02:00
Zbigniew Jędrzejewski-Szmek 5d2262d7c3 man: hostname(5) — add description of methods and properties 2020-04-21 17:10:02 +02:00
Zbigniew Jędrzejewski-Szmek 38b38500c6 tree-wide: use "hostname" spelling everywhere
It's not that I think that "hostname" is vastly superior to "host name". Quite
the opposite — the difference is small, and in some context the two-word version
does fit better. But in the tree, there are ~200 occurrences of the first, and
>1600 of the other, and consistent spelling is more important than any particular
spelling choice.
2020-04-21 16:58:04 +02:00
Zbigniew Jędrzejewski-Szmek debf2ddd28 man: reorder hostname1(5) 2020-04-21 16:58:04 +02:00
102 changed files with 1052 additions and 525 deletions

20
NEWS
View File

@ -280,7 +280,7 @@ CHANGES WITH 245:
such files in version 243. such files in version 243.
* systemd-logind will now validate access to the operation of changing * systemd-logind will now validate access to the operation of changing
the virtual terminal via a PolicyKit action. By default, only users the virtual terminal via a polkit action. By default, only users
with at least one session on a local VT are granted permission. with at least one session on a local VT are granted permission.
* When systemd sets up PAM sessions that invoked service processes * When systemd sets up PAM sessions that invoked service processes
@ -2032,7 +2032,7 @@ CHANGES WITH 239:
lookup is likely to trigger nss-ldap which in turn might use NSS to lookup is likely to trigger nss-ldap which in turn might use NSS to
ask systemd-resolved for hostname lookups. This will hence result in ask systemd-resolved for hostname lookups. This will hence result in
a deadlock: a user name lookup in order to start a deadlock: a user name lookup in order to start
systemd-resolved.service will result in a host name lookup for which systemd-resolved.service will result in a hostname lookup for which
systemd-resolved.service needs to be started already. There are systemd-resolved.service needs to be started already. There are
multiple ways to work around this problem: pre-allocate the multiple ways to work around this problem: pre-allocate the
"systemd-resolve" user on such systems, so that nss-ldap won't be "systemd-resolve" user on such systems, so that nss-ldap won't be
@ -3001,7 +3001,7 @@ CHANGES WITH 235:
A/AAAA resource record for the "_gateway" hostname, pointing to the A/AAAA resource record for the "_gateway" hostname, pointing to the
current default IP gateway. Previously it did that for the "gateway" current default IP gateway. Previously it did that for the "gateway"
name, hampering adoption, as some distributions wanted to leave that name, hampering adoption, as some distributions wanted to leave that
host name open for local use. The old behaviour may still be hostname open for local use. The old behaviour may still be
requested at build time. requested at build time.
* systemd-networkd's [Address] section in .network files gained a new * systemd-networkd's [Address] section in .network files gained a new
@ -4342,7 +4342,7 @@ CHANGES WITH 230:
again don't consider turning this on in your stable, LTS or again don't consider turning this on in your stable, LTS or
production release just yet. (Note that you have to enable production release just yet. (Note that you have to enable
nss-resolve in /etc/nsswitch.conf, to actually use systemd-resolved nss-resolve in /etc/nsswitch.conf, to actually use systemd-resolved
and its DNSSEC mode for host name resolution from local and its DNSSEC mode for hostname resolution from local
applications.) applications.)
* systemd-resolve conveniently resolves DANE records with the --tlsa * systemd-resolve conveniently resolves DANE records with the --tlsa
@ -6160,14 +6160,14 @@ CHANGES WITH 218:
for a unit, as declared in the (usually vendor-supplied) for a unit, as declared in the (usually vendor-supplied)
system preset files. system preset files.
* nss-myhostname will now resolve the single-label host name * nss-myhostname will now resolve the single-label hostname
"gateway" to the locally configured default IP routing "gateway" to the locally configured default IP routing
gateways, ordered by their metrics. This assigns a stable gateways, ordered by their metrics. This assigns a stable
name to the used gateways, regardless which ones are name to the used gateways, regardless which ones are
currently configured. Note that the name will only be currently configured. Note that the name will only be
resolved after all other name sources (if nss-myhostname is resolved after all other name sources (if nss-myhostname is
configured properly) and should hence not negatively impact configured properly) and should hence not negatively impact
systems that use the single-label host name "gateway" in systems that use the single-label hostname "gateway" in
other contexts. other contexts.
* systemd-inhibit now allows filtering by mode when listing * systemd-inhibit now allows filtering by mode when listing
@ -7595,7 +7595,7 @@ CHANGES WITH 210:
reported by uname()'s "machine" field. reported by uname()'s "machine" field.
* systemd-networkd now supports matching on the system * systemd-networkd now supports matching on the system
virtualization, architecture, kernel command line, host name virtualization, architecture, kernel command line, hostname
and machine ID. and machine ID.
* logind is now a lot more aggressive when suspending the * logind is now a lot more aggressive when suspending the
@ -7913,12 +7913,12 @@ CHANGES WITH 209:
example, a line that creates /run/nologin). example, a line that creates /run/nologin).
* A new API "sd-resolve.h" has been added which provides a simple * A new API "sd-resolve.h" has been added which provides a simple
asynchronous wrapper around glibc NSS host name resolution asynchronous wrapper around glibc NSS hostname resolution
calls, such as getaddrinfo(). In contrast to glibc's calls, such as getaddrinfo(). In contrast to glibc's
getaddrinfo_a(), it does not use signals. In contrast to most getaddrinfo_a(), it does not use signals. In contrast to most
other asynchronous name resolution libraries, this one does other asynchronous name resolution libraries, this one does
not reimplement DNS, but reuses NSS, so that alternate not reimplement DNS, but reuses NSS, so that alternate
host name resolution systems continue to work, such as mDNS, hostname resolution systems continue to work, such as mDNS,
LDAP, etc. This API is based on libasyncns, but it has been LDAP, etc. This API is based on libasyncns, but it has been
cleaned up for inclusion in systemd. cleaned up for inclusion in systemd.
@ -9702,7 +9702,7 @@ CHANGES WITH 190:
when he over-mounts a non-empty directory. when he over-mounts a non-empty directory.
* There are new specifiers that are resolved in unit files, * There are new specifiers that are resolved in unit files,
for the host name (%H), the machine ID (%m) and the boot ID for the hostname (%H), the machine ID (%m) and the boot ID
(%b). (%b).
Contributions from: Allin Cottrell, Auke Kok, Brandon Philips, Contributions from: Allin Cottrell, Auke Kok, Brandon Philips,

2
TODO
View File

@ -1170,7 +1170,7 @@ Features:
a carrier is lost on a link. It should be removed instantly. a carrier is lost on a link. It should be removed instantly.
- expose in the API the following bits: - expose in the API the following bits:
- option 15, domain name and/or option 119, search list - option 15, domain name and/or option 119, search list
- option 12, host name and/or option 81, fqdn - option 12, hostname and/or option 81, fqdn
- option 123, 144, geolocation - option 123, 144, geolocation
- option 252, configure http proxy (PAC/wpad) - option 252, configure http proxy (PAC/wpad)
- provide a way to define a per-network interface default metric value - provide a way to define a per-network interface default metric value

View File

@ -424,7 +424,7 @@ layout: default
## Deadlocks ## Deadlocks
- Do not issue NSS requests (that includes user name and host name lookups) - Do not issue NSS requests (that includes user name and hostname lookups)
from PID 1 as this might trigger deadlocks when those lookups involve from PID 1 as this might trigger deadlocks when those lookups involve
synchronously talking to services that we would need to start up. synchronously talking to services that we would need to start up.

View File

@ -87,7 +87,7 @@ And now, here's the list of (hopefully) all APIs that we have introduced with sy
| [Boot Loader interface](https://systemd.io/BOOT_LOADER_INTERFACE) | EFI variables | yes | yes | gummiboot | yes | - | no | | [Boot Loader interface](https://systemd.io/BOOT_LOADER_INTERFACE) | EFI variables | yes | yes | gummiboot | yes | - | no |
| [Service bus API](https://www.freedesktop.org/wiki/Software/systemd/dbus) | D-Bus | yes | yes | system-config-services | no | - | no | | [Service bus API](https://www.freedesktop.org/wiki/Software/systemd/dbus) | D-Bus | yes | yes | system-config-services | no | - | no |
| [logind](https://www.freedesktop.org/wiki/Software/systemd/logind) | D-Bus | yes | yes | GNOME | no | - | no | | [logind](https://www.freedesktop.org/wiki/Software/systemd/logind) | D-Bus | yes | yes | GNOME | no | - | no |
| [sd-login.h API](https://www.freedesktop.org/software/systemd/man/sd-login.html) | C Library | yes | yes | GNOME, PolicyKit, ... | no | - | no | | [sd-login.h API](https://www.freedesktop.org/software/systemd/man/sd-login.html) | C Library | yes | yes | GNOME, polkit, ... | no | - | no |
| [sd-daemon.h API](https://www.freedesktop.org/software/systemd/man/sd-daemon.html) | C Library or Drop-in | yes | yes | numerous | yes | - | yes | | [sd-daemon.h API](https://www.freedesktop.org/software/systemd/man/sd-daemon.html) | C Library or Drop-in | yes | yes | numerous | yes | - | yes |
| [sd-id128.h API](https://www.freedesktop.org/software/systemd/man/sd-id128.html) | C Library | yes | yes | - | yes | - | no | | [sd-id128.h API](https://www.freedesktop.org/software/systemd/man/sd-id128.html) | C Library | yes | yes | - | yes | - | no |
| [sd-journal.h API](https://www.freedesktop.org/software/systemd/man/sd-journal.html) | C Library | yes | yes | - | maybe | - | no | | [sd-journal.h API](https://www.freedesktop.org/software/systemd/man/sd-journal.html) | C Library | yes | yes | - | maybe | - | no |

View File

@ -77,7 +77,8 @@ supports is directly available in these JSON records. Hence it makes sense for
any user management UI to expose them directly. any user management UI to expose them directly.
`systemd-homed` exposes APIs to add, remove and make changes to local users via `systemd-homed` exposes APIs to add, remove and make changes to local users via
D-Bus, with full PolicyKit hook-up. On the command line this is exposed via the D-Bus, with full [polkit](https://www.freedesktop.org/software/polkit/docs/latest/)
hook-up. On the command line this is exposed via the
`homectl` command. A graphical UI that exposes similar functionality would be `homectl` command. A graphical UI that exposes similar functionality would be
very useful, exposing the various new account settings, and in particular very useful, exposing the various new account settings, and in particular
providing a stream-lined UI for enrolling new-style authentication tokens such providing a stream-lined UI for enrolling new-style authentication tokens such

View File

@ -57,7 +57,7 @@
<para>Use <para>Use
<citerefentry><refentrytitle>systemd-firstboot</refentrytitle><manvolnum>1</manvolnum></citerefentry> <citerefentry><refentrytitle>systemd-firstboot</refentrytitle><manvolnum>1</manvolnum></citerefentry>
to initialize the system host name for mounted (but not booted) to initialize the system hostname for mounted (but not booted)
system images.</para> system images.</para>
</refsect1> </refsect1>
@ -84,7 +84,7 @@
simplified in regards to the character set used before the latter are updated. This is done by removing special simplified in regards to the character set used before the latter are updated. This is done by removing special
characters and spaces. This ensures that the pretty and the static hostname are always closely related while characters and spaces. This ensures that the pretty and the static hostname are always closely related while
still following the validity rules of the specific name. This simplification of the hostname string is not done still following the validity rules of the specific name. This simplification of the hostname string is not done
if only the transient and/or static host names are set, and the pretty host name is left untouched.</para> if only the transient and/or static hostnames are set, and the pretty hostname is left untouched.</para>
<para>Pass the empty string <literal></literal> as the <para>Pass the empty string <literal></literal> as the
hostname to reset the selected hostnames to their default hostname to reset the selected hostnames to their default

View File

@ -70,7 +70,7 @@
<literal>Lennart's Computer</literal> an Internet hostname of <literal>Lennart's Computer</literal> an Internet hostname of
<literal>lennarts-computer</literal> might be a good choice. <literal>lennarts-computer</literal> might be a good choice.
If this parameter is not set, an application should fall back If this parameter is not set, an application should fall back
to the Internet host name for presentation to the Internet hostname for presentation
purposes.</para></listitem> purposes.</para></listitem>
</varlistentry> </varlistentry>

View File

@ -56,7 +56,7 @@
</itemizedlist> </itemizedlist>
<para>Machines are identified by names that follow the same rules <para>Machines are identified by names that follow the same rules
as UNIX and DNS host names. For details, see below.</para> as UNIX and DNS hostnames. For details, see below.</para>
<para>Machines are instantiated from disk or file system images that <para>Machines are instantiated from disk or file system images that
frequently — but not necessarily — carry the same name as machines running frequently — but not necessarily — carry the same name as machines running
@ -383,7 +383,7 @@
image is optimized for file systems that support copy-on-write, and might not be efficient on others, due to image is optimized for file systems that support copy-on-write, and might not be efficient on others, due to
file system limitations.</para> file system limitations.</para>
<para>Note that this command leaves host name, machine ID and <para>Note that this command leaves hostname, machine ID and
all other settings that could identify the instance all other settings that could identify the instance
unmodified. The original image and the cloned copy will hence unmodified. The original image and the cloned copy will hence
share these credentials, and it might be necessary to manually share these credentials, and it might be necessary to manually
@ -851,7 +851,7 @@
<para>The <command>machinectl</command> tool operates on machines <para>The <command>machinectl</command> tool operates on machines
and images whose names must be chosen following strict and images whose names must be chosen following strict
rules. Machine names must be suitable for use as host names rules. Machine names must be suitable for use as hostnames
following a conservative subset of DNS and UNIX/Linux following a conservative subset of DNS and UNIX/Linux
semantics. Specifically, they must consist of one or more semantics. Specifically, they must consist of one or more
non-empty label strings, separated by dots. No leading or trailing non-empty label strings, separated by dots. No leading or trailing

View File

@ -29,7 +29,7 @@
<title>Description</title> <title>Description</title>
<para><command>nss-resolve</command> is a plug-in module for the GNU Name Service Switch (NSS) functionality of the <para><command>nss-resolve</command> is a plug-in module for the GNU Name Service Switch (NSS) functionality of the
GNU C Library (<command>glibc</command>) enabling it to resolve host names via the GNU C Library (<command>glibc</command>) enabling it to resolve hostnames via the
<citerefentry><refentrytitle>systemd-resolved</refentrytitle><manvolnum>8</manvolnum></citerefentry> local network <citerefentry><refentrytitle>systemd-resolved</refentrytitle><manvolnum>8</manvolnum></citerefentry> local network
name resolution service. It replaces the <command>nss-dns</command> plug-in module that traditionally resolves name resolution service. It replaces the <command>nss-dns</command> plug-in module that traditionally resolves
hostnames via DNS.</para> hostnames via DNS.</para>

View File

@ -89,38 +89,6 @@ node /org/freedesktop/hostname1 {
}; };
</programlisting> </programlisting>
<!--method SetDeployment is not documented!-->
<!--method SetLocation is not documented!-->
<!--method GetProductUUID is not documented!-->
<!--property Hostname is not documented!-->
<!--property StaticHostname is not documented!-->
<!--property PrettyHostname is not documented!-->
<!--property IconName is not documented!-->
<!--property Chassis is not documented!-->
<!--property Deployment is not documented!-->
<!--property Location is not documented!-->
<!--property KernelName is not documented!-->
<!--property KernelRelease is not documented!-->
<!--property KernelVersion is not documented!-->
<!--property OperatingSystemPrettyName is not documented!-->
<!--property OperatingSystemCPEName is not documented!-->
<!--property HomeURL is not documented!-->
<!--Autogenerated cross-references for systemd.directives, do not edit--> <!--Autogenerated cross-references for systemd.directives, do not edit-->
<variablelist class="dbus-interface" generated="True" extra-ref="org.freedesktop.hostname1"/> <variablelist class="dbus-interface" generated="True" extra-ref="org.freedesktop.hostname1"/>
@ -173,7 +141,8 @@ node /org/freedesktop/hostname1 {
<para>Whenever the hostname or other metadata is changed via the daemon, <para>Whenever the hostname or other metadata is changed via the daemon,
<function>PropertyChanged</function> signals are sent out to subscribed clients. Changing a hostname <function>PropertyChanged</function> signals are sent out to subscribed clients. Changing a hostname
using this interface is authenticated via PolicyKit.</para> using this interface is authenticated via
<ulink url="https://www.freedesktop.org/software/polkit/docs/latest/">polkit</ulink>.</para>
</refsect1> </refsect1>
<refsect1> <refsect1>
@ -219,10 +188,6 @@ node /org/freedesktop/hostname1 {
it could not be auto-detected. Set this property to the empty string to reenable the automatic detection of it could not be auto-detected. Set this property to the empty string to reenable the automatic detection of
the chassis type from firmware information.</para> the chassis type from firmware information.</para>
<para>A client that wants to change the local hostname for DHCP/mDNS should invoke
<code>SetHostname("newname", false)</code> as soon as the name is available and afterwards reset it via
<code>SetHostname("")</code>.</para>
<para>Note that <filename>systemd-hostnamed</filename> starts only on request and terminates after a <para>Note that <filename>systemd-hostnamed</filename> starts only on request and terminates after a
short idle period. This effectively means that <function>PropertyChanged</function> messages are not sent short idle period. This effectively means that <function>PropertyChanged</function> messages are not sent
out for changes made directly on the files (as in: administrator edits the files with vi). This is out for changes made directly on the files (as in: administrator edits the files with vi). This is
@ -244,33 +209,91 @@ node /org/freedesktop/hostname1 {
<citerefentry><refentrytitle>machine-info</refentrytitle><manvolnum>3</manvolnum></citerefentry> <citerefentry><refentrytitle>machine-info</refentrytitle><manvolnum>3</manvolnum></citerefentry>
for that. For more information on these files and syscalls see the respective man pages.</para> for that. For more information on these files and syscalls see the respective man pages.</para>
<para>The <varname>user_interaction</varname> boolean parameters can be used to control whether PolicyKit <refsect2>
should interactively ask the user for authentication credentials if required.</para> <title>Methods and Properties</title>
<para>The PolicyKit action for <function>SetHostname()</function> is <para><function>SetHostname()</function> sets the transient (dynamic) hostname which is exposed by the
<interfacename>org.freedesktop.hostname1.set-hostname</interfacename>. For <varname>Hostname</varname> property. If empty, the transient hostname is set to the static hostname.
<function>SetStaticHostname()</function> and <function>SetPrettyHostname()</function> it is </para>
<interfacename>org.freedesktop.hostname1.set-static-hostname</interfacename>. For
<function>SetIconName()</function> and <function>SetChassis()</function> it is
<interfacename>org.freedesktop.hostname1.set-machine-info</interfacename>.</para>
<para>Here are three examples show how the pretty hostname and the icon name should be used: <para><function>SetStaticHostname()</function> sets the static hostname which is exposed by the
<varname>StaticHostname</varname> property. If empty, the built-in default of
<literal>&FALLBACK_HOSTNAME;</literal> is used.</para>
<para><function>SetPrettyHostname()</function> sets the pretty hostname which is exposed by the
<varname>PrettyHostname</varname> property.</para>
<para><function>SetIconName()</function>, <function>SetChassis()</function>,
<function>SetDeployment()</function>, and <function>SetLocation()</function> set the properties
<varname>IconName</varname> (the name of the icon representing for the machine),
<varname>Chassis</varname> (the machine form factor), <varname>Deployment</varname> (the system
deployment environment), and <varname>Location</varname> (physical system location), respectively.
</para>
<para><varname>PrettyHostname</varname>, <varname>IconName</varname>, <varname>Chassis</varname>,
<varname>Deployment</varname>, and <varname>Location</varname> are stored in
<filename>/etc/machine-info</filename>. See
<citerefentry><refentrytitle>machine-info</refentrytitle><manvolnum>5</manvolnum></citerefentry> for
the semantics of those settings.</para>
<para><function>GetProductUUID()</function> returns the "product uuid" as exposed by the kernel based
on DMI information in <filename>/sys/class/dmi/id/product_uuid</filename>. Reading the file directly
requires root privileges, and this method allows access to unprivileged clients through the polkit
framework.</para>
<para><varname>KernelName</varname>, <varname>KernelRelease</varname>, and
<varname>KernelVersion</varname> expose the kernel name (e.g. <literal>Linux</literal>), release
(e.g. <literal>5.0.0-11</literal>, and version (i.e. the build number, e.g. <literal>#11</literal>) as
reported by
<citerefentry project="man-pages"><refentrytitle>uname</refentrytitle><manvolnum>2</manvolnum></citerefentry>.
<varname>OperatingSystemPrettyName</varname>, <varname>OperatingSystemCPEName</varname>, and
<varname>HomeURL</varname> expose the <varname>PRETTY_NAME=</varname>, <varname>CPE_NAME=</varname> and
<varname>HOME_URL=</varname> fields from
<citerefentry><refentrytitle>os-release</refentrytitle><manvolnum>5</manvolnum></citerefentry>. The
purpose of those properties is to allow remote clients to access this information over D-Bus. Local
clients can access the information directly.</para>
</refsect2>
<refsect2>
<title>Security</title>
<para>The <varname>interactive</varname> boolean parameters can be used to control whether polkit
should interactively ask the user for authentication credentials if required.</para>
<para>The polkit action for <function>SetHostname()</function> is
<interfacename>org.freedesktop.hostname1.set-hostname</interfacename>. For
<function>SetStaticHostname()</function> and <function>SetPrettyHostname()</function> it is
<interfacename>org.freedesktop.hostname1.set-static-hostname</interfacename>. For
<function>SetIconName()</function> and <function>SetChassis()</function> it is
<interfacename>org.freedesktop.hostname1.set-machine-info</interfacename>.</para>
</refsect2>
</refsect1>
<refsect1>
<title>Recommendations</title>
<para>Here are three examples that show how the pretty hostname and the icon name should be used:
<itemizedlist> <itemizedlist>
<listitem><para>When registering DNS-SD services: use the pretty hostname in the service name, and <listitem><para>When registering DNS-SD services: use the pretty hostname in the service name, and pass
pass the icon name in the TXT data, if there is an icon name. Browsing clients can then show the server the icon name in the TXT data, if there is an icon name. Browsing clients can then show the server icon
icon on each service. This is especially useful for WebDAV applications or UPnP media sharing. on each service. This is especially useful for WebDAV applications or UPnP media sharing.
</para></listitem> </para></listitem>
<listitem><para>Set the bluetooth name to the pretty hostname.</para></listitem> <listitem><para>Set the bluetooth name to the pretty hostname.</para></listitem>
<listitem><para>When your file browser has a "Computer" icon, replace the name with the pretty hostname if set, and the icon with the icon name, if it is set.</para></listitem> <listitem><para>When your file browser has a "Computer" icon, replace the name with the pretty hostname
if set, and the icon with the icon name, if it is set.</para></listitem>
</itemizedlist></para> </itemizedlist></para>
<para>To properly handle name lookups with changing local hostnames without having to edit <para>To properly handle name lookups with changing local hostnames without having to edit
<filename>/etc/hosts</filename>, we recommend using <filename>systemd-hostnamed</filename> in <filename>/etc/hosts</filename>, we recommend using <filename>systemd-hostnamed</filename> in combination
combination with <citerefentry><refentrytitle>nss-myhostname</refentrytitle><manvolnum>3</manvolnum></citerefentry>. with <citerefentry><refentrytitle>nss-myhostname</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
</para> </para>
<para>A client that wants to change the local hostname for DHCP/mDNS should invoke
<code>SetHostname("newname", false)</code> as soon as the name is available and afterwards reset it via
<code>SetHostname("")</code>.</para>
<para>Here are some recommendations to follow when generating a static (internet) hostname from a pretty <para>Here are some recommendations to follow when generating a static (internet) hostname from a pretty
name: name:
<itemizedlist> <itemizedlist>
@ -314,7 +337,7 @@ node /org/freedesktop/hostname1 {
</itemizedlist></para> </itemizedlist></para>
<para>Of course, an already valid internet hostname label you enter and pass through this <para>Of course, an already valid internet hostname label you enter and pass through this
conversion should stay unmodified, so that users have direct control of it, if they want -- by simply conversion should stay unmodified, so that users have direct control of it, if they want by simply
ignoring the fact that the pretty hostname is pretty and just edit it as if it was the normal internet ignoring the fact that the pretty hostname is pretty and just edit it as if it was the normal internet
name.</para> name.</para>
</refsect1> </refsect1>

View File

@ -126,7 +126,8 @@ node /org/freedesktop/locale1 {
<para>Use the empty string for the keymap parameters you wish not to set.</para> <para>Use the empty string for the keymap parameters you wish not to set.</para>
<para>The <varname>interactive</varname> boolean parameters can be used to control whether PolicyKit <para>The <varname>interactive</varname> boolean parameters can be used to control whether
<ulink url="https://www.freedesktop.org/software/polkit/docs/latest/">polkit</ulink>
should interactively ask the user for authentication credentials if required.</para> should interactively ask the user for authentication credentials if required.</para>
</refsect2> </refsect2>
@ -160,9 +161,9 @@ node /org/freedesktop/locale1 {
<refsect2> <refsect2>
<title>Security</title> <title>Security</title>
<para>Changing the system locale or keymap using this interface is authenticated via PolicyKit. The <para>Changing the system locale or keymap using this interface is authenticated via polkit. The
PolicyKit action for <function>SetLocale()</function> is polkit action for <function>SetLocale()</function> is
<constant>org.freedesktop.locale1.set-locale</constant>. The PolicyKit action for <constant>org.freedesktop.locale1.set-locale</constant>. The polkit action for
<function>SetX11Keyboard()</function> and <function>SetVConsoleKeyboard()</function> is <function>SetX11Keyboard()</function> and <function>SetVConsoleKeyboard()</function> is
<constant>org.freedesktop.locale1.set-keyboard</constant>.</para> <constant>org.freedesktop.locale1.set-keyboard</constant>.</para>
</refsect2> </refsect2>

View File

@ -496,22 +496,24 @@ node /org/freedesktop/login1 {
and seat are identified by their respective IDs.</para> and seat are identified by their respective IDs.</para>
<para><function>SetUserLinger()</function> enables or disables user lingering. If enabled, the runtime <para><function>SetUserLinger()</function> enables or disables user lingering. If enabled, the runtime
directory of a user is kept around and he may continue to run processes while he is logged out. If directory of a user is kept around and they may continue to run processes while logged out. If
disabled, the runtime directory goes away as soon as they log out. <function>SetUserLinger()</function> disabled, the runtime directory goes away as soon as they log out. <function>SetUserLinger()</function>
expects three arguments: the UID, a boolean whether to enable/disable and a boolean controlling the expects three arguments: the UID, a boolean whether to enable/disable and a boolean controlling the
PolicyKit authorization interactivity (see below). Note that the user linger state is persistently <ulink url="https://www.freedesktop.org/software/polkit/docs/latest/">polkit</ulink>
authorization interactivity (see below). Note that the user linger state is persistently
stored on disk.</para> stored on disk.</para>
<para><function>AttachDevice()</function> may be used to assign a specific device to a specific <para><function>AttachDevice()</function> may be used to assign a specific device to a specific
seat. The device is identified by its /sys path and must be eligible for seat assignments. <function>AttachDevice()</function> takes three seat. The device is identified by its <filename>/sys</filename> path and must be eligible for seat
arguments: the seat id, the sysfs path, and a boolean for controlling PolicyKit interactivity (see assignments. <function>AttachDevice()</function> takes three arguments: the seat id, the sysfs path,
below). Device assignments are persistently stored on disk. To create a new seat, simply specify a and a boolean for controlling polkit interactivity (see below). Device assignments are persistently
previously unused seat id. For more information about the seat assignment logic see stored on disk. To create a new seat, simply specify a previously unused seat id. For more information
about the seat assignment logic see
<ulink url="https://www.freedesktop.org/wiki/Software/systemd/multiseat">Multi-Seat for Linux</ulink>. <ulink url="https://www.freedesktop.org/wiki/Software/systemd/multiseat">Multi-Seat for Linux</ulink>.
</para> </para>
<para><function>FlushDevices()</function> removes all explicit seat assignments for devices, resetting <para><function>FlushDevices()</function> removes all explicit seat assignments for devices, resetting
all assignments to the automatic defaults. The only argument it takes is the PolicyKit interactivity all assignments to the automatic defaults. The only argument it takes is the polkit interactivity
boolean (see below).</para> boolean (see below).</para>
<para><function>PowerOff()</function>, <function>Reboot()</function>, <function>Halt()</function>, <para><function>PowerOff()</function>, <function>Reboot()</function>, <function>Halt()</function>,
@ -521,9 +523,9 @@ node /org/freedesktop/login1 {
the machine is powered down). <function>HybridSleep()</function> results in the system entering a the machine is powered down). <function>HybridSleep()</function> results in the system entering a
hybrid-sleep mode, i.e. the system is both hibernated and suspended. hybrid-sleep mode, i.e. the system is both hibernated and suspended.
<function>SuspendThenHibernate()</function> results in the system being suspended, then later woken <function>SuspendThenHibernate()</function> results in the system being suspended, then later woken
using an RTC timer and hibernated. The only argument is the PolicyKit interactivity boolean using an RTC timer and hibernated. The only argument is the polkit interactivity boolean
<varname>interactive</varname> (see below). The main purpose of these calls is that they enforce <varname>interactive</varname> (see below). The main purpose of these calls is that they enforce
PolicyKit policy and hence allow powering off/rebooting/suspending/hibernating even by unprivileged polkit policy and hence allow powering off/rebooting/suspending/hibernating even by unprivileged
users. They also enforce inhibition locks. UIs should expose these calls as the primary mechanism to users. They also enforce inhibition locks. UIs should expose these calls as the primary mechanism to
poweroff/reboot/suspend/hibernate the machine.</para> poweroff/reboot/suspend/hibernate the machine.</para>
@ -678,7 +680,7 @@ node /org/freedesktop/login1 {
<refsect2> <refsect2>
<title>Security</title> <title>Security</title>
<para>A number of operations are protected via the PolicyKit privilege <para>A number of operations are protected via the polkit privilege
system. <function>SetUserLinger()</function> requires the system. <function>SetUserLinger()</function> requires the
<interfacename>org.freedesktop.login1.set-user-linger</interfacename> <interfacename>org.freedesktop.login1.set-user-linger</interfacename>
privilege. <function>AttachDevice()</function> requires privilege. <function>AttachDevice()</function> requires
@ -731,7 +733,7 @@ node /org/freedesktop/login1 {
<interfacename>org.freedesktop.login1.inhibit-handle-lid-switch</interfacename> depending on the lock <interfacename>org.freedesktop.login1.inhibit-handle-lid-switch</interfacename> depending on the lock
type and mode taken.</para> type and mode taken.</para>
<para>The <varname>interactive</varname> boolean parameters can be used to control whether PolicyKit <para>The <varname>interactive</varname> boolean parameters can be used to control whether polkit
should interactively ask the user for authentication credentials if required.</para> should interactively ask the user for authentication credentials if required.</para>
</refsect2> </refsect2>
</refsect1> </refsect1>
@ -846,8 +848,8 @@ node /org/freedesktop/login1/seat/seat0 {
encoded in a structure consisting of the ID and the object path.</para> encoded in a structure consisting of the ID and the object path.</para>
<para>The <varname>IdleHint</varname>, <varname>IdleSinceHint</varname>, and <para>The <varname>IdleHint</varname>, <varname>IdleSinceHint</varname>, and
<varname>IdleSinceHint</varname> properties encode the idle state, similar to the one exposed on the <varname>IdleSinceHintMonotonic</varname> properties encode the idle state, similar to the ones exposed
Manager object, but specific for this seat.</para> on the <interfacename>Manager</interfacename> object, but specific for this seat.</para>
</refsect2> </refsect2>
</refsect1> </refsect1>

View File

@ -394,7 +394,7 @@ node /org/freedesktop/resolve1 {
default LLMNR setting is used. If <literal>yes</literal>, LLMNR is used for resolution of single-label default LLMNR setting is used. If <literal>yes</literal>, LLMNR is used for resolution of single-label
names and the local hostname is registered on all local LANs for LLMNR resolution by peers. If names and the local hostname is registered on all local LANs for LLMNR resolution by peers. If
<literal>no</literal>, LLMNR is turned off fully on this interface. If <literal>resolve</literal>, LLMNR <literal>no</literal>, LLMNR is turned off fully on this interface. If <literal>resolve</literal>, LLMNR
is only enabled for resolving names, but the local host name is not registered for other peers to is only enabled for resolving names, but the local hostname is not registered for other peers to
use.</para> use.</para>
<para>Similarly, the <function>SetLinkMulticastDNS()</function> method enables or disables MulticastDNS <para>Similarly, the <function>SetLinkMulticastDNS()</function> method enables or disables MulticastDNS

View File

@ -40,9 +40,10 @@
<para>Properties exposing time values are usually encoded in microseconds (usec) on the bus, even if <para>Properties exposing time values are usually encoded in microseconds (usec) on the bus, even if
their corresponding settings in the unit files are in seconds.</para> their corresponding settings in the unit files are in seconds.</para>
<para>In contrast to most of the other services of the systemd suite, PID 1 does not use PolicyKit for <para>In contrast to most of the other services of the systemd suite, PID 1 does not use
controlling access to privileged operations, but relies exclusively on the low-level D-Bus policy <ulink url="https://www.freedesktop.org/software/polkit/docs/latest/">polkit</ulink>
language. (This is done in order to avoid a cyclic dependency between PolicyKit and systemd/PID 1.) This for controlling access to privileged operations, but relies exclusively on the low-level D-Bus policy
language. (This is done in order to avoid a cyclic dependency between polkit and systemd/PID 1.) This
means that sensitive operations exposed by PID 1 on the bus are generally not available to unprivileged means that sensitive operations exposed by PID 1 on the bus are generally not available to unprivileged
processes directly. However, some operations (such as shutdown/reboot/suspend) are made available through the D-Bus processes directly. However, some operations (such as shutdown/reboot/suspend) are made available through the D-Bus
API of logind, see API of logind, see
@ -1463,7 +1464,7 @@ node /org/freedesktop/systemd1 {
<title>Security</title> <title>Security</title>
<para>Read access is generally granted to all clients. Additionally, for unprivileged clients, some <para>Read access is generally granted to all clients. Additionally, for unprivileged clients, some
operations are allowed through the PolicyKit privilege system. Operations which modify unit state operations are allowed through the polkit privilege system. Operations which modify unit state
(<function>StartUnit()</function>, <function>StopUnit()</function>, <function>KillUnit()</function>, (<function>StartUnit()</function>, <function>StopUnit()</function>, <function>KillUnit()</function>,
<function>RestartUnit()</function> and similar, <function>SetProperty</function>) require <function>RestartUnit()</function> and similar, <function>SetProperty</function>) require
<interfacename>org.freedesktop.systemd1.manage-units</interfacename>. Operations which modify unit file <interfacename>org.freedesktop.systemd1.manage-units</interfacename>. Operations which modify unit file
@ -2127,7 +2128,7 @@ node /org/freedesktop/systemd1/unit/avahi_2ddaemon_2eservice {
allowed for everyone. All operations are allowed for clients with the allowed for everyone. All operations are allowed for clients with the
<constant>CAP_SYS_ADMIN</constant> capability or when the <constant>CAP_SYS_ADMIN</constant> capability or when the
<interfacename>org.freedesktop.systemd1.manage-units</interfacename> privilege is granted by <interfacename>org.freedesktop.systemd1.manage-units</interfacename> privilege is granted by
PolicyKit.</para> polkit.</para>
</refsect2> </refsect2>
</refsect1> </refsect1>

View File

@ -72,22 +72,6 @@ node /org/freedesktop/timedate1 {
}; };
</programlisting> </programlisting>
<!--method ListTimezones is not documented!-->
<!--property Timezone is not documented!-->
<!--property LocalRTC is not documented!-->
<!--property CanNTP is not documented!-->
<!--property NTP is not documented!-->
<!--property NTPSynchronized is not documented!-->
<!--property TimeUSec is not documented!-->
<!--property RTCTimeUSec is not documented!-->
<!--Autogenerated cross-references for systemd.directives, do not edit--> <!--Autogenerated cross-references for systemd.directives, do not edit-->
<variablelist class="dbus-interface" generated="True" extra-ref="org.freedesktop.timedate1"/> <variablelist class="dbus-interface" generated="True" extra-ref="org.freedesktop.timedate1"/>
@ -148,25 +132,51 @@ node /org/freedesktop/timedate1 {
network using <filename>systemd-timesyncd</filename>. This will enable and start or disable and stop network using <filename>systemd-timesyncd</filename>. This will enable and start or disable and stop
the chosen time synchronization service.</para> the chosen time synchronization service.</para>
<para>Whenever the timezone and local_rtc settings are changed via the daemon, <para><function>ListTimezones()</function> returns a list of time zones known on the local system as an
<function>PropertyChanged</function> signals are sent out to which clients can subscribe. Changing the array of names (<literal>["Africa/Abidjan", "Africa/Accra", ..., "UTC"]</literal>).</para>
time settings using this interface is authenticated via PolicyKit.</para> </refsect2>
<refsect2>
<title>Properties</title>
<para><varname>Timezone</varname> shows the currently configured time zone.
<varname>LocalRTC</varname> shows whether the RTC is configured to use UTC (false), or the local time
zone (true). <varname>CanNTP</varname> shows whether a service to perform time synchronization over the
network is available, and <varname>NTP</varname> shows whether such a service is enabled.</para>
<para><varname>NTPSynchronized</varname> shows whether the kernel reports the time as synchronized
(c.f.
<citerefentry project="man-pages"><refentrytitle>adjtimex</refentrytitle><manvolnum>3</manvolnum></citerefentry>).
<varname>TimeUSec</varname> and <varname>RTCTimeUSec</varname> show the current time on the system and
in the RTC. The purpose of those three properties is to allow remote clients to access this information
over D-Bus. Local clients can access the information directly.</para>
<para>Whenever the <varname>Timezone</varname> and <varname>LocalRTC</varname> settings are changed via
the daemon, <function>PropertyChanged</function> signals are sent out to which clients can subscribe.
</para>
<para>Note that this service will not inform you about system time changes. Use <para>Note that this service will not inform you about system time changes. Use
<citerefentry project="man-pages"><refentrytitle>timerfd</refentrytitle><manvolnum>3</manvolnum></citerefentry> <citerefentry project="man-pages"><refentrytitle>timerfd</refentrytitle><manvolnum>3</manvolnum></citerefentry>
with <constant>CLOCK_REALTIME</constant> and <constant>TFD_TIMER_CANCEL_ON_SET</constant> for that. with <constant>CLOCK_REALTIME</constant> and <constant>TFD_TIMER_CANCEL_ON_SET</constant> for that.
</para> </para>
</refsect2>
<para>The <varname>user_interaction</varname> boolean parameters can be used to control whether <refsect2>
PolicyKit should interactively ask the user for authentication credentials if required.</para> <title>Security</title>
<para>The PolicyKit action for <function>SetTimezone()</function> is <para>The <varname>interactive</varname> boolean parameters can be used to control whether
<ulink url="https://www.freedesktop.org/software/polkit/docs/latest/">polkit</ulink>
should interactively ask the user for authentication credentials if required.</para>
<para>The polkit action for <function>SetTimezone()</function> is
<interfacename>org.freedesktop.timedate1.set-timezone</interfacename>. For <interfacename>org.freedesktop.timedate1.set-timezone</interfacename>. For
<function>SetLocalRTC()</function> it is <function>SetLocalRTC()</function> it is
<interfacename>org.freedesktop.timedate1.set-local-rtc</interfacename>, for <interfacename>org.freedesktop.timedate1.set-local-rtc</interfacename>, for
<function>SetTime()</function> it is <interfacename>org.freedesktop.timedate1.set-time</interfacename> <function>SetTime()</function> it is <interfacename>org.freedesktop.timedate1.set-time</interfacename>
and for <function>SetNTP()</function> it is and for <function>SetNTP()</function> it is
<interfacename>org.freedesktop.timedate1.set-ntp</interfacename>.</para> <interfacename>org.freedesktop.timedate1.set-ntp</interfacename>.
<function>ListTimezones()</function> does not require any privileges.
</para>
</refsect2> </refsect2>
</refsect1> </refsect1>

View File

@ -45,7 +45,7 @@
interface the data was discovered. It also contains information on whether the information could be interface the data was discovered. It also contains information on whether the information could be
authenticated. All data for which local DNSSEC validation succeeds is considered authenticated. Moreover all data authenticated. All data for which local DNSSEC validation succeeds is considered authenticated. Moreover all data
originating from local, trusted sources is also reported authenticated, including resolution of the local host originating from local, trusted sources is also reported authenticated, including resolution of the local host
name, the <literal>localhost</literal> host name or all data from <filename>/etc/hosts</filename>.</para> name, the <literal>localhost</literal> hostname or all data from <filename>/etc/hosts</filename>.</para>
</refsect1> </refsect1>
<refsect1> <refsect1>

View File

@ -68,7 +68,7 @@
<varlistentry> <varlistentry>
<term><varname>Domains=</varname></term> <term><varname>Domains=</varname></term>
<listitem><para>A space-separated list of domains. These domains are used as search suffixes when resolving <listitem><para>A space-separated list of domains. These domains are used as search suffixes when resolving
single-label host names (domain names which contain no dot), in order to qualify them into fully-qualified single-label hostnames (domain names which contain no dot), in order to qualify them into fully-qualified
domain names (FQDNs). Search domains are strictly processed in the order they are specified, until the name domain names (FQDNs). Search domains are strictly processed in the order they are specified, until the name
with the suffix appended is found. For compatibility reasons, if this setting is not specified, the search with the suffix appended is found. For compatibility reasons, if this setting is not specified, the search
domains listed in <filename>/etc/resolv.conf</filename> are used instead, if that file exists and any domains domains listed in <filename>/etc/resolv.conf</filename> are used instead, if that file exists and any domains

View File

@ -262,6 +262,7 @@ manpages = [
['sd_bus_get_events', 'sd_bus_get_timeout', 'sd_bus_set_fd'], ['sd_bus_get_events', 'sd_bus_get_timeout', 'sd_bus_set_fd'],
''], ''],
['sd_bus_get_n_queued_read', '3', ['sd_bus_get_n_queued_write'], ''], ['sd_bus_get_n_queued_read', '3', ['sd_bus_get_n_queued_write'], ''],
['sd_bus_get_name_machine_id', '3', [], ''],
['sd_bus_is_open', '3', ['sd_bus_is_ready'], ''], ['sd_bus_is_open', '3', ['sd_bus_is_ready'], ''],
['sd_bus_list_names', '3', [], ''], ['sd_bus_list_names', '3', [], ''],
['sd_bus_message_append', '3', ['sd_bus_message_appendv'], ''], ['sd_bus_message_append', '3', ['sd_bus_message_appendv'], ''],
@ -291,7 +292,8 @@ manpages = [
''], ''],
['sd_bus_message_get_type', ['sd_bus_message_get_type',
'3', '3',
['sd_bus_message_get_errno', ['sd_bus_message_get_creds',
'sd_bus_message_get_errno',
'sd_bus_message_get_error', 'sd_bus_message_get_error',
'sd_bus_message_is_method_call', 'sd_bus_message_is_method_call',
'sd_bus_message_is_method_error', 'sd_bus_message_is_method_error',
@ -319,7 +321,16 @@ manpages = [
'sd_bus_message_new_method_errorf'], 'sd_bus_message_new_method_errorf'],
''], ''],
['sd_bus_message_new_signal', '3', [], ''], ['sd_bus_message_new_signal', '3', [], ''],
['sd_bus_message_read', '3', ['sd_bus_message_readv'], ''], ['sd_bus_message_open_container',
'3',
['sd_bus_message_close_container',
'sd_bus_message_enter_container',
'sd_bus_message_exit_container'],
''],
['sd_bus_message_read',
'3',
['sd_bus_message_peek_type', 'sd_bus_message_readv'],
''],
['sd_bus_message_read_array', '3', [], ''], ['sd_bus_message_read_array', '3', [], ''],
['sd_bus_message_read_basic', '3', [], ''], ['sd_bus_message_read_basic', '3', [], ''],
['sd_bus_message_read_strv', '3', [], ''], ['sd_bus_message_read_strv', '3', [], ''],
@ -379,7 +390,7 @@ manpages = [
'sd_bus_release_name_async', 'sd_bus_release_name_async',
'sd_bus_request_name_async'], 'sd_bus_request_name_async'],
''], ''],
['sd_bus_send', '3', [], ''], ['sd_bus_send', '3', ['sd_bus_send_to'], ''],
['sd_bus_set_address', '3', ['sd_bus_get_address', 'sd_bus_set_exec'], ''], ['sd_bus_set_address', '3', ['sd_bus_get_address', 'sd_bus_set_exec'], ''],
['sd_bus_set_close_on_exit', '3', ['sd_bus_get_close_on_exit'], ''], ['sd_bus_set_close_on_exit', '3', ['sd_bus_get_close_on_exit'], ''],
['sd_bus_set_connected_signal', '3', ['sd_bus_get_connected_signal'], ''], ['sd_bus_set_connected_signal', '3', ['sd_bus_get_connected_signal'], ''],

View File

@ -0,0 +1,17 @@
#include <systemd/sd-bus.h>
int append_strings_to_message(sd_bus_message *m, const char *const *arr) {
int r;
r = sd_bus_message_open_container(m, 'a', "s");
if (r < 0)
return r;
for (const char *s = *arr; *s; s++) {
r = sd_bus_message_append(m, "s", s);
if (r < 0)
return r;
}
return sd_bus_message_close_container(m);
}

View File

@ -0,0 +1,25 @@
#include <stdio.h>
#include <systemd/sd-bus.h>
int read_strings_from_message(sd_bus_message *m) {
int r;
r = sd_bus_message_enter_container(m, 'a', "s");
if (r < 0)
return r;
for (;;) {
const char *s;
r = sd_bus_message_read(m, "s", &s);
if (r < 0)
return r;
if (r == 0)
break;
printf("%s\n", s);
}
return sd_bus_message_exit_container(m);
}

View File

@ -82,6 +82,7 @@
<citerefentry><refentrytitle>sd_bus_get_fd</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_bus_get_fd</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_bus_get_method_call_timeout</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_bus_get_method_call_timeout</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_bus_get_n_queued_read</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_bus_get_n_queued_read</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_bus_get_name_machine_id</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_bus_get_scope</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_bus_get_scope</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_bus_get_tid</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_bus_get_tid</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_bus_get_unique_name</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_bus_get_unique_name</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
@ -95,10 +96,14 @@
<citerefentry><refentrytitle>sd_bus_message_append_string_memfd</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_bus_message_append_string_memfd</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_bus_message_append_strv</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_bus_message_append_strv</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_bus_message_at_end</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_bus_message_at_end</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_bus_message_close_container</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_bus_message_copy</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_bus_message_copy</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_bus_message_dump</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_bus_message_dump</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_bus_message_enter_container</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_bus_message_exit_container</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_bus_message_get_allow_interactive_authorization</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_bus_message_get_allow_interactive_authorization</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_bus_message_get_cookie</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_bus_message_get_cookie</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_bus_message_get_creds</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_bus_message_get_errno</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_bus_message_get_errno</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_bus_message_get_error</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_bus_message_get_error</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_bus_message_get_monotonic_usec</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_bus_message_get_monotonic_usec</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
@ -113,6 +118,8 @@
<citerefentry><refentrytitle>sd_bus_message_new_method_call</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_bus_message_new_method_call</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_bus_message_new_method_error</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_bus_message_new_method_error</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_bus_message_new_signal</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_bus_message_new_signal</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_bus_message_open_container</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_bus_message_peek_type</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_bus_message_read</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_bus_message_read</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_bus_message_read_array</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_bus_message_read_array</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_bus_message_read_basic</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_bus_message_read_basic</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
@ -133,6 +140,7 @@
<citerefentry><refentrytitle>sd_bus_reply_method_error</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_bus_reply_method_error</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_bus_request_name</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_bus_request_name</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_bus_send</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_bus_send</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_bus_send_to</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_bus_set_address</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_bus_set_address</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_bus_set_allow_interactive_authorization</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_bus_set_allow_interactive_authorization</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_bus_set_bus_client</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_bus_set_bus_client</refentrytitle><manvolnum>3</manvolnum></citerefentry>,

View File

@ -0,0 +1,98 @@
<?xml version='1.0'?>
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
<!-- SPDX-License-Identifier: LGPL-2.1+ -->
<refentry id="sd_bus_get_name_machine_id" xmlns:xi="http://www.w3.org/2001/XInclude">
<refentryinfo>
<title>sd_bus_get_name_machine_id</title>
<productname>systemd</productname>
</refentryinfo>
<refmeta>
<refentrytitle>sd_bus_get_name_machine_id</refentrytitle>
<manvolnum>3</manvolnum>
</refmeta>
<refnamediv>
<refname>sd_bus_get_name_machine_id</refname>
<refpurpose>Retrieve a bus client's machine identity</refpurpose>
</refnamediv>
<refsynopsisdiv>
<funcsynopsis>
<funcsynopsisinfo>#include &lt;systemd/sd-bus.h&gt;</funcsynopsisinfo>
<funcprototype>
<funcdef>int <function>sd_bus_get_name_machine_id</function></funcdef>
<paramdef>sd_bus *<parameter>bus</parameter></paramdef>
<paramdef>const char *<parameter>name</parameter></paramdef>
<paramdef>sd_id128_t *<parameter>machine</parameter></paramdef>
</funcprototype>
</funcsynopsis>
</refsynopsisdiv>
<refsect1>
<title>Description</title>
<para><function>sd_bus_get_name_machine_id()</function> retrieves the D-Bus machine identity of the
machine that the bus client identified by <parameter>name</parameter> is running on. Internally, it calls
the <function>GetMachineId</function> method of the <constant>org.freedesktop.DBus.Peer</constant>
interface. The D-Bus machine identity is a 128-bit UUID. On Linux systems running systemd, this
corresponds to the contents of <filename>/etc/machine-id</filename>. On success, the machine identity is
stored in <parameter>machine</parameter>.</para>
</refsect1>
<refsect1>
<title>Return Value</title>
<para>On success, this function returns a non-negative integer. On failure, it returns a negative
errno-style error code.</para>
<refsect2>
<title>Errors</title>
<para>Returned errors may indicate the following problems:</para>
<variablelist>
<varlistentry>
<term><constant>-EINVAL</constant></term>
<listitem><para>An argument is invalid.</para></listitem>
</varlistentry>
<varlistentry>
<term><constant>-ENOPKG</constant></term>
<listitem><para>The bus cannot be resolved.</para></listitem>
</varlistentry>
<varlistentry>
<term><constant>-ECHILD</constant></term>
<listitem><para>The bus was created in a different process.</para></listitem>
</varlistentry>
<varlistentry>
<term><constant>-ENOMEM</constant></term>
<listitem><para>Memory allocation failed.</para></listitem>
</varlistentry>
</variablelist>
</refsect2>
</refsect1>
<xi:include href="libsystemd-pkgconfig.xml" />
<refsect1>
<title>See Also</title>
<para>
<citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd-bus</refentrytitle><manvolnum>3</manvolnum></citerefentry>
</para>
</refsect1>
</refentry>

View File

@ -229,7 +229,8 @@ sd_bus_message_append(m, "ynqiuxtd", y, n, q, i, u, x, t, d);</programlisting>
<citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd-bus</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd-bus</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_bus_message_append_basic</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_bus_message_append_basic</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_bus_message_append_array</refentrytitle><manvolnum>3</manvolnum></citerefentry> <citerefentry><refentrytitle>sd_bus_message_append_array</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_bus_message_open_container</refentrytitle><manvolnum>3</manvolnum></citerefentry>
</para> </para>
</refsect1> </refsect1>

View File

@ -34,7 +34,7 @@
<funcdef>int sd_bus_message_append_array</funcdef> <funcdef>int sd_bus_message_append_array</funcdef>
<paramdef>sd_bus_message *<parameter>m</parameter></paramdef> <paramdef>sd_bus_message *<parameter>m</parameter></paramdef>
<paramdef>char <parameter>type</parameter></paramdef> <paramdef>char <parameter>type</parameter></paramdef>
<paramdef>char void *<parameter>ptr</parameter></paramdef> <paramdef>void *<parameter>ptr</parameter></paramdef>
<paramdef>size_t <parameter>size</parameter></paramdef> <paramdef>size_t <parameter>size</parameter></paramdef>
</funcprototype> </funcprototype>

View File

@ -19,11 +19,12 @@
<refname>sd_bus_message_get_type</refname> <refname>sd_bus_message_get_type</refname>
<refname>sd_bus_message_get_error</refname> <refname>sd_bus_message_get_error</refname>
<refname>sd_bus_message_get_errno</refname> <refname>sd_bus_message_get_errno</refname>
<refname>sd_bus_message_get_creds</refname>
<refname>sd_bus_message_is_signal</refname> <refname>sd_bus_message_is_signal</refname>
<refname>sd_bus_message_is_method_call</refname> <refname>sd_bus_message_is_method_call</refname>
<refname>sd_bus_message_is_method_error</refname> <refname>sd_bus_message_is_method_error</refname>
<refpurpose>Query bus message addressing metadata</refpurpose> <refpurpose>Query bus message addressing/credentials metadata</refpurpose>
</refnamediv> </refnamediv>
<refsynopsisdiv> <refsynopsisdiv>
@ -46,6 +47,11 @@
<paramdef>sd_bus_message *<parameter>m</parameter></paramdef> <paramdef>sd_bus_message *<parameter>m</parameter></paramdef>
</funcprototype> </funcprototype>
<funcprototype>
<funcdef>sd_bus_creds* <function>sd_bus_message_get_creds</function></funcdef>
<paramdef>sd_bus_message *<parameter>m</parameter></paramdef>
</funcprototype>
<funcprototype> <funcprototype>
<funcdef>int <function>sd_bus_message_is_signal</function></funcdef> <funcdef>int <function>sd_bus_message_is_signal</function></funcdef>
<paramdef>sd_bus_message *<parameter>m</parameter></paramdef> <paramdef>sd_bus_message *<parameter>m</parameter></paramdef>
@ -93,6 +99,11 @@
<citerefentry><refentrytitle>sd_bus_error_add_map</refentrytitle><manvolnum>3</manvolnum></citerefentry>. <citerefentry><refentrytitle>sd_bus_error_add_map</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
</para> </para>
<para><function>sd_bus_message_get_creds()</function> returns the message credentials attached to the
message <parameter>m</parameter>. If no credentials are attached to the message, it returns
<constant>NULL</constant>. Ownership of the credentials instance is not transferred to the caller and
hence should not be freed.</para>
<para><function>sd_bus_message_is_signal()</function> checks if message <parameter>m</parameter> is a <para><function>sd_bus_message_is_signal()</function> checks if message <parameter>m</parameter> is a
signal message. If <parameter>interface</parameter> is non-null, it also checks if the message has the signal message. If <parameter>interface</parameter> is non-null, it also checks if the message has the
same interface set. If <parameter>member</parameter> is non-null, it also checks if the message has the same interface set. If <parameter>member</parameter> is non-null, it also checks if the message has the
@ -117,9 +128,10 @@
<refsect1> <refsect1>
<title>Return Value</title> <title>Return Value</title>
<para>On success, these functions return a non-negative integer. On failure, they return a negative <para>On success, these functions (except <function>sd_bus_message_get_error()</function> and
errno-style error code. <function>sd_bus_message_get_errno()</function> always returns a non-negative <function>sd_bus_message_get_creds()</function>) return a non-negative integer. On failure, they return a
integer, even on failure.</para> negative errno-style error code. <function>sd_bus_message_get_errno()</function> always returns a
non-negative integer, even on failure.</para>
<refsect2> <refsect2>
<title>Errors</title> <title>Errors</title>

View File

@ -0,0 +1,165 @@
<?xml version='1.0'?>
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
<!-- SPDX-License-Identifier: LGPL-2.1+ -->
<refentry id="sd_bus_message_open_container"
xmlns:xi="http://www.w3.org/2001/XInclude">
<refentryinfo>
<title>sd_bus_message_open_container</title>
<productname>systemd</productname>
</refentryinfo>
<refmeta>
<refentrytitle>sd_bus_message_open_container</refentrytitle>
<manvolnum>3</manvolnum>
</refmeta>
<refnamediv>
<refname>sd_bus_message_open_container</refname>
<refname>sd_bus_message_close_container</refname>
<refname>sd_bus_message_enter_container</refname>
<refname>sd_bus_message_exit_container</refname>
<refpurpose>Create and move between containers in D-Bus messages</refpurpose>
</refnamediv>
<refsynopsisdiv>
<funcsynopsis>
<funcsynopsisinfo>#include &lt;systemd/sd-bus.h&gt;</funcsynopsisinfo>
<funcprototype>
<funcdef>int sd_bus_message_open_container</funcdef>
<paramdef>sd_bus_message *<parameter>m</parameter></paramdef>
<paramdef>char <parameter>type</parameter></paramdef>
<paramdef>const char *<parameter>contents</parameter></paramdef>
</funcprototype>
<funcprototype>
<funcdef>int sd_bus_message_close_container</funcdef>
<paramdef>sd_bus_message *<parameter>m</parameter></paramdef>
</funcprototype>
<funcprototype>
<funcdef>int sd_bus_message_enter_container</funcdef>
<paramdef>sd_bus_message *<parameter>m</parameter></paramdef>
<paramdef>char <parameter>type</parameter></paramdef>
<paramdef>const char *<parameter>contents</parameter></paramdef>
</funcprototype>
<funcprototype>
<funcdef>int sd_bus_message_exit_container</funcdef>
<paramdef>sd_bus_message *<parameter>m</parameter></paramdef>
</funcprototype>
</funcsynopsis>
</refsynopsisdiv>
<refsect1>
<title>Description</title>
<para><function>sd_bus_message_open_container()</function> appends a new container to the message
<parameter>m</parameter>. After opening a new container, it can be filled with content using
<citerefentry><refentrytitle>sd_bus_message_append</refentrytitle><manvolnum>3</manvolnum></citerefentry>
and similar functions. Containers behave like a stack. To nest containers inside each other, call
<function>sd_bus_message_open_container()</function> multiple times without calling
<function>sd_bus_message_close_container()</function> inbetween. Each container will be nested inside the
previous container. <parameter>type</parameter> represents the container type and should be one of
<literal>r</literal>, <literal>a</literal>, <literal>v</literal> or <literal>e</literal> as described in
<citerefentry><refentrytitle>sd_bus_message_append</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
Instead of literals, the corresponding constants <constant>SD_BUS_TYPE_STRUCT</constant>,
<constant>SD_BUS_TYPE_ARRAY</constant>, <constant>SD_BUS_TYPE_VARIANT</constant> or
<constant>SD_BUS_TYPE_DICT_ENTRY</constant> can also be used. <parameter>contents</parameter> describes
the type of the container's elements and should be a D-Bus type string following the rules described in
<citerefentry><refentrytitle>sd_bus_message_append</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
</para>
<para><function>sd_bus_message_close_container()</function> closes the last container opened with
<function>sd_bus_message_open_container()</function>. On success, the write pointer of the message
<parameter>m</parameter> is positioned after the closed container in its parent container or in
<parameter>m</parameter> itself if there is no parent container.</para>
<para><function>sd_bus_message_enter_container()</function> enters the next container of the message
<parameter>m</parameter>. It behaves mostly the same as
<function>sd_bus_message_open_container()</function>. Entering a container allows reading its contents
with
<citerefentry><refentrytitle>sd_bus_message_read</refentrytitle><manvolnum>3</manvolnum></citerefentry>
and similar functions. <parameter>type</parameter> and <parameter>contents</parameter> are the same as in
<function>sd_bus_message_open_container()</function>.</para>
<para><function>sd_bus_message_exit_container()</function> exits the scope of the last container entered
with <function>sd_bus_message_enter_container()</function>. It behaves mostly the same as
<function>sd_bus_message_close_container()</function>.</para>
</refsect1>
<refsect1>
<title>Return Value</title>
<para>On success, these functions return a non-negative integer. On failure, they return a negative
errno-style error code.</para>
<refsect2>
<title>Errors</title>
<para>Returned errors may indicate the following problems:</para>
<variablelist>
<varlistentry>
<term><constant>-EINVAL</constant></term>
<listitem><para><parameter>m</parameter> or <parameter>contents</parameter> are
<constant>NULL</constant> or <parameter>type</parameter> is invalid.</para></listitem>
</varlistentry>
<varlistentry>
<term><constant>-EPERM</constant></term>
<listitem><para>The message <parameter>m</parameter> is already sealed.</para></listitem>
</varlistentry>
<varlistentry>
<term><constant>-ESTALE</constant></term>
<listitem><para>The message <parameter>m</parameter> is in an invalid state.</para></listitem>
</varlistentry>
<varlistentry>
<term><constant>-ENOMEM</constant></term>
<listitem><para>Memory allocation failed.</para></listitem>
</varlistentry>
</variablelist>
</refsect2>
</refsect1>
<xi:include href="libsystemd-pkgconfig.xml" />
<refsect1>
<title>Examples</title>
<example>
<title>Append an array of strings to a message</title>
<programlisting><xi:include href="sd-bus-container-append.c" parse="text" /></programlisting>
</example>
<example>
<title>Read an array of strings from a message</title>
<programlisting><xi:include href="sd-bus-container-read.c" parse="text" /></programlisting>
</example>
</refsect1>
<refsect1>
<title>See Also</title>
<para>
<citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd-bus</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_bus_message_append</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_bus_message_read</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<ulink url="https://dbus.freedesktop.org/doc/dbus-specification.html">The D-Bus specification</ulink>
</para>
</refsect1>
</refentry>

View File

@ -19,6 +19,7 @@
<refnamediv> <refnamediv>
<refname>sd_bus_message_read</refname> <refname>sd_bus_message_read</refname>
<refname>sd_bus_message_readv</refname> <refname>sd_bus_message_readv</refname>
<refname>sd_bus_message_peek_type</refname>
<refpurpose>Read a sequence of values from a message</refpurpose> <refpurpose>Read a sequence of values from a message</refpurpose>
</refnamediv> </refnamediv>
@ -40,38 +41,42 @@
<paramdef>const char *<parameter>types</parameter></paramdef> <paramdef>const char *<parameter>types</parameter></paramdef>
<paramdef>va_list <parameter>ap</parameter></paramdef> <paramdef>va_list <parameter>ap</parameter></paramdef>
</funcprototype> </funcprototype>
<funcprototype>
<funcdef>int <function>sd_bus_message_peek_type</function></funcdef>
<paramdef>char *<parameter>type</parameter></paramdef>
<paramdef>const char **<parameter>contents</parameter></paramdef>
</funcprototype>
</funcsynopsis> </funcsynopsis>
</refsynopsisdiv> </refsynopsisdiv>
<refsect1> <refsect1>
<title>Description</title> <title>Description</title>
<para><function>sd_bus_message_read()</function> reads a sequence of fields from <para><function>sd_bus_message_read()</function> reads a sequence of fields from the D-Bus message object
the D-Bus message object <parameter>m</parameter> and advances the read position <parameter>m</parameter> and advances the read position in the message. The type string
in the message. The type string <parameter>types</parameter> describes the types <parameter>types</parameter> describes the types of items expected in the message and the field arguments
of items expected in the message and the field arguments that follow. The type that follow. The type string may be <constant>NULL</constant> or empty, in which case nothing is read.
string may be <constant>NULL</constant> or empty, in which case nothing is </para>
read.</para>
<para>The type string is composed of the elements described in <para>The type string is composed of the elements described in
<citerefentry><refentrytitle>sd_bus_message_append</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_bus_message_append</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
i.e. basic and container types. It must contain zero or more single "complete i.e. basic and container types. It must contain zero or more single "complete types". The type string is
types". The type string is <constant>NUL</constant>-terminated.</para> <constant>NUL</constant>-terminated.</para>
<para>For each type specified in the type string, one or more arguments need to be specified <para>For each type specified in the type string, one or more arguments need to be specified after the
after the <parameter>types</parameter> parameter, in the same order. The arguments must be <parameter>types</parameter> parameter, in the same order. The arguments must be pointers to appropriate
pointers to appropriate types (a pointer to <type>int8_t</type> for a <literal>y</literal> in types (a pointer to <type>int8_t</type> for a <literal>y</literal> in the type string, a pointer to
the type string, a pointer to <type>int32_t</type> for an <literal>i</literal>, a pointer to <type>int32_t</type> for an <literal>i</literal>, a pointer to <type>const char*</type> for an
<type>const char*</type> for an <literal>s</literal>, ...) which are set based on the values in <literal>s</literal>, ...) which are set based on the values in the message. As an exception, in case of
the message. As an exception, in case of array and variant types, the first argument is an array and variant types, the first argument is an "input" argument that further specifies how the message
"input" argument that further specifies how the message should be read. See the table below for should be read. See the table below for a complete list of allowed arguments and their types. Note that,
a complete list of allowed arguments and their types. Note that, if the basic type is a pointer if the basic type is a pointer (e.g., <type>const char *</type> in the case of a string), the argument is
(e.g., <type>const char *</type> in the case of a string), the argument is a pointer to a a pointer to a pointer, and also the pointer value that is written is only borrowed and the contents must
pointer, and also the pointer value that is written is only borrowed and the contents must be be copied if they are to be used after the end of the messages lifetime.</para>
copied if they are to be used after the end of the messages lifetime.</para>
<para>Each argument may also be <constant>NULL</constant>, in which case the value is read and <para>Each argument may also be <constant>NULL</constant>, in which case the value is read and ignored.
ignored.</para> </para>
<table> <table>
<title>Item type specifiers</title> <title>Item type specifiers</title>
@ -139,24 +144,29 @@
</tgroup> </tgroup>
</table> </table>
<para>If objects of the specified types are not present at the current position <para>If objects of the specified types are not present at the current position in the message, an error
in the message, an error is returned. is returned.</para>
</para>
<para>The <function>sd_bus_message_readv()</function> is equivalent to the <para>The <function>sd_bus_message_readv()</function> is equivalent to the
<function>sd_bus_message_read()</function>, except that it is called with a <function>sd_bus_message_read()</function>, except that it is called with a <literal>va_list</literal>
<literal>va_list</literal> instead of a variable number of arguments. This instead of a variable number of arguments. This function does not call the <function>va_end()</function>
function does not call the <function>va_end()</function> macro. Because it macro. Because it invokes the <function>va_arg()</function> macro, the value of <parameter>ap</parameter>
invokes the <function>va_arg()</function> macro, the value of is undefined after the call.</para>
<parameter>ap</parameter> is undefined after the call.</para>
<para><function>sd_bus_message_peek_type()</function> determines the type of the next element in
<parameter>m</parameter> to be read by <function>sd_bus_message_read()</function> or similar functions.
On success, the type is stored in <parameter>type</parameter>, if it is not <constant>NULL</constant>.
If the type is a container type, the type of its elements is stored in <parameter>contents</parameter>,
if it is not <constant>NULL</constant>. If this function successfully determines the type of the next
element in <parameter>m</parameter>, it returns a positive integer. If there are no more elements to be
read, it returns zero.</para>
</refsect1> </refsect1>
<refsect1> <refsect1>
<title>Return Value</title> <title>Return Value</title>
<para>On success, <function>sd_bus_message_read()</function> and <para>On success, these functions return a non-negative integer. On failure, they return a negative
<function>sd_bus_message_readv()</function> return 0 or a positive integer. On failure, they return a errno-style error code.</para>
negative errno-style error code.</para>
<xi:include href="sd_bus_message_read_basic.xml" xpointer="errors" /> <xi:include href="sd_bus_message_read_basic.xml" xpointer="errors" />
</refsect1> </refsect1>
@ -228,7 +238,8 @@ sd_bus_message_read(m, "a{is}", 3, &amp;i, &amp;s, &amp;j, &amp;t, &amp;k, &amp;
<citerefentry><refentrytitle>sd-bus</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd-bus</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_bus_message_read_basic</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_bus_message_read_basic</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_bus_message_skip</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_bus_message_skip</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_bus_message_append</refentrytitle><manvolnum>3</manvolnum></citerefentry> <citerefentry><refentrytitle>sd_bus_message_append</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_bus_message_enter_container</refentrytitle><manvolnum>3</manvolnum></citerefentry>
</para> </para>
</refsect1> </refsect1>

View File

@ -18,6 +18,7 @@
<refnamediv> <refnamediv>
<refname>sd_bus_send</refname> <refname>sd_bus_send</refname>
<refname>sd_bus_send_to</refname>
<refpurpose>Queue a D-Bus message for transfer</refpurpose> <refpurpose>Queue a D-Bus message for transfer</refpurpose>
</refnamediv> </refnamediv>
@ -32,35 +33,48 @@
<paramdef>sd_bus_message *<parameter>m</parameter></paramdef> <paramdef>sd_bus_message *<parameter>m</parameter></paramdef>
<paramdef>uint64_t *<parameter>cookie</parameter></paramdef> <paramdef>uint64_t *<parameter>cookie</parameter></paramdef>
</funcprototype> </funcprototype>
<funcprototype>
<funcdef>int <function>sd_bus_send_to</function></funcdef>
<paramdef>sd_bus *<parameter>bus</parameter></paramdef>
<paramdef>sd_bus_message *<parameter>m</parameter></paramdef>
<paramdef>const char *<parameter>destination</parameter></paramdef>
<paramdef>uint64_t *<parameter>cookie</parameter></paramdef>
</funcprototype>
</funcsynopsis> </funcsynopsis>
</refsynopsisdiv> </refsynopsisdiv>
<refsect1> <refsect1>
<title>Description</title> <title>Description</title>
<para><function>sd_bus_send()</function> queues the bus message object <parameter>m</parameter> <para><function>sd_bus_send()</function> queues the bus message object <parameter>m</parameter> for
for transfer. If <parameter>bus</parameter> is <constant>NULL</constant>, the bus that transfer. If <parameter>bus</parameter> is <constant>NULL</constant>, the bus that
<parameter>m</parameter> is attached to is used. <parameter>bus</parameter> only needs to be set <parameter>m</parameter> is attached to is used. <parameter>bus</parameter> only needs to be set when the
when the message is sent to a different bus than the one it's attached to, for example when message is sent to a different bus than the one it's attached to, for example when forwarding messages.
forwarding messages. If the output parameter <parameter>cookie</parameter> is not If the output parameter <parameter>cookie</parameter> is not <constant>NULL</constant>, it is set to the
<constant>NULL</constant>, it is set to the message identifier. This value can later be used to message identifier. This value can later be used to match incoming replies to their corresponding
match incoming replies to their corresponding messages. If <parameter>cookie</parameter> is set messages. If <parameter>cookie</parameter> is set to <constant>NULL</constant> and the message is not
to <constant>NULL</constant> and the message is not sealed, <function>sd_bus_send()</function> sealed, <function>sd_bus_send()</function> assumes the message <parameter>m</parameter> doesn't expect a
assumes the message <parameter>m</parameter> doesn't expect a reply and adds the necessary reply and adds the necessary headers to indicate this.</para>
headers to indicate this.</para>
<para>Note that in most scenarios, <function>sd_bus_send()</function> should not be called <para>Note that in most scenarios, <function>sd_bus_send()</function> should not be called
directly. Instead, use higher level functions such as directly. Instead, use higher level functions such as
<citerefentry><refentrytitle>sd_bus_call_method</refentrytitle><manvolnum>3</manvolnum></citerefentry> and <citerefentry><refentrytitle>sd_bus_call_method</refentrytitle><manvolnum>3</manvolnum></citerefentry> and
<citerefentry><refentrytitle>sd_bus_reply_method_return</refentrytitle><manvolnum>3</manvolnum></citerefentry> <citerefentry><refentrytitle>sd_bus_reply_method_return</refentrytitle><manvolnum>3</manvolnum></citerefentry>
which call <function>sd_bus_send()</function> internally.</para> which call <function>sd_bus_send()</function> internally.</para>
<para><function>sd_bus_send_to()</function> is a shorthand for sending a message to a specific
destination. It's main use case is to simplify sending unicast signal messages (signals that only have a
single receiver). It's behavior is similar to calling
<citerefentry><refentrytitle>sd_bus_message_set_destination</refentrytitle><manvolnum>3</manvolnum></citerefentry>
followed by calling <function>sd_bus_send()</function>.</para>
</refsect1> </refsect1>
<refsect1> <refsect1>
<title>Return Value</title> <title>Return Value</title>
<para>On success, this function returns a non-negative integer. On failure, it returns a <para>On success, these functions return a non-negative integer. On failure, they return a negative
negative errno-style error code.</para> errno-style error code.</para>
<refsect2 id='errors'> <refsect2 id='errors'>
<title>Errors</title> <title>Errors</title>
@ -85,8 +99,8 @@
<varlistentry> <varlistentry>
<term><constant>-ECHILD</constant></term> <term><constant>-ECHILD</constant></term>
<listitem><para>The bus connection was allocated in a parent process and is being reused <listitem><para>The bus connection was allocated in a parent process and is being reused in a child
in a child process after <function>fork()</function>.</para></listitem> process after <function>fork()</function>.</para></listitem>
</varlistentry> </varlistentry>
<varlistentry> <varlistentry>
@ -128,8 +142,7 @@
<citerefentry><refentrytitle>sd-bus</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd-bus</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_bus_call_method</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_bus_call_method</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_bus_message_set_destination</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_bus_message_set_destination</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_bus_reply_method_return</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_bus_reply_method_return</refentrytitle><manvolnum>3</manvolnum></citerefentry>
<citerefentry><refentrytitle>sd_bus_send_to</refentrytitle><manvolnum>3</manvolnum></citerefentry>
</para> </para>
</refsect1> </refsect1>

View File

@ -41,6 +41,14 @@
<refsect1><title>Options</title> <refsect1><title>Options</title>
<variablelist> <variablelist>
<varlistentry>
<term><option>--unregister</option></term>
<listitem><para>If passed, instead of registering configured binary formats in the kernel, the
reverse operation is executed: all currently registered binary formats are unregistered from the
kernel.</para></listitem>
</varlistentry>
<xi:include href="standard-options.xml" xpointer="cat-config" /> <xi:include href="standard-options.xml" xpointer="cat-config" />
<xi:include href="standard-options.xml" xpointer="no-pager" /> <xi:include href="standard-options.xml" xpointer="no-pager" />
<xi:include href="standard-options.xml" xpointer="help" /> <xi:include href="standard-options.xml" xpointer="help" />

View File

@ -54,7 +54,7 @@
<listitem><para>The system time zone</para></listitem> <listitem><para>The system time zone</para></listitem>
<listitem><para>The system host name</para></listitem> <listitem><para>The system hostname</para></listitem>
<listitem><para>The machine ID of the system</para></listitem> <listitem><para>The machine ID of the system</para></listitem>
@ -133,7 +133,7 @@
<term><option>--hostname=<replaceable>HOSTNAME</replaceable></option></term> <term><option>--hostname=<replaceable>HOSTNAME</replaceable></option></term>
<listitem><para>Sets the system hostname. The argument should <listitem><para>Sets the system hostname. The argument should
be a host name, compatible with DNS. This controls the be a hostname, compatible with DNS. This controls the
<citerefentry><refentrytitle>hostname</refentrytitle><manvolnum>5</manvolnum></citerefentry> <citerefentry><refentrytitle>hostname</refentrytitle><manvolnum>5</manvolnum></citerefentry>
configuration file.</para></listitem> configuration file.</para></listitem>
</varlistentry> </varlistentry>

View File

@ -238,7 +238,7 @@
all subdirectories and subvolumes below it, but excluding any sub-mounts. May not be specified all subdirectories and subvolumes below it, but excluding any sub-mounts. May not be specified
together with <option>--image=</option> or <option>--ephemeral</option>.</para> together with <option>--image=</option> or <option>--ephemeral</option>.</para>
<para>Note that this switch leaves host name, machine ID and <para>Note that this switch leaves hostname, machine ID and
all other settings that could identify the instance all other settings that could identify the instance
unmodified.</para></listitem> unmodified.</para></listitem>
</varlistentry> </varlistentry>
@ -250,7 +250,7 @@
<listitem><para>If specified, the container is run with a temporary snapshot of its file system that is removed <listitem><para>If specified, the container is run with a temporary snapshot of its file system that is removed
immediately when the container terminates. May not be specified together with immediately when the container terminates. May not be specified together with
<option>--template=</option>.</para> <option>--template=</option>.</para>
<para>Note that this switch leaves host name, machine ID and all other settings that could identify <para>Note that this switch leaves hostname, machine ID and all other settings that could identify
the instance unmodified. Please note that — as with <option>--template=</option> — taking the the instance unmodified. Please note that — as with <option>--template=</option> — taking the
temporary snapshot is more efficient on file systems that support subvolume snapshots or 'reflinks' temporary snapshot is more efficient on file systems that support subvolume snapshots or 'reflinks'
natively (<literal>btrfs</literal> or new <literal>xfs</literal>) than on more traditional file natively (<literal>btrfs</literal> or new <literal>xfs</literal>) than on more traditional file

View File

@ -53,7 +53,7 @@
(<citerefentry project='man-pages'><refentrytitle>nss</refentrytitle><manvolnum>5</manvolnum></citerefentry>). (<citerefentry project='man-pages'><refentrytitle>nss</refentrytitle><manvolnum>5</manvolnum></citerefentry>).
Usage of the glibc NSS module Usage of the glibc NSS module
<citerefentry><refentrytitle>nss-resolve</refentrytitle><manvolnum>8</manvolnum></citerefentry> is <citerefentry><refentrytitle>nss-resolve</refentrytitle><manvolnum>8</manvolnum></citerefentry> is
required in order to allow glibc's NSS resolver functions to resolve host names via required in order to allow glibc's NSS resolver functions to resolve hostnames via
<command>systemd-resolved</command>.</para></listitem> <command>systemd-resolved</command>.</para></listitem>
<listitem><para>Additionally, <command>systemd-resolved</command> provides a local DNS stub listener on <listitem><para>Additionally, <command>systemd-resolved</command> provides a local DNS stub listener on
@ -69,7 +69,7 @@
<filename>/etc/systemd/resolved.conf</filename>, the per-link static settings in <filename>/etc/systemd/resolved.conf</filename>, the per-link static settings in
<filename>/etc/systemd/network/*.network</filename> files (in case <filename>/etc/systemd/network/*.network</filename> files (in case
<citerefentry><refentrytitle>systemd-networkd.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> <citerefentry><refentrytitle>systemd-networkd.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>
is used), the per-link dynamic settings received over DHCP, user request made via is used), the per-link dynamic settings received over DHCP, information provided via
<citerefentry><refentrytitle>resolvectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, and any <citerefentry><refentrytitle>resolvectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, and any
DNS server information made available by other system services. See DNS server information made available by other system services. See
<citerefentry><refentrytitle>resolved.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry> and <citerefentry><refentrytitle>resolved.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry> and
@ -104,6 +104,8 @@
<listitem><para>The mappings defined in <filename>/etc/hosts</filename> are resolved to their <listitem><para>The mappings defined in <filename>/etc/hosts</filename> are resolved to their
configured addresses and back, but they will not affect lookups for non-address types (like MX). configured addresses and back, but they will not affect lookups for non-address types (like MX).
Support for <filename>/etc/hosts</filename> may be disabled with <varname>ReadEtcHosts=no</varname>,
see <citerefentry><refentrytitle>resolved.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
</para></listitem> </para></listitem>
</itemizedlist> </itemizedlist>
</refsect1> </refsect1>
@ -111,32 +113,48 @@
<refsect1> <refsect1>
<title>Protocols and Routing</title> <title>Protocols and Routing</title>
<para>Lookup requests are routed to the available DNS servers, LLMNR and MulticastDNS interfaces <para>Lookup requests are routed to the available DNS servers, LLMNR, and MulticastDNS interfaces
according to the following rules:</para> according to the following rules:</para>
<itemizedlist> <itemizedlist>
<listitem><para>Lookups for the special hostname <literal>localhost</literal> are never routed to the <listitem><para>Names for which synthetic records are generated (as listed in the previous section) are
network. (A few other, special domains are handled the same way.)</para></listitem> never routed to the network and a reply is sent immediately. In particular this means that lookups for
<literal>localhost</literal> are never routed to the network.</para></listitem>
<listitem><para>Single-label names are routed to all local interfaces capable of IP multicasting, using <listitem><para>Single-label names are routed to all local interfaces capable of IP multicasting, where
the LLMNR protocol. Lookups for IPv4 addresses are only sent via LLMNR on IPv4, and lookups for IPv6 LLMNR is not disabled, using the LLMNR protocol. Lookups for IPv4 addresses are only sent via LLMNR on
addresses are only sent via LLMNR on IPv6. Lookups for the locally configured host name and the IPv4, and lookups for IPv6 addresses are only sent via LLMNR on IPv6. Lookups for the locally
<literal>_gateway</literal> host name are never routed to LLMNR.</para></listitem> configured hostname and the <literal>_gateway</literal> hostname are never routed to LLMNR.
</para></listitem>
<listitem><para>Multi-label names with the domain suffix <literal>.local</literal> are routed to all <listitem><para>Multi-label names with the domain suffix <literal>.local</literal> are routed to all
local interfaces capable of IP multicasting, using the MulticastDNS protocol. As with LLMNR IPv4 local interfaces capable of IP multicasting, where MulticastDNS is not disabled, using the MulticastDNS
address lookups are sent via IPv4 and IPv6 address lookups are sent via IPv6.</para></listitem> protocol. As with LLMNR, IPv4 address lookups are sent via IPv4 and IPv6 address lookups are sent via
IPv6.</para></listitem>
<listitem><para>Resolution of address records (A and AAAA) via unicast DNS (i.e. not LLMNR or
MulticastDNS) for non-synthesized single-label names is only allowed for non-top-level domains. This
means that such records can only be resolved when search domains are defined. For any interface which
defines search domains, such look-ups are routed to that interface, suffixed with each of the search
domains defined on that interface in turn. When global search domains are defined, such look-ups are
routed to all interfaces, suffixed by each of the global search domains in turn. The details of which
servers are queried and how the final reply is chosen are described below. Note that this means that
address queries for single-label names are never sent out to remote DNS servers, and if no search
domains are defined, resolution will fail.</para></listitem>
<listitem><para>Other multi-label names are routed to all local interfaces that have a DNS server <listitem><para>Other multi-label names are routed to all local interfaces that have a DNS server
configured, plus the globally configured DNS server if there is one. Address lookups from the configured, plus the globally configured DNS servers if there are any. Note that by default, lookups for
link-local address range are never routed to DNS. Note that by default lookups for domains with the domains with the <literal>.local</literal> suffix are not routed to DNS servers, unless the domain is
<literal>.local</literal> suffix are not routed to DNS servers, unless the domain is specified specified explicitly as routing or search domain for the DNS server and interface. This means that on
explicitly as routing or search domain for the DNS server and interface. This means that on networks networks where the <literal>.local</literal> domain is defined in a site-specific DNS server, explicit
where the <literal>.local</literal> domain is defined in a site-specific DNS server, explicit search or search or routing domains need to be configured to make lookups within this DNS domain work. Note that
routing domains need to be configured to make lookups within this DNS domain work. Note that today it's these days, it's generally recommended to avoid defining <literal>.local</literal> in a DNS server, as
generally recommended to avoid defining <literal>.local</literal> in a DNS server, as <ulink <ulink url="https://tools.ietf.org/html/rfc6762">RFC6762</ulink> reserves this domain for exclusive
url="https://tools.ietf.org/html/rfc6762">RFC6762</ulink> reserves this domain for exclusive
MulticastDNS use.</para></listitem> MulticastDNS use.</para></listitem>
<listitem><para>Address lookups are routed similarly to multi-label names, with the exception that
addresses from the link-local address range are never routed to unicast DNS and are only resolved using
LLMNR and MulticastDNS (when enabled).</para></listitem>
</itemizedlist> </itemizedlist>
<para>If lookups are routed to multiple interfaces, the first successful response is returned (thus <para>If lookups are routed to multiple interfaces, the first successful response is returned (thus
@ -151,12 +169,18 @@
<itemizedlist> <itemizedlist>
<listitem><para>If a name to look up matches (that is: is equal to or has as suffix) any of the <listitem><para>If a name to look up matches (that is: is equal to or has as suffix) any of the
configured search or route-only domains of any link (or the globally configured DNS settings), the configured search or route-only domains of any link (see
<citerefentry><refentrytitle>systemd.network</refentrytitle><manvolnum>5</manvolnum></citerefentry>),
or the globally configured DNS settings (see the discussion of <varname>Domains=</varname> in
<citerefentry><refentrytitle>resolved.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>),
"best matching" search/route-only domain is determined: the matching one with the most labels. The "best matching" search/route-only domain is determined: the matching one with the most labels. The
query is then sent to all DNS servers of any links or the globally configured DNS servers associated query is then sent to all DNS servers of any links or the globally configured DNS servers associated
with this "best matching" search/route-only domain. (Note that more than one link might have this same with this "best matching" search/route-only domain. (Note that more than one link might have this same
"best matching" search/route-only domain configured, in which case the query is sent to all of them in "best matching" search/route-only domain configured, in which case the query is sent to all of them in
parallel).</para></listitem> parallel).</para>
<para>In case of single-label names, when search domains are defined, the same logic applies, except
that the name is first suffixed by the search domain.</para></listitem>
<listitem><para>If a query does not match any configured search/route-only domain (neither per-link nor <listitem><para>If a query does not match any configured search/route-only domain (neither per-link nor
global), it is sent to all DNS servers that are configured on links with the "DNS default route" option global), it is sent to all DNS servers that are configured on links with the "DNS default route" option
@ -174,14 +198,15 @@
configured DNS domains for a link: if there's any route-only domain (not matching <literal>~.</literal>) configured DNS domains for a link: if there's any route-only domain (not matching <literal>~.</literal>)
it defaults to false, otherwise to true.</para> it defaults to false, otherwise to true.</para>
<para>Effectively this means: in order to preferably route all DNS queries not explicitly matched by <para>Effectively this means: in order to support single-label non-synthetized names, define appropriate
search/route-only domain configuration to a specific link, configure a <literal>~.</literal> route-only search domains. In order to preferably route all DNS queries not explicitly matched by search/route-only
domain on it. This will ensure that other links will not be considered for the queries (unless they too domain configuration to a specific link, configure a <literal>~.</literal> route-only domain on it. This
carry such a route-only domain). In order to route all such DNS queries to a specific link only in case will ensure that other links will not be considered for these queries (unless they too carry such a
no other link is preferable, then set the "DNS default route" option for the link to true, and do not route-only domain). In order to route all such DNS queries to a specific link only if no other link
configure a <literal>~.</literal> route-only domain on it. Finally, in order to ensure that a specific is preferable, set the "DNS default route" option for the link to true and do not configure a
link never receives any DNS traffic not matching any of its configured search/route-only domains, set the <literal>~.</literal> route-only domain on it. Finally, in order to ensure that a specific link never
"DNS default route" option for it to false.</para> receives any DNS traffic not matching any of its configured search/route-only domains, set the "DNS
default route" option for it to false.</para>
<para>See the <ulink url="https://www.freedesktop.org/wiki/Software/systemd/resolved">resolved D-Bus API <para>See the <ulink url="https://www.freedesktop.org/wiki/Software/systemd/resolved">resolved D-Bus API
Documentation</ulink> for information about the APIs <filename>systemd-resolved</filename> provides. Documentation</ulink> for information about the APIs <filename>systemd-resolved</filename> provides.

View File

@ -441,7 +441,7 @@
<literal>nearest-bridge</literal>, <literal>non-tpmr-bridge</literal> and <literal>nearest-bridge</literal>, <literal>non-tpmr-bridge</literal> and
<literal>customer-bridge</literal>. Defaults to false, which turns off LLDP packet emission. If not false, <literal>customer-bridge</literal>. Defaults to false, which turns off LLDP packet emission. If not false,
a short LLDP packet with information about the local system is sent out in regular intervals on the a short LLDP packet with information about the local system is sent out in regular intervals on the
link. The LLDP packet will contain information about the local host name, the local machine ID (as stored link. The LLDP packet will contain information about the local hostname, the local machine ID (as stored
in <citerefentry><refentrytitle>machine-id</refentrytitle><manvolnum>5</manvolnum></citerefentry>) and the in <citerefentry><refentrytitle>machine-id</refentrytitle><manvolnum>5</manvolnum></citerefentry>) and the
local interface name, as well as the pretty hostname of the system (as set in local interface name, as well as the pretty hostname of the system (as set in
<citerefentry><refentrytitle>machine-info</refentrytitle><manvolnum>5</manvolnum></citerefentry>). LLDP <citerefentry><refentrytitle>machine-info</refentrytitle><manvolnum>5</manvolnum></citerefentry>). LLDP
@ -521,12 +521,12 @@
this link. Each item in the list should be a domain name, optionally prefixed with a tilde this link. Each item in the list should be a domain name, optionally prefixed with a tilde
(<literal>~</literal>). The domains with the prefix are called "routing-only domains". The (<literal>~</literal>). The domains with the prefix are called "routing-only domains". The
domains without the prefix are called "search domains" and are first used as search suffixes for domains without the prefix are called "search domains" and are first used as search suffixes for
extending single-label host names (host names containing no dots) to become fully qualified extending single-label hostnames (hostnames containing no dots) to become fully qualified
domain names (FQDNs). If a single-label host name is resolved on this interface, each of the domain names (FQDNs). If a single-label hostname is resolved on this interface, each of the
specified search domains are appended to it in turn, converting it into a fully qualified domain specified search domains are appended to it in turn, converting it into a fully qualified domain
name, until one of them may be successfully resolved.</para> name, until one of them may be successfully resolved.</para>
<para>Both "search" and "routing-only" domains are used for routing of DNS queries: look-ups for host names <para>Both "search" and "routing-only" domains are used for routing of DNS queries: look-ups for hostnames
ending in those domains (hence also single label names, if any "search domains" are listed), are routed to ending in those domains (hence also single label names, if any "search domains" are listed), are routed to
the DNS servers configured for this interface. The domain routing logic is particularly useful on the DNS servers configured for this interface. The domain routing logic is particularly useful on
multi-homed hosts with DNS servers serving particular private DNS zones on each interface.</para> multi-homed hosts with DNS servers serving particular private DNS zones on each interface.</para>
@ -1470,7 +1470,7 @@
false.</para> false.</para>
<para>It is recommended to enable this option only on trusted networks, as setting this affects resolution <para>It is recommended to enable this option only on trusted networks, as setting this affects resolution
of all host names, in particular of single-label names. It is generally safer to use the supplied domain of all hostnames, in particular of single-label names. It is generally safer to use the supplied domain
only as routing domain, rather than as search domain, in order to not have it affect local resolution of only as routing domain, rather than as search domain, in order to not have it affect local resolution of
single-label names.</para> single-label names.</para>
@ -1780,7 +1780,7 @@
<literal>~</literal>. Defaults to false.</para> <literal>~</literal>. Defaults to false.</para>
<para>It is recommended to enable this option only on trusted networks, as setting this affects resolution <para>It is recommended to enable this option only on trusted networks, as setting this affects resolution
of all host names, in particular of single-label names. It is generally safer to use the supplied domain of all hostnames, in particular of single-label names. It is generally safer to use the supplied domain
only as routing domain, rather than as search domain, in order to not have it affect local resolution of only as routing domain, rather than as search domain, in order to not have it affect local resolution of
single-label names.</para> single-label names.</para>

View File

@ -289,7 +289,7 @@ option('libcryptsetup', type : 'combo', choices : ['auto', 'true', 'false'],
option('libcurl', type : 'combo', choices : ['auto', 'true', 'false'], option('libcurl', type : 'combo', choices : ['auto', 'true', 'false'],
description : 'libcurl support') description : 'libcurl support')
option('idn', type : 'boolean', option('idn', type : 'boolean',
description : 'use IDN when printing host names') description : 'use IDN when printing hostnames')
option('libidn2', type : 'combo', choices : ['auto', 'true', 'false'], option('libidn2', type : 'combo', choices : ['auto', 'true', 'false'],
description : 'libidn2 support') description : 'libidn2 support')
option('libidn', type : 'combo', choices : ['auto', 'true', 'false'], option('libidn', type : 'combo', choices : ['auto', 'true', 'false'],

View File

@ -70,21 +70,21 @@ msgid "Authentication is required to reload the systemd state."
msgstr "Неабходна аўтэнтыфікацыя для перачытання стану systemd." msgstr "Неабходна аўтэнтыфікацыя для перачытання стану systemd."
#: ../src/hostname/org.freedesktop.hostname1.policy.in.h:1 #: ../src/hostname/org.freedesktop.hostname1.policy.in.h:1
msgid "Set host name" msgid "Set hostname"
msgstr "Усталяваць імя вузла" msgstr "Усталяваць імя вузла"
#: ../src/hostname/org.freedesktop.hostname1.policy.in.h:2 #: ../src/hostname/org.freedesktop.hostname1.policy.in.h:2
msgid "Authentication is required to set the local host name." msgid "Authentication is required to set the local hostname."
msgstr "Неабходна аўтэнтыфікацыя для ўсталявання імя вузла." msgstr "Неабходна аўтэнтыфікацыя для ўсталявання імя вузла."
#: ../src/hostname/org.freedesktop.hostname1.policy.in.h:3 #: ../src/hostname/org.freedesktop.hostname1.policy.in.h:3
msgid "Set static host name" msgid "Set static hostname"
msgstr "Усталяваць статычнае імя вузла" msgstr "Усталяваць статычнае імя вузла"
#: ../src/hostname/org.freedesktop.hostname1.policy.in.h:4 #: ../src/hostname/org.freedesktop.hostname1.policy.in.h:4
msgid "" msgid ""
"Authentication is required to set the statically configured local host name, " "Authentication is required to set the statically configured local hostname, "
"as well as the pretty host name." "as well as the pretty hostname."
msgstr "" msgstr ""
"Неабходна аўтэнтыфікацыя для ўсталявання як статычнага так і прыгожага імя " "Неабходна аўтэнтыфікацыя для ўсталявання як статычнага так і прыгожага імя "
"вузла." "вузла."

View File

@ -70,21 +70,21 @@ msgid "Authentication is required to reload the systemd state."
msgstr "Nieabchodna aŭtentyfikacyja dlia pieračytannia stanu systemd." msgstr "Nieabchodna aŭtentyfikacyja dlia pieračytannia stanu systemd."
#: ../src/hostname/org.freedesktop.hostname1.policy.in.h:1 #: ../src/hostname/org.freedesktop.hostname1.policy.in.h:1
msgid "Set host name" msgid "Set hostname"
msgstr "Ustaliavać imia vuzla" msgstr "Ustaliavać imia vuzla"
#: ../src/hostname/org.freedesktop.hostname1.policy.in.h:2 #: ../src/hostname/org.freedesktop.hostname1.policy.in.h:2
msgid "Authentication is required to set the local host name." msgid "Authentication is required to set the local hostname."
msgstr "Nieabchodna aŭtentyfikacyja dlia ŭstaliavannia imia vuzla." msgstr "Nieabchodna aŭtentyfikacyja dlia ŭstaliavannia imia vuzla."
#: ../src/hostname/org.freedesktop.hostname1.policy.in.h:3 #: ../src/hostname/org.freedesktop.hostname1.policy.in.h:3
msgid "Set static host name" msgid "Set static hostname"
msgstr "Ustaliavać statyčnaje imia vuzla" msgstr "Ustaliavać statyčnaje imia vuzla"
#: ../src/hostname/org.freedesktop.hostname1.policy.in.h:4 #: ../src/hostname/org.freedesktop.hostname1.policy.in.h:4
msgid "" msgid ""
"Authentication is required to set the statically configured local host name, " "Authentication is required to set the statically configured local hostname, "
"as well as the pretty host name." "as well as the pretty hostname."
msgstr "" msgstr ""
"Nieabchodna aŭtentyfikacyja dlia ŭstaliavannia jak statyčnaha tak i " "Nieabchodna aŭtentyfikacyja dlia ŭstaliavannia jak statyčnaha tak i "
"pryhožaha imia vuzla." "pryhožaha imia vuzla."

View File

@ -69,21 +69,21 @@ msgid "Authentication is required to reload the systemd state."
msgstr "За презареждане на състоянието на systemd е необходима идентификация." msgstr "За презареждане на състоянието на systemd е необходима идентификация."
#: ../src/hostname/org.freedesktop.hostname1.policy.in.h:1 #: ../src/hostname/org.freedesktop.hostname1.policy.in.h:1
msgid "Set host name" msgid "Set hostname"
msgstr "Задаване на име на машината" msgstr "Задаване на име на машината"
#: ../src/hostname/org.freedesktop.hostname1.policy.in.h:2 #: ../src/hostname/org.freedesktop.hostname1.policy.in.h:2
msgid "Authentication is required to set the local host name." msgid "Authentication is required to set the local hostname."
msgstr "За задаване на име на локалната машина е необходима идентификация." msgstr "За задаване на име на локалната машина е необходима идентификация."
#: ../src/hostname/org.freedesktop.hostname1.policy.in.h:3 #: ../src/hostname/org.freedesktop.hostname1.policy.in.h:3
msgid "Set static host name" msgid "Set static hostname"
msgstr "Задаване на статично име на машината" msgstr "Задаване на статично име на машината"
#: ../src/hostname/org.freedesktop.hostname1.policy.in.h:4 #: ../src/hostname/org.freedesktop.hostname1.policy.in.h:4
msgid "" msgid ""
"Authentication is required to set the statically configured local host name, " "Authentication is required to set the statically configured local hostname, "
"as well as the pretty host name." "as well as the pretty hostname."
msgstr "" msgstr ""
"За задаване на статично име на локалната машина е необходима идентификация." "За задаване на статично име на локалната машина е необходима идентификация."

View File

@ -73,21 +73,21 @@ msgid "Authentication is required to reload the systemd state."
msgstr "Es requereix autenticació per tornar a carregar l'estat de systemd." msgstr "Es requereix autenticació per tornar a carregar l'estat de systemd."
#: src/hostname/org.freedesktop.hostname1.policy:22 #: src/hostname/org.freedesktop.hostname1.policy:22
msgid "Set host name" msgid "Set hostname"
msgstr "Estableix el nom d'amfitrió" msgstr "Estableix el nom d'amfitrió"
#: src/hostname/org.freedesktop.hostname1.policy:23 #: src/hostname/org.freedesktop.hostname1.policy:23
msgid "Authentication is required to set the local host name." msgid "Authentication is required to set the local hostname."
msgstr "Es requereix autenticació per establir el nom d'amfitrió local." msgstr "Es requereix autenticació per establir el nom d'amfitrió local."
#: src/hostname/org.freedesktop.hostname1.policy:32 #: src/hostname/org.freedesktop.hostname1.policy:32
msgid "Set static host name" msgid "Set static hostname"
msgstr "Estableix el nom d'amfitrió estàtic" msgstr "Estableix el nom d'amfitrió estàtic"
#: src/hostname/org.freedesktop.hostname1.policy:33 #: src/hostname/org.freedesktop.hostname1.policy:33
msgid "" msgid ""
"Authentication is required to set the statically configured local host name, " "Authentication is required to set the statically configured local hostname, "
"as well as the pretty host name." "as well as the pretty hostname."
msgstr "" msgstr ""
"Es requereix autenticació per establir el nom d'amfitrió local configurat " "Es requereix autenticació per establir el nom d'amfitrió local configurat "
"estàticament, així com el nom bonic d'amfitrió." "estàticament, així com el nom bonic d'amfitrió."

View File

@ -120,21 +120,21 @@ msgid ""
msgstr "Pro změnu hesla domovského adresáře uživatele je vyžadováno ověření." msgstr "Pro změnu hesla domovského adresáře uživatele je vyžadováno ověření."
#: src/hostname/org.freedesktop.hostname1.policy:20 #: src/hostname/org.freedesktop.hostname1.policy:20
msgid "Set host name" msgid "Set hostname"
msgstr "Nastavit název stroje" msgstr "Nastavit název stroje"
#: src/hostname/org.freedesktop.hostname1.policy:21 #: src/hostname/org.freedesktop.hostname1.policy:21
msgid "Authentication is required to set the local host name." msgid "Authentication is required to set the local hostname."
msgstr "Pro nastavení lokálního názvu stroje je vyžadováno ověření." msgstr "Pro nastavení lokálního názvu stroje je vyžadováno ověření."
#: src/hostname/org.freedesktop.hostname1.policy:30 #: src/hostname/org.freedesktop.hostname1.policy:30
msgid "Set static host name" msgid "Set static hostname"
msgstr "Nastavit statický název stroje" msgstr "Nastavit statický název stroje"
#: src/hostname/org.freedesktop.hostname1.policy:31 #: src/hostname/org.freedesktop.hostname1.policy:31
msgid "" msgid ""
"Authentication is required to set the statically configured local host name, " "Authentication is required to set the statically configured local hostname, "
"as well as the pretty host name." "as well as the pretty hostname."
msgstr "" msgstr ""
"Pro nastavení staticky konfigurovaného názvu lokálního stroje, stejně tak " "Pro nastavení staticky konfigurovaného názvu lokálního stroje, stejně tak "
"pro změnu uživatelsky přívětivého jména je vyžadováno ověření." "pro změnu uživatelsky přívětivého jména je vyžadováno ověření."

View File

@ -66,21 +66,21 @@ msgid "Authentication is required to reload the systemd state."
msgstr "Autentificering er nødvendig for at genindlæse systemd tilstanden." msgstr "Autentificering er nødvendig for at genindlæse systemd tilstanden."
#: ../src/hostname/org.freedesktop.hostname1.policy.in.h:1 #: ../src/hostname/org.freedesktop.hostname1.policy.in.h:1
msgid "Set host name" msgid "Set hostname"
msgstr "Sæt værtsnavn" msgstr "Sæt værtsnavn"
#: ../src/hostname/org.freedesktop.hostname1.policy.in.h:2 #: ../src/hostname/org.freedesktop.hostname1.policy.in.h:2
msgid "Authentication is required to set the local host name." msgid "Authentication is required to set the local hostname."
msgstr "Autentificering er nødvendig for at sætte værtsnavn." msgstr "Autentificering er nødvendig for at sætte værtsnavn."
#: ../src/hostname/org.freedesktop.hostname1.policy.in.h:3 #: ../src/hostname/org.freedesktop.hostname1.policy.in.h:3
msgid "Set static host name" msgid "Set static hostname"
msgstr "Sæt statisk værstnavn" msgstr "Sæt statisk værstnavn"
#: ../src/hostname/org.freedesktop.hostname1.policy.in.h:4 #: ../src/hostname/org.freedesktop.hostname1.policy.in.h:4
msgid "" msgid ""
"Authentication is required to set the statically configured local host name, " "Authentication is required to set the statically configured local hostname, "
"as well as the pretty host name." "as well as the pretty hostname."
msgstr "" msgstr ""
"Autentificering er nødvendig for at sætte det statisk konfigurerede lokale " "Autentificering er nødvendig for at sætte det statisk konfigurerede lokale "
"værtsnavn, lige så vel som det pæne værtsnavn." "værtsnavn, lige så vel som det pæne værtsnavn."

View File

@ -71,21 +71,21 @@ msgid "Authentication is required to reload the systemd state."
msgstr "Legitimierung ist zum erneuten Laden des systemd-Zustands notwendig." msgstr "Legitimierung ist zum erneuten Laden des systemd-Zustands notwendig."
#: ../src/hostname/org.freedesktop.hostname1.policy.in.h:1 #: ../src/hostname/org.freedesktop.hostname1.policy.in.h:1
msgid "Set host name" msgid "Set hostname"
msgstr "Rechnername festlegen" msgstr "Rechnername festlegen"
#: ../src/hostname/org.freedesktop.hostname1.policy.in.h:2 #: ../src/hostname/org.freedesktop.hostname1.policy.in.h:2
msgid "Authentication is required to set the local host name." msgid "Authentication is required to set the local hostname."
msgstr "Legitimierung ist zum Festlegen des lokalen Rechnernamens notwendig" msgstr "Legitimierung ist zum Festlegen des lokalen Rechnernamens notwendig"
#: ../src/hostname/org.freedesktop.hostname1.policy.in.h:3 #: ../src/hostname/org.freedesktop.hostname1.policy.in.h:3
msgid "Set static host name" msgid "Set static hostname"
msgstr "Statischen Rechnernamen festlegen" msgstr "Statischen Rechnernamen festlegen"
#: ../src/hostname/org.freedesktop.hostname1.policy.in.h:4 #: ../src/hostname/org.freedesktop.hostname1.policy.in.h:4
msgid "" msgid ""
"Authentication is required to set the statically configured local host name, " "Authentication is required to set the statically configured local hostname, "
"as well as the pretty host name." "as well as the pretty hostname."
msgstr "" msgstr ""
"Authentifizierung ist erforderlich, um den statisch geänderten, lokalen " "Authentifizierung ist erforderlich, um den statisch geänderten, lokalen "
"Rechnernamen, sowie den beschönigten Rechnernamen festzulegen." "Rechnernamen, sowie den beschönigten Rechnernamen festzulegen."

View File

@ -76,21 +76,21 @@ msgid "Authentication is required to reload the systemd state."
msgstr "Απαιτείται πιστοποίηση για να ορίσετε την ώρα του συστήματος." msgstr "Απαιτείται πιστοποίηση για να ορίσετε την ώρα του συστήματος."
#: ../src/hostname/org.freedesktop.hostname1.policy.in.h:1 #: ../src/hostname/org.freedesktop.hostname1.policy.in.h:1
msgid "Set host name" msgid "Set hostname"
msgstr "Ορισμός ονόματος οικοδεσπότη" msgstr "Ορισμός ονόματος οικοδεσπότη"
#: ../src/hostname/org.freedesktop.hostname1.policy.in.h:2 #: ../src/hostname/org.freedesktop.hostname1.policy.in.h:2
msgid "Authentication is required to set the local host name." msgid "Authentication is required to set the local hostname."
msgstr "Απαιτείται πιστοποίηση για να ορίσετε τοπικά όνομα οικοδεσπότη." msgstr "Απαιτείται πιστοποίηση για να ορίσετε τοπικά όνομα οικοδεσπότη."
#: ../src/hostname/org.freedesktop.hostname1.policy.in.h:3 #: ../src/hostname/org.freedesktop.hostname1.policy.in.h:3
msgid "Set static host name" msgid "Set static hostname"
msgstr "Ορισμός στατικού ονόματος οικοδεσπότη" msgstr "Ορισμός στατικού ονόματος οικοδεσπότη"
#: ../src/hostname/org.freedesktop.hostname1.policy.in.h:4 #: ../src/hostname/org.freedesktop.hostname1.policy.in.h:4
msgid "" msgid ""
"Authentication is required to set the statically configured local host name, " "Authentication is required to set the statically configured local hostname, "
"as well as the pretty host name." "as well as the pretty hostname."
msgstr "" msgstr ""
"Απαιτείται πιστοποίηση για να ορίσετε το στατικά ρυθμισμένο όνομα τοπικού " "Απαιτείται πιστοποίηση για να ορίσετε το στατικά ρυθμισμένο όνομα τοπικού "
"οικοδεσπότη, καθώς και το pretty όνομα οικοδεσπότη." "οικοδεσπότη, καθώς και το pretty όνομα οικοδεσπότη."

View File

@ -71,21 +71,21 @@ msgid "Authentication is required to reload the systemd state."
msgstr "Se requiere autenticación para recargar el estado de systemd." msgstr "Se requiere autenticación para recargar el estado de systemd."
#: ../src/hostname/org.freedesktop.hostname1.policy.in.h:1 #: ../src/hostname/org.freedesktop.hostname1.policy.in.h:1
msgid "Set host name" msgid "Set hostname"
msgstr "Establecer el nombre del equipo" msgstr "Establecer el nombre del equipo"
#: ../src/hostname/org.freedesktop.hostname1.policy.in.h:2 #: ../src/hostname/org.freedesktop.hostname1.policy.in.h:2
msgid "Authentication is required to set the local host name." msgid "Authentication is required to set the local hostname."
msgstr "Se requiere autenticación para establecer el nombre del equipo local." msgstr "Se requiere autenticación para establecer el nombre del equipo local."
#: ../src/hostname/org.freedesktop.hostname1.policy.in.h:3 #: ../src/hostname/org.freedesktop.hostname1.policy.in.h:3
msgid "Set static host name" msgid "Set static hostname"
msgstr "Establecer nombre estático del equipo" msgstr "Establecer nombre estático del equipo"
#: ../src/hostname/org.freedesktop.hostname1.policy.in.h:4 #: ../src/hostname/org.freedesktop.hostname1.policy.in.h:4
msgid "" msgid ""
"Authentication is required to set the statically configured local host name, " "Authentication is required to set the statically configured local hostname, "
"as well as the pretty host name." "as well as the pretty hostname."
msgstr "" msgstr ""
"Se requiere autenticación para establecer el nombre estático de equipo " "Se requiere autenticación para establecer el nombre estático de equipo "
"local, así como el nombre visible del equipo." "local, así como el nombre visible del equipo."

View File

@ -125,21 +125,21 @@ msgstr ""
"d'un utilisateur." "d'un utilisateur."
#: src/hostname/org.freedesktop.hostname1.policy:20 #: src/hostname/org.freedesktop.hostname1.policy:20
msgid "Set host name" msgid "Set hostname"
msgstr "Définir le nom d'hôte" msgstr "Définir le nom d'hôte"
#: src/hostname/org.freedesktop.hostname1.policy:21 #: src/hostname/org.freedesktop.hostname1.policy:21
msgid "Authentication is required to set the local host name." msgid "Authentication is required to set the local hostname."
msgstr "Authentification requise pour définir le nom d'hôte local." msgstr "Authentification requise pour définir le nom d'hôte local."
#: src/hostname/org.freedesktop.hostname1.policy:30 #: src/hostname/org.freedesktop.hostname1.policy:30
msgid "Set static host name" msgid "Set static hostname"
msgstr "Définir le nom d'hôte statique" msgstr "Définir le nom d'hôte statique"
#: src/hostname/org.freedesktop.hostname1.policy:31 #: src/hostname/org.freedesktop.hostname1.policy:31
msgid "" msgid ""
"Authentication is required to set the statically configured local host name, " "Authentication is required to set the statically configured local hostname, "
"as well as the pretty host name." "as well as the pretty hostname."
msgstr "" msgstr ""
"Authentification requise pour définir le nom d'hôte local de manière " "Authentification requise pour définir le nom d'hôte local de manière "
"statique, tout comme le nom d'hôte familier." "statique, tout comme le nom d'hôte familier."

View File

@ -70,21 +70,21 @@ msgid "Authentication is required to reload the systemd state."
msgstr "Requírese autenticación para recargar o estado de systemd." msgstr "Requírese autenticación para recargar o estado de systemd."
#: src/hostname/org.freedesktop.hostname1.policy:20 #: src/hostname/org.freedesktop.hostname1.policy:20
msgid "Set host name" msgid "Set hostname"
msgstr "Estabelecer o nome do equipo" msgstr "Estabelecer o nome do equipo"
#: src/hostname/org.freedesktop.hostname1.policy:21 #: src/hostname/org.freedesktop.hostname1.policy:21
msgid "Authentication is required to set the local host name." msgid "Authentication is required to set the local hostname."
msgstr "Requírese autenticación para estabelecer o nome local do equiupo." msgstr "Requírese autenticación para estabelecer o nome local do equiupo."
#: src/hostname/org.freedesktop.hostname1.policy:30 #: src/hostname/org.freedesktop.hostname1.policy:30
msgid "Set static host name" msgid "Set static hostname"
msgstr "Estabelecer o nome do equipo estático" msgstr "Estabelecer o nome do equipo estático"
#: src/hostname/org.freedesktop.hostname1.policy:31 #: src/hostname/org.freedesktop.hostname1.policy:31
msgid "" msgid ""
"Authentication is required to set the statically configured local host name, " "Authentication is required to set the statically configured local hostname, "
"as well as the pretty host name." "as well as the pretty hostname."
msgstr "" msgstr ""
"Requírese autenticación para estabelecer de forma o nome do equipo local " "Requírese autenticación para estabelecer de forma o nome do equipo local "
"estabelecido de forma estática, así como o nome do equipo lexíbel por " "estabelecido de forma estática, así como o nome do equipo lexíbel por "

View File

@ -118,21 +118,21 @@ msgid ""
msgstr "Potrebna je ovjera za promjenu lozinke osobnog prostora korisnika." msgstr "Potrebna je ovjera za promjenu lozinke osobnog prostora korisnika."
#: src/hostname/org.freedesktop.hostname1.policy:20 #: src/hostname/org.freedesktop.hostname1.policy:20
msgid "Set host name" msgid "Set hostname"
msgstr "Postavi naziv računala" msgstr "Postavi naziv računala"
#: src/hostname/org.freedesktop.hostname1.policy:21 #: src/hostname/org.freedesktop.hostname1.policy:21
msgid "Authentication is required to set the local host name." msgid "Authentication is required to set the local hostname."
msgstr "Potrebna je ovjera za postavljanje naziva lokalnog računala." msgstr "Potrebna je ovjera za postavljanje naziva lokalnog računala."
#: src/hostname/org.freedesktop.hostname1.policy:30 #: src/hostname/org.freedesktop.hostname1.policy:30
msgid "Set static host name" msgid "Set static hostname"
msgstr "Postavi nepromjenjivi naziv račumala" msgstr "Postavi nepromjenjivi naziv račumala"
#: src/hostname/org.freedesktop.hostname1.policy:31 #: src/hostname/org.freedesktop.hostname1.policy:31
msgid "" msgid ""
"Authentication is required to set the statically configured local host name, " "Authentication is required to set the statically configured local hostname, "
"as well as the pretty host name." "as well as the pretty hostname."
msgstr "" msgstr ""
"Potrebna je ovjera za postavljenje nepromjenjivog naziva lokalnog računala, " "Potrebna je ovjera za postavljenje nepromjenjivog naziva lokalnog računala, "
"kao i prijatnog naziva računala." "kao i prijatnog naziva računala."

View File

@ -71,21 +71,21 @@ msgid "Authentication is required to reload the systemd state."
msgstr "Hitelesítés szükséges a systemd állapotának újratöltéséhez." msgstr "Hitelesítés szükséges a systemd állapotának újratöltéséhez."
#: ../src/hostname/org.freedesktop.hostname1.policy.in.h:1 #: ../src/hostname/org.freedesktop.hostname1.policy.in.h:1
msgid "Set host name" msgid "Set hostname"
msgstr "Gépnév beállítása" msgstr "Gépnév beállítása"
#: ../src/hostname/org.freedesktop.hostname1.policy.in.h:2 #: ../src/hostname/org.freedesktop.hostname1.policy.in.h:2
msgid "Authentication is required to set the local host name." msgid "Authentication is required to set the local hostname."
msgstr "Hitelesítés szükséges a helyi gépnév beállításához." msgstr "Hitelesítés szükséges a helyi gépnév beállításához."
#: ../src/hostname/org.freedesktop.hostname1.policy.in.h:3 #: ../src/hostname/org.freedesktop.hostname1.policy.in.h:3
msgid "Set static host name" msgid "Set static hostname"
msgstr "Statikus gépnév beállítása" msgstr "Statikus gépnév beállítása"
#: ../src/hostname/org.freedesktop.hostname1.policy.in.h:4 #: ../src/hostname/org.freedesktop.hostname1.policy.in.h:4
msgid "" msgid ""
"Authentication is required to set the statically configured local host name, " "Authentication is required to set the statically configured local hostname, "
"as well as the pretty host name." "as well as the pretty hostname."
msgstr "" msgstr ""
"Hitelesítés szükséges a statikusan megadott helyi gépnév, valamint a szép " "Hitelesítés szükséges a statikusan megadott helyi gépnév, valamint a szép "
"gépnév beállításához." "gépnév beállításához."

View File

@ -66,21 +66,21 @@ msgid "Authentication is required to reload the systemd state."
msgstr "Otentikasi diperlukan untuk memuat ulang keadaan systemd." msgstr "Otentikasi diperlukan untuk memuat ulang keadaan systemd."
#: src/hostname/org.freedesktop.hostname1.policy:22 #: src/hostname/org.freedesktop.hostname1.policy:22
msgid "Set host name" msgid "Set hostname"
msgstr "Setel nama host" msgstr "Setel nama host"
#: src/hostname/org.freedesktop.hostname1.policy:23 #: src/hostname/org.freedesktop.hostname1.policy:23
msgid "Authentication is required to set the local host name." msgid "Authentication is required to set the local hostname."
msgstr "Otentikasi diperlukan untuk menata nama host lokal." msgstr "Otentikasi diperlukan untuk menata nama host lokal."
#: src/hostname/org.freedesktop.hostname1.policy:32 #: src/hostname/org.freedesktop.hostname1.policy:32
msgid "Set static host name" msgid "Set static hostname"
msgstr "Setel nama host statik" msgstr "Setel nama host statik"
#: src/hostname/org.freedesktop.hostname1.policy:33 #: src/hostname/org.freedesktop.hostname1.policy:33
msgid "" msgid ""
"Authentication is required to set the statically configured local host name, " "Authentication is required to set the statically configured local hostname, "
"as well as the pretty host name." "as well as the pretty hostname."
msgstr "" msgstr ""
"Otentikasi diperlukan untuk menata nama host lokal yang dikonfigurasi " "Otentikasi diperlukan untuk menata nama host lokal yang dikonfigurasi "
"statik, maupun nama host cantik." "statik, maupun nama host cantik."

View File

@ -124,21 +124,21 @@ msgstr ""
"dell'utente." "dell'utente."
#: src/hostname/org.freedesktop.hostname1.policy:20 #: src/hostname/org.freedesktop.hostname1.policy:20
msgid "Set host name" msgid "Set hostname"
msgstr "Configura il nome host" msgstr "Configura il nome host"
#: src/hostname/org.freedesktop.hostname1.policy:21 #: src/hostname/org.freedesktop.hostname1.policy:21
msgid "Authentication is required to set the local host name." msgid "Authentication is required to set the local hostname."
msgstr "Autenticazione richiesta per configurare il nome host locale." msgstr "Autenticazione richiesta per configurare il nome host locale."
#: src/hostname/org.freedesktop.hostname1.policy:30 #: src/hostname/org.freedesktop.hostname1.policy:30
msgid "Set static host name" msgid "Set static hostname"
msgstr "Configura il nome host statico" msgstr "Configura il nome host statico"
#: src/hostname/org.freedesktop.hostname1.policy:31 #: src/hostname/org.freedesktop.hostname1.policy:31
msgid "" msgid ""
"Authentication is required to set the statically configured local host name, " "Authentication is required to set the statically configured local hostname, "
"as well as the pretty host name." "as well as the pretty hostname."
msgstr "" msgstr ""
"Autenticazione richiesta per configurare staticamente il nome host locale e " "Autenticazione richiesta per configurare staticamente il nome host locale e "
"il nome host descrittivo." "il nome host descrittivo."

View File

@ -110,21 +110,21 @@ msgid "Authentication is required to change the password of a user's home area."
msgstr "ユーザのホーム領域のパスワードを変更するには認証が必要です。" msgstr "ユーザのホーム領域のパスワードを変更するには認証が必要です。"
#: src/hostname/org.freedesktop.hostname1.policy:20 #: src/hostname/org.freedesktop.hostname1.policy:20
msgid "Set host name" msgid "Set hostname"
msgstr "ホスト名の設定" msgstr "ホスト名の設定"
#: src/hostname/org.freedesktop.hostname1.policy:21 #: src/hostname/org.freedesktop.hostname1.policy:21
msgid "Authentication is required to set the local host name." msgid "Authentication is required to set the local hostname."
msgstr "ホスト名を設定するには認証が必要です。" msgstr "ホスト名を設定するには認証が必要です。"
#: src/hostname/org.freedesktop.hostname1.policy:30 #: src/hostname/org.freedesktop.hostname1.policy:30
msgid "Set static host name" msgid "Set static hostname"
msgstr "静的なホスト名の設定" msgstr "静的なホスト名の設定"
#: src/hostname/org.freedesktop.hostname1.policy:31 #: src/hostname/org.freedesktop.hostname1.policy:31
msgid "" msgid ""
"Authentication is required to set the statically configured local host name, " "Authentication is required to set the statically configured local hostname, "
"as well as the pretty host name." "as well as the pretty hostname."
msgstr "静的なホスト名を設定するには認証が必要です。" msgstr "静的なホスト名を設定するには認証が必要です。"
#: src/hostname/org.freedesktop.hostname1.policy:41 #: src/hostname/org.freedesktop.hostname1.policy:41

View File

@ -66,21 +66,21 @@ msgid "Authentication is required to reload the systemd state."
msgstr "systemd 상태를 다시 불러오려면 인증이 필요합니다." msgstr "systemd 상태를 다시 불러오려면 인증이 필요합니다."
#: ../src/hostname/org.freedesktop.hostname1.policy.in.h:1 #: ../src/hostname/org.freedesktop.hostname1.policy.in.h:1
msgid "Set host name" msgid "Set hostname"
msgstr "호스트 이름 설정" msgstr "호스트 이름 설정"
#: ../src/hostname/org.freedesktop.hostname1.policy.in.h:2 #: ../src/hostname/org.freedesktop.hostname1.policy.in.h:2
msgid "Authentication is required to set the local host name." msgid "Authentication is required to set the local hostname."
msgstr "로컬 호스트 이름을 설정하려면 인증이 필요합니다." msgstr "로컬 호스트 이름을 설정하려면 인증이 필요합니다."
#: ../src/hostname/org.freedesktop.hostname1.policy.in.h:3 #: ../src/hostname/org.freedesktop.hostname1.policy.in.h:3
msgid "Set static host name" msgid "Set static hostname"
msgstr "정적 호스트 이름 설정" msgstr "정적 호스트 이름 설정"
#: ../src/hostname/org.freedesktop.hostname1.policy.in.h:4 #: ../src/hostname/org.freedesktop.hostname1.policy.in.h:4
msgid "" msgid ""
"Authentication is required to set the statically configured local host name, " "Authentication is required to set the statically configured local hostname, "
"as well as the pretty host name." "as well as the pretty hostname."
msgstr "" msgstr ""
"로컬 호스트 이름을 모양새를 갖춘 호스트 이름 처럼 정적으로 설정하려면 인증" "로컬 호스트 이름을 모양새를 갖춘 호스트 이름 처럼 정적으로 설정하려면 인증"
"이 필요합니다." "이 필요합니다."

View File

@ -68,22 +68,22 @@ msgid "Authentication is required to reload the systemd state."
msgstr "Norint iš naujo įkelti systemd būseną, reikia patvirtinti tapatybę." msgstr "Norint iš naujo įkelti systemd būseną, reikia patvirtinti tapatybę."
#: src/hostname/org.freedesktop.hostname1.policy:20 #: src/hostname/org.freedesktop.hostname1.policy:20
msgid "Set host name" msgid "Set hostname"
msgstr "Nustatyti serverio pavadinimą" msgstr "Nustatyti serverio pavadinimą"
#: src/hostname/org.freedesktop.hostname1.policy:21 #: src/hostname/org.freedesktop.hostname1.policy:21
msgid "Authentication is required to set the local host name." msgid "Authentication is required to set the local hostname."
msgstr "" msgstr ""
"Norint nustatyti vietinio serverio pavadinimą, reikia nustatyti tapatybę." "Norint nustatyti vietinio serverio pavadinimą, reikia nustatyti tapatybę."
#: src/hostname/org.freedesktop.hostname1.policy:30 #: src/hostname/org.freedesktop.hostname1.policy:30
msgid "Set static host name" msgid "Set static hostname"
msgstr "Nustatyti statinį serverio pavadinimą" msgstr "Nustatyti statinį serverio pavadinimą"
#: src/hostname/org.freedesktop.hostname1.policy:31 #: src/hostname/org.freedesktop.hostname1.policy:31
msgid "" msgid ""
"Authentication is required to set the statically configured local host name, " "Authentication is required to set the statically configured local hostname, "
"as well as the pretty host name." "as well as the pretty hostname."
msgstr "" msgstr ""
"Norint nustatyti statiškai sukonfigūruotą serverio pavadinimą, o taip pat " "Norint nustatyti statiškai sukonfigūruotą serverio pavadinimą, o taip pat "
"lengvai įsimenamą serverio pavadinimą, reikia nustatyti tapatybę." "lengvai įsimenamą serverio pavadinimą, reikia nustatyti tapatybę."

View File

@ -130,21 +130,21 @@ msgstr ""
"użytkownika." "użytkownika."
#: src/hostname/org.freedesktop.hostname1.policy:20 #: src/hostname/org.freedesktop.hostname1.policy:20
msgid "Set host name" msgid "Set hostname"
msgstr "Ustawienie nazwy komputera" msgstr "Ustawienie nazwy komputera"
#: src/hostname/org.freedesktop.hostname1.policy:21 #: src/hostname/org.freedesktop.hostname1.policy:21
msgid "Authentication is required to set the local host name." msgid "Authentication is required to set the local hostname."
msgstr "Wymagane jest uwierzytelnienie, aby ustawić nazwę lokalnego komputera." msgstr "Wymagane jest uwierzytelnienie, aby ustawić nazwę lokalnego komputera."
#: src/hostname/org.freedesktop.hostname1.policy:30 #: src/hostname/org.freedesktop.hostname1.policy:30
msgid "Set static host name" msgid "Set static hostname"
msgstr "Ustawienie statycznej nazwy komputera" msgstr "Ustawienie statycznej nazwy komputera"
#: src/hostname/org.freedesktop.hostname1.policy:31 #: src/hostname/org.freedesktop.hostname1.policy:31
msgid "" msgid ""
"Authentication is required to set the statically configured local host name, " "Authentication is required to set the statically configured local hostname, "
"as well as the pretty host name." "as well as the pretty hostname."
msgstr "" msgstr ""
"Wymagane jest uwierzytelnienie, aby ustawić statycznie skonfigurowaną nazwę " "Wymagane jest uwierzytelnienie, aby ustawić statycznie skonfigurowaną nazwę "
"lokalnego komputera, a także jego nazwę czytelną dla człowieka." "lokalnego komputera, a także jego nazwę czytelną dla człowieka."

View File

@ -74,21 +74,21 @@ msgid "Authentication is required to reload the systemd state."
msgstr "É necessária autenticação para recarregar o estado do sistema." msgstr "É necessária autenticação para recarregar o estado do sistema."
#: src/hostname/org.freedesktop.hostname1.policy:20 #: src/hostname/org.freedesktop.hostname1.policy:20
msgid "Set host name" msgid "Set hostname"
msgstr "Definir nome de máquina" msgstr "Definir nome de máquina"
#: src/hostname/org.freedesktop.hostname1.policy:21 #: src/hostname/org.freedesktop.hostname1.policy:21
msgid "Authentication is required to set the local host name." msgid "Authentication is required to set the local hostname."
msgstr "É necessária autenticação para definir nome de máquina local." msgstr "É necessária autenticação para definir nome de máquina local."
#: src/hostname/org.freedesktop.hostname1.policy:30 #: src/hostname/org.freedesktop.hostname1.policy:30
msgid "Set static host name" msgid "Set static hostname"
msgstr "Definir nome estático de máquina" msgstr "Definir nome estático de máquina"
#: src/hostname/org.freedesktop.hostname1.policy:31 #: src/hostname/org.freedesktop.hostname1.policy:31
msgid "" msgid ""
"Authentication is required to set the statically configured local host name, " "Authentication is required to set the statically configured local hostname, "
"as well as the pretty host name." "as well as the pretty hostname."
msgstr "" msgstr ""
"É necessária autenticação para definir o nome de máquina local configurado " "É necessária autenticação para definir o nome de máquina local configurado "
"estaticamente, assim como o nome apresentável de máquina." "estaticamente, assim como o nome apresentável de máquina."

View File

@ -73,21 +73,21 @@ msgid "Authentication is required to reload the systemd state."
msgstr "Autentificarea este necesară pentru a reîncărca starea systemd." msgstr "Autentificarea este necesară pentru a reîncărca starea systemd."
#: ../src/hostname/org.freedesktop.hostname1.policy.in.h:1 #: ../src/hostname/org.freedesktop.hostname1.policy.in.h:1
msgid "Set host name" msgid "Set hostname"
msgstr "Stabilește numele de server" msgstr "Stabilește numele de server"
#: ../src/hostname/org.freedesktop.hostname1.policy.in.h:2 #: ../src/hostname/org.freedesktop.hostname1.policy.in.h:2
msgid "Authentication is required to set the local host name." msgid "Authentication is required to set the local hostname."
msgstr "Autentificarea este necesară pentru a stabili numele de server local." msgstr "Autentificarea este necesară pentru a stabili numele de server local."
#: ../src/hostname/org.freedesktop.hostname1.policy.in.h:3 #: ../src/hostname/org.freedesktop.hostname1.policy.in.h:3
msgid "Set static host name" msgid "Set static hostname"
msgstr "Stabilește numele de server static" msgstr "Stabilește numele de server static"
#: ../src/hostname/org.freedesktop.hostname1.policy.in.h:4 #: ../src/hostname/org.freedesktop.hostname1.policy.in.h:4
msgid "" msgid ""
"Authentication is required to set the statically configured local host name, " "Authentication is required to set the statically configured local hostname, "
"as well as the pretty host name." "as well as the pretty hostname."
msgstr "" msgstr ""
"Autentificarea este necesara pentru a stabili numele de server static " "Autentificarea este necesara pentru a stabili numele de server static "
"configurat local, precum și numele lung de server." "configurat local, precum și numele lung de server."

View File

@ -134,21 +134,21 @@ msgstr ""
" пройти аутентификацию." " пройти аутентификацию."
#: src/hostname/org.freedesktop.hostname1.policy:20 #: src/hostname/org.freedesktop.hostname1.policy:20
msgid "Set host name" msgid "Set hostname"
msgstr "Настроить имя компьютера" msgstr "Настроить имя компьютера"
#: src/hostname/org.freedesktop.hostname1.policy:21 #: src/hostname/org.freedesktop.hostname1.policy:21
msgid "Authentication is required to set the local host name." msgid "Authentication is required to set the local hostname."
msgstr "Чтобы настроить имя компьютера, необходимо пройти аутентификацию." msgstr "Чтобы настроить имя компьютера, необходимо пройти аутентификацию."
#: src/hostname/org.freedesktop.hostname1.policy:30 #: src/hostname/org.freedesktop.hostname1.policy:30
msgid "Set static host name" msgid "Set static hostname"
msgstr "Настроить статическое имя компьютера" msgstr "Настроить статическое имя компьютера"
#: src/hostname/org.freedesktop.hostname1.policy:31 #: src/hostname/org.freedesktop.hostname1.policy:31
msgid "" msgid ""
"Authentication is required to set the statically configured local host name, " "Authentication is required to set the statically configured local hostname, "
"as well as the pretty host name." "as well as the pretty hostname."
msgstr "" msgstr ""
"Чтобы настроить статическое имя компьютера, а также его «красивое» имя, " "Чтобы настроить статическое имя компьютера, а также его «красивое» имя, "
"необходимо пройти аутентификацию." "необходимо пройти аутентификацию."

View File

@ -72,21 +72,21 @@ msgstr ""
"Vyžaduje sa overenie totožnosti na znovu načítanie stavu systému systemd." "Vyžaduje sa overenie totožnosti na znovu načítanie stavu systému systemd."
#: ../src/hostname/org.freedesktop.hostname1.policy.in.h:1 #: ../src/hostname/org.freedesktop.hostname1.policy.in.h:1
msgid "Set host name" msgid "Set hostname"
msgstr "Nastavenie názvu hostiteľa" msgstr "Nastavenie názvu hostiteľa"
#: ../src/hostname/org.freedesktop.hostname1.policy.in.h:2 #: ../src/hostname/org.freedesktop.hostname1.policy.in.h:2
msgid "Authentication is required to set the local host name." msgid "Authentication is required to set the local hostname."
msgstr "Vyžaduje sa overenie totožnosti na nastavenie názvu hostiteľa." msgstr "Vyžaduje sa overenie totožnosti na nastavenie názvu hostiteľa."
#: ../src/hostname/org.freedesktop.hostname1.policy.in.h:3 #: ../src/hostname/org.freedesktop.hostname1.policy.in.h:3
msgid "Set static host name" msgid "Set static hostname"
msgstr "Nastavenie nemenného názvu hostiteľa" msgstr "Nastavenie nemenného názvu hostiteľa"
#: ../src/hostname/org.freedesktop.hostname1.policy.in.h:4 #: ../src/hostname/org.freedesktop.hostname1.policy.in.h:4
msgid "" msgid ""
"Authentication is required to set the statically configured local host name, " "Authentication is required to set the statically configured local hostname, "
"as well as the pretty host name." "as well as the pretty hostname."
msgstr "" msgstr ""
"Vyžaduje sa overenie totožnosti na nastavenie pevne určeného názvu miestneho " "Vyžaduje sa overenie totožnosti na nastavenie pevne určeného názvu miestneho "
"hostiteľa, známeho ako zrozumiteľný názov hostiteľa." "hostiteľa, známeho ako zrozumiteľný názov hostiteľa."

View File

@ -72,21 +72,21 @@ msgstr ""
"Потребно је да се идентификујете да бисте поново учитали стање систем-деа." "Потребно је да се идентификујете да бисте поново учитали стање систем-деа."
#: src/hostname/org.freedesktop.hostname1.policy.in:22 #: src/hostname/org.freedesktop.hostname1.policy.in:22
msgid "Set host name" msgid "Set hostname"
msgstr "Постави назив машине" msgstr "Постави назив машине"
#: src/hostname/org.freedesktop.hostname1.policy.in:23 #: src/hostname/org.freedesktop.hostname1.policy.in:23
msgid "Authentication is required to set the local host name." msgid "Authentication is required to set the local hostname."
msgstr "Потребно је да се идентификујете да бисте поставили назив машине." msgstr "Потребно је да се идентификујете да бисте поставили назив машине."
#: src/hostname/org.freedesktop.hostname1.policy.in:32 #: src/hostname/org.freedesktop.hostname1.policy.in:32
msgid "Set static host name" msgid "Set static hostname"
msgstr "Постави статички назив машине" msgstr "Постави статички назив машине"
#: src/hostname/org.freedesktop.hostname1.policy.in:33 #: src/hostname/org.freedesktop.hostname1.policy.in:33
msgid "" msgid ""
"Authentication is required to set the statically configured local host name, " "Authentication is required to set the statically configured local hostname, "
"as well as the pretty host name." "as well as the pretty hostname."
msgstr "" msgstr ""
"Потребно је да се идентификујете да бисте поставили статички назив машине и " "Потребно је да се идентификујете да бисте поставили статички назив машине и "
"да бисте поставили леп назив машине." "да бисте поставили леп назив машине."

View File

@ -68,21 +68,21 @@ msgid "Authentication is required to reload the systemd state."
msgstr "Autentisering krävs för att läsa om tillståndet för systemd." msgstr "Autentisering krävs för att läsa om tillståndet för systemd."
#: ../src/hostname/org.freedesktop.hostname1.policy.in.h:1 #: ../src/hostname/org.freedesktop.hostname1.policy.in.h:1
msgid "Set host name" msgid "Set hostname"
msgstr "Ange värdnamn" msgstr "Ange värdnamn"
#: ../src/hostname/org.freedesktop.hostname1.policy.in.h:2 #: ../src/hostname/org.freedesktop.hostname1.policy.in.h:2
msgid "Authentication is required to set the local host name." msgid "Authentication is required to set the local hostname."
msgstr "Autentisering krävs för att ställa in lokalt värdnamn." msgstr "Autentisering krävs för att ställa in lokalt värdnamn."
#: ../src/hostname/org.freedesktop.hostname1.policy.in.h:3 #: ../src/hostname/org.freedesktop.hostname1.policy.in.h:3
msgid "Set static host name" msgid "Set static hostname"
msgstr "Ange statiskt värdnamn" msgstr "Ange statiskt värdnamn"
#: ../src/hostname/org.freedesktop.hostname1.policy.in.h:4 #: ../src/hostname/org.freedesktop.hostname1.policy.in.h:4
msgid "" msgid ""
"Authentication is required to set the statically configured local host name, " "Authentication is required to set the statically configured local hostname, "
"as well as the pretty host name." "as well as the pretty hostname."
msgstr "" msgstr ""
"Autentisering krävs för att ställa in det statiskt konfigurerade lokala " "Autentisering krävs för att ställa in det statiskt konfigurerade lokala "
"värdnamnet såväl som det stiliga värdnamnet." "värdnamnet såväl som det stiliga värdnamnet."

View File

@ -70,21 +70,21 @@ msgid "Authentication is required to reload the systemd state."
msgstr "systemd durumunu yeniden yüklemek kimlik doğrulaması gerektiriyor." msgstr "systemd durumunu yeniden yüklemek kimlik doğrulaması gerektiriyor."
#: src/hostname/org.freedesktop.hostname1.policy:20 #: src/hostname/org.freedesktop.hostname1.policy:20
msgid "Set host name" msgid "Set hostname"
msgstr "Makine adını ayarla" msgstr "Makine adını ayarla"
#: src/hostname/org.freedesktop.hostname1.policy:21 #: src/hostname/org.freedesktop.hostname1.policy:21
msgid "Authentication is required to set the local host name." msgid "Authentication is required to set the local hostname."
msgstr "Yerel makine adını ayarlamak kimlik doğrulaması gerektiriyor." msgstr "Yerel makine adını ayarlamak kimlik doğrulaması gerektiriyor."
#: src/hostname/org.freedesktop.hostname1.policy:30 #: src/hostname/org.freedesktop.hostname1.policy:30
msgid "Set static host name" msgid "Set static hostname"
msgstr "Statik makine adı ayarla" msgstr "Statik makine adı ayarla"
#: src/hostname/org.freedesktop.hostname1.policy:31 #: src/hostname/org.freedesktop.hostname1.policy:31
msgid "" msgid ""
"Authentication is required to set the statically configured local host name, " "Authentication is required to set the statically configured local hostname, "
"as well as the pretty host name." "as well as the pretty hostname."
msgstr "" msgstr ""
"Statik olarak yapılandırılmış konak makine adını ve yerel makine adını " "Statik olarak yapılandırılmış konak makine adını ve yerel makine adını "
"ayarlamak kimlik doğrulaması gerektiriyor." "ayarlamak kimlik doğrulaması gerektiriyor."

View File

@ -126,21 +126,21 @@ msgstr ""
"розпізнавання." "розпізнавання."
#: src/hostname/org.freedesktop.hostname1.policy:20 #: src/hostname/org.freedesktop.hostname1.policy:20
msgid "Set host name" msgid "Set hostname"
msgstr "Встановити назву вузла" msgstr "Встановити назву вузла"
#: src/hostname/org.freedesktop.hostname1.policy:21 #: src/hostname/org.freedesktop.hostname1.policy:21
msgid "Authentication is required to set the local host name." msgid "Authentication is required to set the local hostname."
msgstr "Потрібна автентифікація, щоб встановити назву локального вузла." msgstr "Потрібна автентифікація, щоб встановити назву локального вузла."
#: src/hostname/org.freedesktop.hostname1.policy:30 #: src/hostname/org.freedesktop.hostname1.policy:30
msgid "Set static host name" msgid "Set static hostname"
msgstr "Встановити статичну назву вузла" msgstr "Встановити статичну назву вузла"
#: src/hostname/org.freedesktop.hostname1.policy:31 #: src/hostname/org.freedesktop.hostname1.policy:31
msgid "" msgid ""
"Authentication is required to set the statically configured local host name, " "Authentication is required to set the statically configured local hostname, "
"as well as the pretty host name." "as well as the pretty hostname."
msgstr "" msgstr ""
"Потрібна автентифікація, щоб вказати статично налаштовану назву локального " "Потрібна автентифікація, щоб вказати статично налаштовану назву локального "
"вузла, так само й форматовану." "вузла, так само й форматовану."

View File

@ -64,15 +64,15 @@ msgid "Authentication is required to reload the systemd state."
msgstr "重新载入 systemd 状态需要认证。" msgstr "重新载入 systemd 状态需要认证。"
#: ../src/hostname/org.freedesktop.hostname1.policy.in.h:1 #: ../src/hostname/org.freedesktop.hostname1.policy.in.h:1
msgid "Set host name" msgid "Set hostname"
msgstr "设置主机名" msgstr "设置主机名"
#: ../src/hostname/org.freedesktop.hostname1.policy.in.h:2 #: ../src/hostname/org.freedesktop.hostname1.policy.in.h:2
msgid "Authentication is required to set the local host name." msgid "Authentication is required to set the local hostname."
msgstr "设置本地主机名需要认证。" msgstr "设置本地主机名需要认证。"
#: ../src/hostname/org.freedesktop.hostname1.policy.in.h:3 #: ../src/hostname/org.freedesktop.hostname1.policy.in.h:3
msgid "Set static host name" msgid "Set static hostname"
msgstr "设置静态主机名" msgstr "设置静态主机名"
# For pretty hostname, the zh_CN/zh_TW translation should be discussed again. # For pretty hostname, the zh_CN/zh_TW translation should be discussed again.
@ -81,8 +81,8 @@ msgstr "设置静态主机名"
#: ../src/hostname/org.freedesktop.hostname1.policy.in.h:4 #: ../src/hostname/org.freedesktop.hostname1.policy.in.h:4
#, fuzzy #, fuzzy
msgid "" msgid ""
"Authentication is required to set the statically configured local host name, " "Authentication is required to set the statically configured local hostname, "
"as well as the pretty host name." "as well as the pretty hostname."
msgstr "设置静态本地主机名或美观主机名需要认证。" msgstr "设置静态本地主机名或美观主机名需要认证。"
#: ../src/hostname/org.freedesktop.hostname1.policy.in.h:5 #: ../src/hostname/org.freedesktop.hostname1.policy.in.h:5

View File

@ -62,21 +62,21 @@ msgid "Authentication is required to reload the systemd state."
msgstr "重新載入 systemd 狀態需要驗證。" msgstr "重新載入 systemd 狀態需要驗證。"
#: src/hostname/org.freedesktop.hostname1.policy:20 #: src/hostname/org.freedesktop.hostname1.policy:20
msgid "Set host name" msgid "Set hostname"
msgstr "設定主機名稱" msgstr "設定主機名稱"
#: src/hostname/org.freedesktop.hostname1.policy:21 #: src/hostname/org.freedesktop.hostname1.policy:21
msgid "Authentication is required to set the local host name." msgid "Authentication is required to set the local hostname."
msgstr "設定主機名稱需要驗證。" msgstr "設定主機名稱需要驗證。"
#: src/hostname/org.freedesktop.hostname1.policy:30 #: src/hostname/org.freedesktop.hostname1.policy:30
msgid "Set static host name" msgid "Set static hostname"
msgstr "設定靜態主機名稱" msgstr "設定靜態主機名稱"
#: src/hostname/org.freedesktop.hostname1.policy:31 #: src/hostname/org.freedesktop.hostname1.policy:31
msgid "" msgid ""
"Authentication is required to set the statically configured local host name, " "Authentication is required to set the statically configured local hostname, "
"as well as the pretty host name." "as well as the pretty hostname."
msgstr "設定靜態預先設定或 pretty 本地主機名稱需要身份驗證。" msgstr "設定靜態預先設定或 pretty 本地主機名稱需要身份驗證。"
#: src/hostname/org.freedesktop.hostname1.policy:41 #: src/hostname/org.freedesktop.hostname1.policy:41

View File

@ -21,7 +21,7 @@ bool hostname_is_set(void) {
if (isempty(u.nodename)) if (isempty(u.nodename))
return false; return false;
/* This is the built-in kernel default host name */ /* This is the built-in kernel default hostname */
if (streq(u.nodename, "(none)")) if (streq(u.nodename, "(none)"))
return false; return false;
@ -77,7 +77,7 @@ bool valid_ldh_char(char c) {
} }
/** /**
* Check if s looks like a valid host name or FQDN. This does not do * Check if s looks like a valid hostname or FQDN. This does not do
* full DNS validation, but only checks if the name is composed of * full DNS validation, but only checks if the name is composed of
* allowed characters and the length is not above the maximum allowed * allowed characters and the length is not above the maximum allowed
* by Linux (c.f. dns_name_is_valid()). Trailing dot is allowed if * by Linux (c.f. dns_name_is_valid()). Trailing dot is allowed if

View File

@ -901,9 +901,9 @@ ssize_t receive_one_fd_iov(
* combination with send_one_fd(). * combination with send_one_fd().
*/ */
k = recvmsg(transport_fd, &mh, MSG_CMSG_CLOEXEC | flags); k = recvmsg_safe(transport_fd, &mh, MSG_CMSG_CLOEXEC | flags);
if (k < 0) if (k < 0)
return (ssize_t) -errno; return k;
CMSG_FOREACH(cmsg, &mh) { CMSG_FOREACH(cmsg, &mh) {
if (cmsg->cmsg_level == SOL_SOCKET && if (cmsg->cmsg_level == SOL_SOCKET &&
@ -915,12 +915,13 @@ ssize_t receive_one_fd_iov(
} }
} }
if (!found) if (!found) {
cmsg_close_all(&mh); cmsg_close_all(&mh);
/* If didn't receive an FD or any data, return an error. */ /* If didn't receive an FD or any data, return an error. */
if (k == 0 && !found) if (k == 0)
return -EIO; return -EIO;
}
if (found) if (found)
*ret_fd = *(int*) CMSG_DATA(found); *ret_fd = *(int*) CMSG_DATA(found);
@ -1171,3 +1172,24 @@ int socket_bind_to_ifindex(int fd, int ifindex) {
return socket_bind_to_ifname(fd, ifname); return socket_bind_to_ifname(fd, ifname);
} }
ssize_t recvmsg_safe(int sockfd, struct msghdr *msg, int flags) {
ssize_t n;
/* A wrapper around recvmsg() that checks for MSG_CTRUNC, and turns it into an error, in a reasonably
* safe way, closing any SCM_RIGHTS fds in the error path.
*
* Note that unlike our usual coding style this might modify *msg on failure. */
n = recvmsg(sockfd, msg, flags);
if (n < 0)
return -errno;
if (FLAGS_SET(msg->msg_flags, MSG_CTRUNC)) {
cmsg_close_all(msg);
return -EXFULL; /* a recognizable error code */
}
return n;
}

View File

@ -199,3 +199,5 @@ static inline int setsockopt_int(int fd, int level, int optname, int value) {
int socket_bind_to_ifname(int fd, const char *ifname); int socket_bind_to_ifname(int fd, const char *ifname);
int socket_bind_to_ifindex(int fd, int ifindex); int socket_bind_to_ifindex(int fd, int ifindex);
ssize_t recvmsg_safe(int sockfd, struct msghdr *msg, int flags);

View File

@ -10,6 +10,7 @@
#include <sys/types.h> #include <sys/types.h>
#include "alloc-util.h" #include "alloc-util.h"
#include "binfmt-util.h"
#include "conf-files.h" #include "conf-files.h"
#include "def.h" #include "def.h"
#include "fd-util.h" #include "fd-util.h"
@ -24,6 +25,7 @@
static bool arg_cat_config = false; static bool arg_cat_config = false;
static PagerFlags arg_pager_flags = 0; static PagerFlags arg_pager_flags = 0;
static bool arg_unregister = false;
static int delete_rule(const char *rule) { static int delete_rule(const char *rule) {
_cleanup_free_ char *x = NULL, *fn = NULL; _cleanup_free_ char *x = NULL, *fn = NULL;
@ -32,18 +34,17 @@ static int delete_rule(const char *rule) {
assert(rule); assert(rule);
assert(rule[0]); assert(rule[0]);
x = strdup(rule); e = strchrnul(rule + 1, rule[0]);
x = strndup(rule + 1, e - rule - 1);
if (!x) if (!x)
return log_oom(); return log_oom();
e = strchrnul(x+1, x[0]); if (!filename_is_valid(x) ||
*e = 0; STR_IN_SET(x, "register", "status"))
if (!filename_is_valid(x + 1))
return log_error_errno(SYNTHETIC_ERRNO(EINVAL), return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
"Rule file name '%s' is not valid, refusing.", x + 1); "Rule file name '%s' is not valid, refusing.", x);
fn = path_join("/proc/sys/fs/binfmt_misc", x+1); fn = path_join("/proc/sys/fs/binfmt_misc", x);
if (!fn) if (!fn)
return log_oom(); return log_oom();
@ -116,6 +117,7 @@ static int help(void) {
" --version Show package version\n" " --version Show package version\n"
" --cat-config Show configuration files\n" " --cat-config Show configuration files\n"
" --no-pager Do not pipe output into a pager\n" " --no-pager Do not pipe output into a pager\n"
" --unregister Unregister all existing entries\n"
"\nSee the %s for details.\n" "\nSee the %s for details.\n"
, program_invocation_short_name , program_invocation_short_name
, link , link
@ -129,6 +131,7 @@ static int parse_argv(int argc, char *argv[]) {
ARG_VERSION = 0x100, ARG_VERSION = 0x100,
ARG_CAT_CONFIG, ARG_CAT_CONFIG,
ARG_NO_PAGER, ARG_NO_PAGER,
ARG_UNREGISTER,
}; };
static const struct option options[] = { static const struct option options[] = {
@ -136,6 +139,7 @@ static int parse_argv(int argc, char *argv[]) {
{ "version", no_argument, NULL, ARG_VERSION }, { "version", no_argument, NULL, ARG_VERSION },
{ "cat-config", no_argument, NULL, ARG_CAT_CONFIG }, { "cat-config", no_argument, NULL, ARG_CAT_CONFIG },
{ "no-pager", no_argument, NULL, ARG_NO_PAGER }, { "no-pager", no_argument, NULL, ARG_NO_PAGER },
{ "unregister", no_argument, NULL, ARG_UNREGISTER },
{} {}
}; };
@ -162,6 +166,10 @@ static int parse_argv(int argc, char *argv[]) {
arg_pager_flags |= PAGER_DISABLE; arg_pager_flags |= PAGER_DISABLE;
break; break;
case ARG_UNREGISTER:
arg_unregister = true;
break;
case '?': case '?':
return -EINVAL; return -EINVAL;
@ -169,9 +177,9 @@ static int parse_argv(int argc, char *argv[]) {
assert_not_reached("Unhandled option"); assert_not_reached("Unhandled option");
} }
if (arg_cat_config && argc > optind) if ((arg_unregister || arg_cat_config) && argc > optind)
return log_error_errno(SYNTHETIC_ERRNO(EINVAL), return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
"Positional arguments are not allowed with --cat-config"); "Positional arguments are not allowed with --cat-config or --unregister");
return 1; return 1;
} }
@ -189,6 +197,9 @@ static int run(int argc, char *argv[]) {
r = 0; r = 0;
if (arg_unregister)
return disable_binfmt();
if (argc > optind) { if (argc > optind) {
int i; int i;

View File

@ -1647,8 +1647,6 @@ static int apply_lock_personality(const Unit* u, const ExecContext *c) {
#endif #endif
static int apply_protect_hostname(const Unit *u, const ExecContext *c, int *ret_exit_status) { static int apply_protect_hostname(const Unit *u, const ExecContext *c, int *ret_exit_status) {
int r;
assert(u); assert(u);
assert(c); assert(c);
@ -1668,6 +1666,8 @@ static int apply_protect_hostname(const Unit *u, const ExecContext *c, int *ret_
log_unit_warning(u, "ProtectHostname=yes is configured, but the kernel does not support UTS namespaces, ignoring namespace setup."); log_unit_warning(u, "ProtectHostname=yes is configured, but the kernel does not support UTS namespaces, ignoring namespace setup.");
#if HAVE_SECCOMP #if HAVE_SECCOMP
int r;
if (skip_seccomp_unavailable(u, "ProtectHostname=")) if (skip_seccomp_unavailable(u, "ProtectHostname="))
return 0; return 0;

View File

@ -2360,20 +2360,20 @@ static int manager_dispatch_notify_fd(sd_event_source *source, int fd, uint32_t
return 0; return 0;
} }
n = recvmsg(m->notify_fd, &msghdr, MSG_DONTWAIT|MSG_CMSG_CLOEXEC|MSG_TRUNC); n = recvmsg_safe(m->notify_fd, &msghdr, MSG_DONTWAIT|MSG_CMSG_CLOEXEC|MSG_TRUNC);
if (n < 0) { if (IN_SET(n, -EAGAIN, -EINTR))
if (IN_SET(errno, EAGAIN, EINTR)) return 0; /* Spurious wakeup, try again */
return 0; /* Spurious wakeup, try again */ if (n < 0)
/* If this is any other, real error, then let's stop processing this socket. This of course
/* If this is any other, real error, then let's stop processing this socket. This of course means we * means we won't take notification messages anymore, but that's still better than busy
* won't take notification messages anymore, but that's still better than busy looping around this: * looping around this: being woken up over and over again but being unable to actually read
* being woken up over and over again but being unable to actually read the message off the socket. */ * the message off the socket. */
return log_error_errno(errno, "Failed to receive notification message: %m"); return log_error_errno(n, "Failed to receive notification message: %m");
}
CMSG_FOREACH(cmsg, &msghdr) { CMSG_FOREACH(cmsg, &msghdr) {
if (cmsg->cmsg_level == SOL_SOCKET && cmsg->cmsg_type == SCM_RIGHTS) { if (cmsg->cmsg_level == SOL_SOCKET && cmsg->cmsg_type == SCM_RIGHTS) {
assert(!fd_array);
fd_array = (int*) CMSG_DATA(cmsg); fd_array = (int*) CMSG_DATA(cmsg);
n_fds = (cmsg->cmsg_len - CMSG_LEN(0)) / sizeof(int); n_fds = (cmsg->cmsg_len - CMSG_LEN(0)) / sizeof(int);
@ -2381,6 +2381,7 @@ static int manager_dispatch_notify_fd(sd_event_source *source, int fd, uint32_t
cmsg->cmsg_type == SCM_CREDENTIALS && cmsg->cmsg_type == SCM_CREDENTIALS &&
cmsg->cmsg_len == CMSG_LEN(sizeof(struct ucred))) { cmsg->cmsg_len == CMSG_LEN(sizeof(struct ucred))) {
assert(!ucred);
ucred = (struct ucred*) CMSG_DATA(cmsg); ucred = (struct ucred*) CMSG_DATA(cmsg);
} }
} }

View File

@ -186,7 +186,7 @@ int unit_name_printf(const Unit *u, const char* format, char **ret) {
* %u: the username of the running user * %u: the username of the running user
* *
* %m: the machine ID of the running system * %m: the machine ID of the running system
* %H: the host name of the running system * %H: the hostname of the running system
* %b: the boot ID of the running system * %b: the boot ID of the running system
*/ */

View File

@ -911,10 +911,10 @@ static int process_socket(int fd) {
mh.msg_iov = &iovec; mh.msg_iov = &iovec;
n = recvmsg(fd, &mh, MSG_CMSG_CLOEXEC); n = recvmsg_safe(fd, &mh, MSG_CMSG_CLOEXEC);
if (n < 0) { if (n < 0) {
free(iovec.iov_base); free(iovec.iov_base);
r = log_error_errno(errno, "Failed to receive datagram: %m"); r = log_error_errno(n, "Failed to receive datagram: %m");
goto finish; goto finish;
} }
@ -935,15 +935,17 @@ static int process_socket(int fd) {
} }
if (!found) { if (!found) {
log_error("Coredump file descriptor missing."); cmsg_close_all(&mh);
r = -EBADMSG; r = log_error_errno(SYNTHETIC_ERRNO(EBADMSG),
"Coredump file descriptor missing.");
goto finish; goto finish;
} }
assert(input_fd < 0); assert(input_fd < 0);
input_fd = *(int*) CMSG_DATA(found); input_fd = *(int*) CMSG_DATA(found);
break; break;
} } else
cmsg_close_all(&mh);
/* Add trailing NUL byte, in case these are strings */ /* Add trailing NUL byte, in case these are strings */
((char*) iovec.iov_base)[n] = 0; ((char*) iovec.iov_base)[n] = 0;
@ -952,8 +954,6 @@ static int process_socket(int fd) {
r = iovw_put(&iovw, iovec.iov_base, iovec.iov_len); r = iovw_put(&iovw, iovec.iov_base, iovec.iov_len);
if (r < 0) if (r < 0)
goto finish; goto finish;
cmsg_close_all(&mh);
} }
/* Make sure we got all data we really need */ /* Make sure we got all data we really need */

View File

@ -691,7 +691,7 @@ static int help(void) {
" --locale-messages=LOCALE Set message locale (LC_MESSAGES=)\n" " --locale-messages=LOCALE Set message locale (LC_MESSAGES=)\n"
" --keymap=KEYMAP Set keymap\n" " --keymap=KEYMAP Set keymap\n"
" --timezone=TIMEZONE Set timezone\n" " --timezone=TIMEZONE Set timezone\n"
" --hostname=NAME Set host name\n" " --hostname=NAME Set hostname\n"
" --machine-ID=ID Set machine ID\n" " --machine-ID=ID Set machine ID\n"
" --root-password=PASSWORD Set root password\n" " --root-password=PASSWORD Set root password\n"
" --root-password-file=FILE Set root password from file\n" " --root-password-file=FILE Set root password from file\n"

View File

@ -981,9 +981,9 @@ static ssize_t read_datagram(int fd, struct ucred *ret_sender, void **ret) {
.msg_controllen = sizeof(control), .msg_controllen = sizeof(control),
}; };
m = recvmsg(fd, &mh, MSG_DONTWAIT|MSG_CMSG_CLOEXEC); m = recvmsg_safe(fd, &mh, MSG_DONTWAIT|MSG_CMSG_CLOEXEC);
if (m < 0) if (m < 0)
return -errno; return m;
cmsg_close_all(&mh); cmsg_close_all(&mh);

View File

@ -148,7 +148,7 @@ int suggest_passwords(void) {
pwquality_maybe_disable_dictionary(pwq); pwquality_maybe_disable_dictionary(pwq);
suggestions = new0(char*, N_SUGGESTIONS); suggestions = new0(char*, N_SUGGESTIONS+1);
if (!suggestions) if (!suggestions)
return log_oom(); return log_oom();

View File

@ -281,7 +281,7 @@ static int context_update_kernel_hostname(Context *c) {
if (hostname_is_useful(static_hn)) if (hostname_is_useful(static_hn))
hn = static_hn; hn = static_hn;
/* ... the transient host name, (ie: DHCP) comes next ... */ /* ... the transient hostname, (ie: DHCP) comes next ... */
else if (!isempty(c->data[PROP_HOSTNAME])) else if (!isempty(c->data[PROP_HOSTNAME]))
hn = c->data[PROP_HOSTNAME]; hn = c->data[PROP_HOSTNAME];
@ -455,11 +455,11 @@ static int method_set_hostname(sd_bus_message *m, void *userdata, sd_bus_error *
r = context_update_kernel_hostname(c); r = context_update_kernel_hostname(c);
if (r < 0) { if (r < 0) {
log_error_errno(r, "Failed to set host name: %m"); log_error_errno(r, "Failed to set hostname: %m");
return sd_bus_error_set_errnof(error, r, "Failed to set hostname: %m"); return sd_bus_error_set_errnof(error, r, "Failed to set hostname: %m");
} }
log_info("Changed host name to '%s'", strna(c->data[PROP_HOSTNAME])); log_info("Changed hostname to '%s'", strna(c->data[PROP_HOSTNAME]));
(void) sd_bus_emit_properties_changed(sd_bus_message_get_bus(m), "/org/freedesktop/hostname1", "org.freedesktop.hostname1", "Hostname", NULL); (void) sd_bus_emit_properties_changed(sd_bus_message_get_bus(m), "/org/freedesktop/hostname1", "org.freedesktop.hostname1", "Hostname", NULL);
@ -507,17 +507,17 @@ static int method_set_static_hostname(sd_bus_message *m, void *userdata, sd_bus_
r = context_update_kernel_hostname(c); r = context_update_kernel_hostname(c);
if (r < 0) { if (r < 0) {
log_error_errno(r, "Failed to set host name: %m"); log_error_errno(r, "Failed to set hostname: %m");
return sd_bus_error_set_errnof(error, r, "Failed to set hostname: %m"); return sd_bus_error_set_errnof(error, r, "Failed to set hostname: %m");
} }
r = context_write_data_static_hostname(c); r = context_write_data_static_hostname(c);
if (r < 0) { if (r < 0) {
log_error_errno(r, "Failed to write static host name: %m"); log_error_errno(r, "Failed to write static hostname: %m");
return sd_bus_error_set_errnof(error, r, "Failed to set static hostname: %m"); return sd_bus_error_set_errnof(error, r, "Failed to set static hostname: %m");
} }
log_info("Changed static host name to '%s'", strna(c->data[PROP_STATIC_HOSTNAME])); log_info("Changed static hostname to '%s'", strna(c->data[PROP_STATIC_HOSTNAME]));
(void) sd_bus_emit_properties_changed(sd_bus_message_get_bus(m), "/org/freedesktop/hostname1", "org.freedesktop.hostname1", "StaticHostname", NULL); (void) sd_bus_emit_properties_changed(sd_bus_message_get_bus(m), "/org/freedesktop/hostname1", "org.freedesktop.hostname1", "StaticHostname", NULL);
@ -548,7 +548,7 @@ static int set_machine_info(Context *c, sd_bus_message *m, int prop, sd_bus_mess
if (prop == PROP_ICON_NAME && !filename_is_valid(name)) if (prop == PROP_ICON_NAME && !filename_is_valid(name))
return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid icon name '%s'", name); return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid icon name '%s'", name);
if (prop == PROP_PRETTY_HOSTNAME && string_has_cc(name, NULL)) if (prop == PROP_PRETTY_HOSTNAME && string_has_cc(name, NULL))
return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid pretty host name '%s'", name); return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid pretty hostname '%s'", name);
if (prop == PROP_CHASSIS && !valid_chassis(name)) if (prop == PROP_CHASSIS && !valid_chassis(name))
return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid chassis '%s'", name); return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid chassis '%s'", name);
if (prop == PROP_DEPLOYMENT && !valid_deployment(name)) if (prop == PROP_DEPLOYMENT && !valid_deployment(name))
@ -586,7 +586,7 @@ static int set_machine_info(Context *c, sd_bus_message *m, int prop, sd_bus_mess
} }
log_info("Changed %s to '%s'", log_info("Changed %s to '%s'",
prop == PROP_PRETTY_HOSTNAME ? "pretty host name" : prop == PROP_PRETTY_HOSTNAME ? "pretty hostname" :
prop == PROP_DEPLOYMENT ? "deployment" : prop == PROP_DEPLOYMENT ? "deployment" :
prop == PROP_LOCATION ? "location" : prop == PROP_LOCATION ? "location" :
prop == PROP_CHASSIS ? "chassis" : "icon name", strna(c->data[prop])); prop == PROP_CHASSIS ? "chassis" : "icon name", strna(c->data[prop]));

View File

@ -17,8 +17,8 @@
<vendor_url>http://www.freedesktop.org/wiki/Software/systemd</vendor_url> <vendor_url>http://www.freedesktop.org/wiki/Software/systemd</vendor_url>
<action id="org.freedesktop.hostname1.set-hostname"> <action id="org.freedesktop.hostname1.set-hostname">
<description gettext-domain="systemd">Set host name</description> <description gettext-domain="systemd">Set hostname</description>
<message gettext-domain="systemd">Authentication is required to set the local host name.</message> <message gettext-domain="systemd">Authentication is required to set the local hostname.</message>
<defaults> <defaults>
<allow_any>auth_admin_keep</allow_any> <allow_any>auth_admin_keep</allow_any>
<allow_inactive>auth_admin_keep</allow_inactive> <allow_inactive>auth_admin_keep</allow_inactive>
@ -27,8 +27,8 @@
</action> </action>
<action id="org.freedesktop.hostname1.set-static-hostname"> <action id="org.freedesktop.hostname1.set-static-hostname">
<description gettext-domain="systemd">Set static host name</description> <description gettext-domain="systemd">Set static hostname</description>
<message gettext-domain="systemd">Authentication is required to set the statically configured local host name, as well as the pretty host name.</message> <message gettext-domain="systemd">Authentication is required to set the statically configured local hostname, as well as the pretty hostname.</message>
<defaults> <defaults>
<allow_any>auth_admin_keep</allow_any> <allow_any>auth_admin_keep</allow_any>
<allow_inactive>auth_admin_keep</allow_inactive> <allow_inactive>auth_admin_keep</allow_inactive>

View File

@ -566,13 +566,11 @@ static int manager_on_notify(sd_event_source *s, int fd, uint32_t revents, void
ssize_t n; ssize_t n;
int r; int r;
n = recvmsg(fd, &msghdr, MSG_DONTWAIT|MSG_CMSG_CLOEXEC); n = recvmsg_safe(fd, &msghdr, MSG_DONTWAIT|MSG_CMSG_CLOEXEC);
if (n < 0) { if (IN_SET(n, -EAGAIN, -EINTR))
if (IN_SET(errno, EAGAIN, EINTR)) return 0;
return 0; if (n < 0)
return (int) n;
return -errno;
}
cmsg_close_all(&msghdr); cmsg_close_all(&msghdr);

View File

@ -1317,29 +1317,35 @@ int server_process_datagram(
iovec = IOVEC_MAKE(s->buffer, s->buffer_size - 1); /* Leave room for trailing NUL we add later */ iovec = IOVEC_MAKE(s->buffer, s->buffer_size - 1); /* Leave room for trailing NUL we add later */
n = recvmsg(fd, &msghdr, MSG_DONTWAIT|MSG_CMSG_CLOEXEC); n = recvmsg_safe(fd, &msghdr, MSG_DONTWAIT|MSG_CMSG_CLOEXEC);
if (n < 0) { if (IN_SET(n, -EINTR, -EAGAIN))
if (IN_SET(errno, EINTR, EAGAIN)) return 0;
return 0; if (n == -EXFULL) {
log_warning("Got message with truncated control data (too many fds sent?), ignoring.");
return log_error_errno(errno, "recvmsg() failed: %m"); return 0;
} }
if (n < 0)
return log_error_errno(n, "recvmsg() failed: %m");
CMSG_FOREACH(cmsg, &msghdr) CMSG_FOREACH(cmsg, &msghdr)
if (cmsg->cmsg_level == SOL_SOCKET && if (cmsg->cmsg_level == SOL_SOCKET &&
cmsg->cmsg_type == SCM_CREDENTIALS && cmsg->cmsg_type == SCM_CREDENTIALS &&
cmsg->cmsg_len == CMSG_LEN(sizeof(struct ucred))) cmsg->cmsg_len == CMSG_LEN(sizeof(struct ucred))) {
assert(!ucred);
ucred = (struct ucred*) CMSG_DATA(cmsg); ucred = (struct ucred*) CMSG_DATA(cmsg);
else if (cmsg->cmsg_level == SOL_SOCKET && } else if (cmsg->cmsg_level == SOL_SOCKET &&
cmsg->cmsg_type == SCM_SECURITY) { cmsg->cmsg_type == SCM_SECURITY) {
assert(!label);
label = (char*) CMSG_DATA(cmsg); label = (char*) CMSG_DATA(cmsg);
label_len = cmsg->cmsg_len - CMSG_LEN(0); label_len = cmsg->cmsg_len - CMSG_LEN(0);
} else if (cmsg->cmsg_level == SOL_SOCKET && } else if (cmsg->cmsg_level == SOL_SOCKET &&
cmsg->cmsg_type == SO_TIMESTAMP && cmsg->cmsg_type == SO_TIMESTAMP &&
cmsg->cmsg_len == CMSG_LEN(sizeof(struct timeval))) cmsg->cmsg_len == CMSG_LEN(sizeof(struct timeval))) {
assert(!tv);
tv = (struct timeval*) CMSG_DATA(cmsg); tv = (struct timeval*) CMSG_DATA(cmsg);
else if (cmsg->cmsg_level == SOL_SOCKET && } else if (cmsg->cmsg_level == SOL_SOCKET &&
cmsg->cmsg_type == SCM_RIGHTS) { cmsg->cmsg_type == SCM_RIGHTS) {
assert(!fds);
fds = (int*) CMSG_DATA(cmsg); fds = (int*) CMSG_DATA(cmsg);
n_fds = (cmsg->cmsg_len - CMSG_LEN(0)) / sizeof(int); n_fds = (cmsg->cmsg_len - CMSG_LEN(0)) / sizeof(int);
} }
@ -1746,7 +1752,7 @@ static int server_open_hostname(Server *s) {
r = sd_event_source_set_priority(s->hostname_event_source, SD_EVENT_PRIORITY_IMPORTANT-10); r = sd_event_source_set_priority(s->hostname_event_source, SD_EVENT_PRIORITY_IMPORTANT-10);
if (r < 0) if (r < 0)
return log_error_errno(r, "Failed to adjust priority of host name event source: %m"); return log_error_errno(r, "Failed to adjust priority of hostname event source: %m");
return 0; return 0;
} }

View File

@ -545,6 +545,7 @@ static int stdout_stream_process(sd_event_source *es, int fd, uint32_t revents,
if (cmsg->cmsg_level == SOL_SOCKET && if (cmsg->cmsg_level == SOL_SOCKET &&
cmsg->cmsg_type == SCM_CREDENTIALS && cmsg->cmsg_type == SCM_CREDENTIALS &&
cmsg->cmsg_len == CMSG_LEN(sizeof(struct ucred))) { cmsg->cmsg_len == CMSG_LEN(sizeof(struct ucred))) {
assert(!ucred);
ucred = (struct ucred *)CMSG_DATA(cmsg); ucred = (struct ucred *)CMSG_DATA(cmsg);
break; break;
} }

View File

@ -700,7 +700,7 @@ int dhcp_lease_parse_options(uint8_t code, uint8_t len, const void *option, void
case SD_DHCP_OPTION_HOST_NAME: case SD_DHCP_OPTION_HOST_NAME:
r = lease_parse_domain(option, len, &lease->hostname); r = lease_parse_domain(option, len, &lease->hostname);
if (r < 0) { if (r < 0) {
log_debug_errno(r, "Failed to parse host name, ignoring: %m"); log_debug_errno(r, "Failed to parse hostname, ignoring: %m");
return 0; return 0;
} }

View File

@ -557,17 +557,24 @@ static int bus_socket_read_auth(sd_bus *b) {
mh.msg_control = &control; mh.msg_control = &control;
mh.msg_controllen = sizeof(control); mh.msg_controllen = sizeof(control);
k = recvmsg(b->input_fd, &mh, MSG_DONTWAIT|MSG_CMSG_CLOEXEC); k = recvmsg_safe(b->input_fd, &mh, MSG_DONTWAIT|MSG_CMSG_CLOEXEC);
if (k < 0 && errno == ENOTSOCK) { if (k == -ENOTSOCK) {
b->prefer_readv = true; b->prefer_readv = true;
k = readv(b->input_fd, &iov, 1); k = readv(b->input_fd, &iov, 1);
if (k < 0)
k = -errno;
} else } else
handle_cmsg = true; handle_cmsg = true;
} }
if (k == -EAGAIN)
return 0;
if (k < 0) if (k < 0)
return errno == EAGAIN ? 0 : -errno; return (int) k;
if (k == 0) if (k == 0) {
if (handle_cmsg)
cmsg_close_all(&mh); /* paranoia, we shouldn't have gotten any fds on EOF */
return -ECONNRESET; return -ECONNRESET;
}
b->rbuffer_size += k; b->rbuffer_size += k;
@ -1193,17 +1200,24 @@ int bus_socket_read_message(sd_bus *bus) {
mh.msg_control = &control; mh.msg_control = &control;
mh.msg_controllen = sizeof(control); mh.msg_controllen = sizeof(control);
k = recvmsg(bus->input_fd, &mh, MSG_DONTWAIT|MSG_CMSG_CLOEXEC); k = recvmsg_safe(bus->input_fd, &mh, MSG_DONTWAIT|MSG_CMSG_CLOEXEC);
if (k < 0 && errno == ENOTSOCK) { if (k == -ENOTSOCK) {
bus->prefer_readv = true; bus->prefer_readv = true;
k = readv(bus->input_fd, &iov, 1); k = readv(bus->input_fd, &iov, 1);
if (k < 0)
k = -errno;
} else } else
handle_cmsg = true; handle_cmsg = true;
} }
if (k == -EAGAIN)
return 0;
if (k < 0) if (k < 0)
return errno == EAGAIN ? 0 : -errno; return (int) k;
if (k == 0) if (k == 0) {
if (handle_cmsg)
cmsg_close_all(&mh); /* On EOF we shouldn't have gotten an fd, but let's make sure */
return -ECONNRESET; return -ECONNRESET;
}
bus->rbuffer_size += k; bus->rbuffer_size += k;

View File

@ -12,6 +12,7 @@
#include "networkd-network.h" #include "networkd-network.h"
#include "string-table.h" #include "string-table.h"
#include "string-util.h" #include "string-util.h"
#include "strv.h"
#include "tmpfile-util.h" #include "tmpfile-util.h"
DEFINE_CONFIG_PARSE_ENUM(config_parse_lldp_mode, lldp_mode, LLDPMode, "Failed to parse LLDP= setting."); DEFINE_CONFIG_PARSE_ENUM(config_parse_lldp_mode, lldp_mode, LLDPMode, "Failed to parse LLDP= setting.");
@ -36,10 +37,10 @@ bool link_lldp_rx_enabled(Link *link) {
if (!link->network) if (!link->network)
return false; return false;
/* LLDP should be handled on bridge slaves as those have a direct /* LLDP should be handled on bridge and bond slaves as those have a direct connection to their peers,
* connection to their peers not on the bridge master. Linux doesn't * not on the bridge/bond master. Linux doesn't even (by default) forward lldp packets to the bridge
* even (by default) forward lldp packets to the bridge master.*/ * master.*/
if (streq_ptr("bridge", link->kind)) if (link->kind && STR_IN_SET(link->kind, "bridge", "bond"))
return false; return false;
return link->network->lldp_mode != LLDP_MODE_NO; return link->network->lldp_mode != LLDP_MODE_NO;

View File

@ -6,8 +6,8 @@
#include <net/if_arp.h> #include <net/if_arp.h>
#include "alloc-util.h" #include "alloc-util.h"
#include "escape.h"
#include "env-file.h" #include "env-file.h"
#include "escape.h"
#include "fd-util.h" #include "fd-util.h"
#include "hostname-util.h" #include "hostname-util.h"
#include "missing_network.h" #include "missing_network.h"
@ -18,6 +18,7 @@
#include "random-util.h" #include "random-util.h"
#include "socket-util.h" #include "socket-util.h"
#include "string-util.h" #include "string-util.h"
#include "strv.h"
#include "unaligned.h" #include "unaligned.h"
#include "web-util.h" #include "web-util.h"
@ -54,6 +55,9 @@ bool link_lldp_emit_enabled(Link *link) {
if (!link->network) if (!link->network)
return false; return false;
if (link->kind && STR_IN_SET(link->kind, "bridge", "bond"))
return false;
return link->network->lldp_emit != LLDP_EMIT_NO; return link->network->lldp_emit != LLDP_EMIT_NO;
} }

View File

@ -3713,13 +3713,12 @@ static int nspawn_dispatch_notify_fd(sd_event_source *source, int fd, uint32_t r
return 0; return 0;
} }
n = recvmsg(fd, &msghdr, MSG_DONTWAIT|MSG_CMSG_CLOEXEC); n = recvmsg_safe(fd, &msghdr, MSG_DONTWAIT|MSG_CMSG_CLOEXEC);
if (n < 0) { if (IN_SET(n, -EAGAIN, -EINTR))
if (IN_SET(errno, EAGAIN, EINTR)) return 0;
return 0; if (n < 0)
return log_warning_errno(n, "Couldn't read notification socket: %m");
return log_warning_errno(errno, "Couldn't read notification socket: %m");
}
cmsg_close_all(&msghdr); cmsg_close_all(&msghdr);
CMSG_FOREACH(cmsg, &msghdr) { CMSG_FOREACH(cmsg, &msghdr) {

View File

@ -77,7 +77,7 @@ enum nss_status _nss_myhostname_gethostbyname4_r(
return NSS_STATUS_TRYAGAIN; return NSS_STATUS_TRYAGAIN;
} }
/* We respond to our local host name, our hostname suffixed with a single dot. */ /* We respond to our local hostname, our hostname suffixed with a single dot. */
if (!streq(name, hn) && !streq_ptr(startswith(name, hn), ".")) if (!streq(name, hn) && !streq_ptr(startswith(name, hn), "."))
goto not_found; goto not_found;

View File

@ -310,7 +310,12 @@ enum nss_status _nss_systemd_setpwent(int stayopen) {
getpwent_data.iterator = userdb_iterator_free(getpwent_data.iterator); getpwent_data.iterator = userdb_iterator_free(getpwent_data.iterator);
getpwent_data.by_membership = false; getpwent_data.by_membership = false;
r = userdb_all(nss_glue_userdb_flags(), &getpwent_data.iterator); /* Don't synthesize root/nobody when iterating. Let nss-files take care of that. If the two records
* are missing there, then that's fine, after all getpwent() is known to be possibly incomplete
* (think: LDAP/NIS type situations), and our synthesizing of root/nobody is a robustness fallback
* only, which matters for getpwnam()/getpwuid() primarily, which are the main NSS entrypoints to the
* user database. */
r = userdb_all(nss_glue_userdb_flags() | USERDB_DONT_SYNTHESIZE, &getpwent_data.iterator);
return r < 0 ? NSS_STATUS_UNAVAIL : NSS_STATUS_SUCCESS; return r < 0 ? NSS_STATUS_UNAVAIL : NSS_STATUS_SUCCESS;
} }
@ -329,7 +334,8 @@ enum nss_status _nss_systemd_setgrent(int stayopen) {
getgrent_data.iterator = userdb_iterator_free(getgrent_data.iterator); getgrent_data.iterator = userdb_iterator_free(getgrent_data.iterator);
getpwent_data.by_membership = false; getpwent_data.by_membership = false;
r = groupdb_all(nss_glue_userdb_flags(), &getgrent_data.iterator); /* See _nss_systemd_setpwent() for an explanation why we use USERDB_DONT_SYNTHESIZE here */
r = groupdb_all(nss_glue_userdb_flags() | USERDB_DONT_SYNTHESIZE, &getgrent_data.iterator);
return r < 0 ? NSS_STATUS_UNAVAIL : NSS_STATUS_SUCCESS; return r < 0 ? NSS_STATUS_UNAVAIL : NSS_STATUS_SUCCESS;
} }

View File

@ -190,9 +190,9 @@ static int recv_item(
assert(ret_name); assert(ret_name);
assert(ret_fd); assert(ret_fd);
n = recvmsg(socket_fd, &mh, MSG_CMSG_CLOEXEC); n = recvmsg_safe(socket_fd, &mh, MSG_CMSG_CLOEXEC);
if (n < 0) if (n < 0)
return -errno; return (int) n;
CMSG_FOREACH(cmsg, &mh) { CMSG_FOREACH(cmsg, &mh) {
if (cmsg->cmsg_level == SOL_SOCKET && if (cmsg->cmsg_level == SOL_SOCKET &&

View File

@ -1116,7 +1116,7 @@ static void bus_method_resolve_service_complete(DnsQuery *q) {
if (has_root_domain && found <= 0) { if (has_root_domain && found <= 0) {
/* If there's exactly one SRV RR and it uses /* If there's exactly one SRV RR and it uses
* the root domain as host name, then the * the root domain as hostname, then the
* service is explicitly not offered on the * service is explicitly not offered on the
* domain. Report this as a recognizable * domain. Report this as a recognizable
* error. See RFC 2782, Section "Usage * error. See RFC 2782, Section "Usage

View File

@ -100,7 +100,7 @@ static int parse_line(EtcHosts *hosts, unsigned nr, const char *line) {
r = extract_first_word(&line, &name, NULL, EXTRACT_RELAX); r = extract_first_word(&line, &name, NULL, EXTRACT_RELAX);
if (r < 0) if (r < 0)
return log_error_errno(r, "/etc/hosts:%u: couldn't extract host name: %m", nr); return log_error_errno(r, "/etc/hosts:%u: couldn't extract hostname: %m", nr);
if (r == 0) if (r == 0)
break; break;
@ -162,7 +162,7 @@ static int parse_line(EtcHosts *hosts, unsigned nr, const char *line) {
} }
if (!found) if (!found)
log_warning("/etc/hosts:%u: line is missing any host names", nr); log_warning("/etc/hosts:%u: line is missing any hostnames", nr);
return 0; return 0;
} }

View File

@ -341,7 +341,7 @@ static int determine_hostname(char **full_hostname, char **llmnr_hostname, char
p = h; p = h;
r = dns_label_unescape(&p, label, sizeof label, 0); r = dns_label_unescape(&p, label, sizeof label, 0);
if (r < 0) if (r < 0)
return log_error_errno(r, "Failed to unescape host name: %m"); return log_error_errno(r, "Failed to unescape hostname: %m");
if (r == 0) if (r == 0)
return log_error_errno(SYNTHETIC_ERRNO(EINVAL), return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
"Couldn't find a single label in hostname."); "Couldn't find a single label in hostname.");
@ -371,7 +371,7 @@ static int determine_hostname(char **full_hostname, char **llmnr_hostname, char
r = dns_label_escape_new(decoded, r, &n); r = dns_label_escape_new(decoded, r, &n);
if (r < 0) if (r < 0)
return log_error_errno(r, "Failed to escape host name: %m"); return log_error_errno(r, "Failed to escape hostname: %m");
if (is_localhost(n)) if (is_localhost(n))
return log_debug_errno(SYNTHETIC_ERRNO(EINVAL), return log_debug_errno(SYNTHETIC_ERRNO(EINVAL),
@ -411,7 +411,7 @@ static int make_fallback_hostnames(char **full_hostname, char **llmnr_hostname,
p = fallback_hostname(); p = fallback_hostname();
r = dns_label_unescape(&p, label, sizeof label, 0); r = dns_label_unescape(&p, label, sizeof label, 0);
if (r < 0) if (r < 0)
return log_error_errno(r, "Failed to unescape fallback host name: %m"); return log_error_errno(r, "Failed to unescape fallback hostname: %m");
assert(r > 0); /* The fallback hostname must have at least one label */ assert(r > 0); /* The fallback hostname must have at least one label */
@ -775,17 +775,14 @@ int manager_recv(Manager *m, int fd, DnsProtocol protocol, DnsPacket **ret) {
iov = IOVEC_MAKE(DNS_PACKET_DATA(p), p->allocated); iov = IOVEC_MAKE(DNS_PACKET_DATA(p), p->allocated);
l = recvmsg(fd, &mh, 0); l = recvmsg_safe(fd, &mh, 0);
if (l < 0) { if (IN_SET(l, -EAGAIN, -EINTR))
if (IN_SET(errno, EAGAIN, EINTR)) return 0;
return 0; if (l < 0)
return l;
return -errno;
}
if (l == 0) if (l == 0)
return 0; return 0;
assert(!(mh.msg_flags & MSG_CTRUNC));
assert(!(mh.msg_flags & MSG_TRUNC)); assert(!(mh.msg_flags & MSG_TRUNC));
p->size = (size_t) l; p->size = (size_t) l;

View File

@ -925,12 +925,11 @@ int ask_password_agent(
msghdr.msg_control = &control; msghdr.msg_control = &control;
msghdr.msg_controllen = sizeof(control); msghdr.msg_controllen = sizeof(control);
n = recvmsg(socket_fd, &msghdr, 0); n = recvmsg_safe(socket_fd, &msghdr, 0);
if (IN_SET(n, -EAGAIN, -EINTR))
continue;
if (n < 0) { if (n < 0) {
if (IN_SET(errno, EAGAIN, EINTR)) r = (int) n;
continue;
r = -errno;
goto finish; goto finish;
} }

33
src/shared/binfmt-util.c Normal file
View File

@ -0,0 +1,33 @@
#include <sys/stat.h>
#include <sys/statvfs.h>
#include <sys/vfs.h>
#include "binfmt-util.h"
#include "fileio.h"
#include "missing_magic.h"
#include "stat-util.h"
int disable_binfmt(void) {
int r;
/* Flush out all rules. This is important during shutdown to cover for rules using "F", since those
* might pin a file and thus block us from unmounting stuff cleanly.
*
* We are a bit careful here, since binfmt_misc might still be an autofs which we don't want to
* trigger. */
r = path_is_fs_type("/proc/sys/fs/binfmt_misc", BINFMTFS_MAGIC);
if (r == 0 || r == -ENOENT) {
log_debug("binfmt_misc is not mounted, not detaching entries.");
return 0;
}
if (r < 0)
return log_warning_errno(r, "Failed to determine whether binfmt_misc is mounted: %m");
r = write_string_file("/proc/sys/fs/binfmt_misc/status", "-1", WRITE_STRING_FILE_DISABLE_BUFFER);
if (r < 0)
return log_warning_errno(r, "Failed to unregister binfmt_misc entries: %m");
log_debug("Unregistered all remaining binfmt_misc entries.");
return 0;
}

4
src/shared/binfmt-util.h Normal file
View File

@ -0,0 +1,4 @@
/* SPDX-License-Identifier: LGPL-2.1+ */
#pragma once
int disable_binfmt(void);

View File

@ -80,6 +80,15 @@ static WaitForItem *wait_for_item_free(WaitForItem *item) {
DEFINE_TRIVIAL_CLEANUP_FUNC(WaitForItem*, wait_for_item_free); DEFINE_TRIVIAL_CLEANUP_FUNC(WaitForItem*, wait_for_item_free);
static void call_unit_callback_and_wait(BusWaitForUnits *d, WaitForItem *item, bool good) {
d->current = item;
if (item->unit_callback)
item->unit_callback(d, item->bus_path, good, item->userdata);
wait_for_item_free(item);
}
static void bus_wait_for_units_clear(BusWaitForUnits *d) { static void bus_wait_for_units_clear(BusWaitForUnits *d) {
WaitForItem *item; WaitForItem *item;
@ -88,13 +97,8 @@ static void bus_wait_for_units_clear(BusWaitForUnits *d) {
d->slot_disconnected = sd_bus_slot_unref(d->slot_disconnected); d->slot_disconnected = sd_bus_slot_unref(d->slot_disconnected);
d->bus = sd_bus_unref(d->bus); d->bus = sd_bus_unref(d->bus);
while ((item = hashmap_first(d->items))) { while ((item = hashmap_first(d->items)))
d->current = item; call_unit_callback_and_wait(d, item, false);
if (item->unit_callback)
item->unit_callback(d, item->bus_path, false, item->userdata);
wait_for_item_free(item);
}
d->items = hashmap_free(d->items); d->items = hashmap_free(d->items);
} }
@ -213,13 +217,7 @@ static void wait_for_item_check_ready(WaitForItem *item) {
return; return;
} }
if (item->unit_callback) { call_unit_callback_and_wait(d, item, true);
d->current = item;
item->unit_callback(d, item->bus_path, true, item->userdata);
}
wait_for_item_free(item);
bus_wait_for_units_check_ready(d); bus_wait_for_units_check_ready(d);
} }
@ -304,10 +302,7 @@ static int on_get_all_properties(sd_bus_message *m, void *userdata, sd_bus_error
log_debug_errno(sd_bus_error_get_errno(error), "GetAll() failed for %s: %s", log_debug_errno(sd_bus_error_get_errno(error), "GetAll() failed for %s: %s",
item->bus_path, error->message); item->bus_path, error->message);
d->current = item; call_unit_callback_and_wait(d, item, false);
item->unit_callback(d, item->bus_path, false, item->userdata);
wait_for_item_free(item);
bus_wait_for_units_check_ready(d); bus_wait_for_units_check_ready(d);
return 0; return 0;
} }

View File

@ -115,7 +115,7 @@ int install_full_printf(const UnitFileInstallInfo *i, const char *format, char *
* %U the UID of the running user * %U the UID of the running user
* %u the username of running user * %u the username of running user
* %m the machine ID of the running system * %m the machine ID of the running system
* %H the host name of the running system * %H the hostname of the running system
* %b the boot ID of the running system * %b the boot ID of the running system
* %v `uname -r` of the running system * %v `uname -r` of the running system
*/ */

View File

@ -12,6 +12,8 @@ shared_sources = files('''
barrier.h barrier.h
base-filesystem.c base-filesystem.c
base-filesystem.h base-filesystem.h
binfmt-util.c
binfmt-util.h
bitmap.c bitmap.c
bitmap.h bitmap.h
blkid-util.h blkid-util.h

View File

@ -16,6 +16,7 @@
#include "alloc-util.h" #include "alloc-util.h"
#include "async.h" #include "async.h"
#include "binfmt-util.h"
#include "cgroup-setup.h" #include "cgroup-setup.h"
#include "cgroup-util.h" #include "cgroup-util.h"
#include "def.h" #include "def.h"
@ -386,6 +387,7 @@ int main(int argc, char *argv[]) {
sync_with_progress(); sync_with_progress();
disable_coredumps(); disable_coredumps();
disable_binfmt();
log_info("Sending SIGTERM to remaining processes..."); log_info("Sending SIGTERM to remaining processes...");
broadcast_signal(SIGTERM, true, true, arg_timeout); broadcast_signal(SIGTERM, true, true, arg_timeout);

View File

@ -438,12 +438,11 @@ static int manager_receive_response(sd_event_source *source, int fd, uint32_t re
return manager_connect(m); return manager_connect(m);
} }
len = recvmsg(fd, &msghdr, MSG_DONTWAIT); len = recvmsg_safe(fd, &msghdr, MSG_DONTWAIT);
if (len == -EAGAIN)
return 0;
if (len < 0) { if (len < 0) {
if (errno == EAGAIN) log_warning_errno(len, "Error receiving message, disconnecting: %m");
return 0;
log_warning("Error receiving message. Disconnecting.");
return manager_connect(m); return manager_connect(m);
} }

View File

@ -212,13 +212,11 @@ static int udev_ctrl_connection_event_handler(sd_event_source *s, int fd, uint32
if (size == 0) if (size == 0)
return 0; /* Client disconnects? */ return 0; /* Client disconnects? */
size = recvmsg(fd, &smsg, 0); size = recvmsg_safe(fd, &smsg, 0);
if (size < 0) { if (size == -EINTR)
if (errno != EINTR)
return log_error_errno(errno, "Failed to receive ctrl message: %m");
return 0; return 0;
} if (size < 0)
return log_error_errno(size, "Failed to receive ctrl message: %m");
cmsg_close_all(&smsg); cmsg_close_all(&smsg);

View File

@ -1092,7 +1092,9 @@ static int rule_add_line(UdevRules *rules, const char *line_str, unsigned line_n
if (isempty(line_str)) if (isempty(line_str))
return 0; return 0;
line = strdup(line_str); /* We use memdup_suffix0() here, since we want to add a second NUL byte to the end, since possibly
* some parsers might turn this into a "nulstr", which requires an extra NUL at the end. */
line = memdup_suffix0(line_str, strlen(line_str) + 1);
if (!line) if (!line)
return log_oom(); return log_oom();
@ -1328,11 +1330,7 @@ static bool token_match_string(UdevRuleToken *token, const char *str) {
match = isempty(str); match = isempty(str);
break; break;
case MATCH_TYPE_SUBSYSTEM: case MATCH_TYPE_SUBSYSTEM:
NULSTR_FOREACH(i, "subsystem\0class\0bus\0") match = STR_IN_SET(str, "subsystem", "class", "bus");
if (streq(i, str)) {
match = true;
break;
}
break; break;
case MATCH_TYPE_PLAIN_WITH_EMPTY: case MATCH_TYPE_PLAIN_WITH_EMPTY:
if (isempty(str)) { if (isempty(str)) {

Some files were not shown because too many files have changed in this diff Show More