Compare commits

..

No commits in common. "346543d6f939ab0c9941b71c0a5e3ead07b447d1" and "47b04ef6327bac408ed724f4e94967ed36b72877" have entirely different histories.

33 changed files with 413 additions and 815 deletions

85
NEWS
View File

@ -1,90 +1,5 @@
systemd System and Service Manager
CHANGES WITH 247 in spe:
* KERNEL API INCOMPATIBILTY: Linux 4.12 introduced two new uevents
"bind" and "unbind" to the Linux device model. When this kernel
change was made, systemd-udevd was only minimally updated to handle
and propagate these new event types. The introduction of these new
uevents (which are typically generated for USB devices and devices
needing a firmware upload before being functional) resulted in a
number of software issues, we so far didn't address (mostly because
there was hope the kernel maintainers would themeselves address these
issues in some form which did not happen). To handle them properly,
many (if not most) udev rules files shipped in various packages need
updating, and so do many programs that monitor or enumerate devices
with libudev or sd-device, or otherwise process uevents. Please note
that this incompatibility is not fault of systemd or udev, but caused
by an incompatible kernel change that happened back in Linux 4.12.
To minimize issues resulting from this kernel change (but not avoid
them entirely) starting with systemd-udevd 247 the udev "tags"
concept (which is a concept for marking and filtering devices during
enumeration and monitoring) has been reworked: udev tags are now
"sticky", meaning that once a tag is assigned to a device it will not
be removed from the device again until the device itself is removed
(i.e. unplugged). This makes sure that any application monitoring
devices that match a specific tag is guaranteed to both see uevents
where the device starts being relevant, and those where it stops
being relevant (the latter now regularly happening due to the new
"unbind" uevent type). The udev tags concept is hence now a concept
tied to a *device* instead of a device *event* — unlike for example
udev properties whose lifecycle (as before) is generally tied to a
device event, meaning that the previously determined properties are
forgotten whenever a new uevent is processed.
With the newly redefined udev tags concept, sometimes it's necessary
to determine which tags are the ones applied by the most recent
uevent/database update, in order to discern them from those
originating from earlier uevents/database updates of the same
device. To accommodate for this a new automatic property CURRENT_TAGS
has been added that works similar to the existing TAGS property but
only lists tags set by the most recent uevent/database
update. Similar, the libudev/sd-device API has been updated with new
functions to enumerate these 'current' tags, in addition to the
existing APIs that now enumerate the 'sticky' ones.
To properly handle "bind"/"unbind" on Linux 4.12 and newer it is
essential that all udev rules files and applications are updated to
handle the new events. Specifically:
• All rule files that currently use a header guard similar to
ACTION!="add|change",GOTO="xyz_end" should be updated to use
ACTION=="remove",GOTO="xyz_end" instead, so that the
properties/tags they add are also applied whenever "bind" (or
"unbind") is seen. (This is most important for all physical device
types — as that's for which "bind" and "unbind" are currently
usually generated, for all other device types this change is still
recommended but not as important — but certainly prepares for
future kernel uevent type additions).
• Similar, all code monitoring devices that contains an 'if' branch
discerning the "add" + "change" uevent actions from all other
uevents actions (i.e. considering devices only relevant after "add"
or "change", and irrelevant on all other events) should be reworked
to instead negatively check for "remove" only (i.e. considering
devices relevant after all event types, except for "remove", which
invalidates the device). Note that this also means that devices
should be considered relevant on "unbind", even though conceptually
this — in some form — invalidates the device. Since the precise
effect of "unbind" is not generically defined, devices should be
considered relevant even after "unbind", however I/O errors
accessing the device should then be handled gracefully.
• Any code that uses device tags for deciding whether a device is
relevant or not most likely needs to be updated to use the new
udev_device_has_current_tag() API (or sd_device_has_current_tag()
in case sd-device is used), to check whether the tag is set
at the moment an uevent is seen (as opposed to the existing
udev_device_has_tag() API which checks if the tag ever existed on
the device, following the API concept redefinition explained
above).
We are very sorry for this breakage and the requirement to update
packages using these interfaces. We'd again like to underline that
this is not caused by systemd/udev changes, but result of a kernel
behaviour change.
CHANGES WITH 246:
* The service manager gained basic support for cgroup v2 freezer. Units

View File

@ -21,11 +21,9 @@
<refnamediv>
<refname>udev_device_has_tag</refname>
<refname>udev_device_has_current_tag</refname>
<refname>udev_device_get_devlinks_list_entry</refname>
<refname>udev_device_get_properties_list_entry</refname>
<refname>udev_device_get_tags_list_entry</refname>
<refname>udev_device_get_current_tags_list_entry</refname>
<refname>udev_device_get_sysattr_list_entry</refname>
<refname>udev_device_get_property_value</refname>
<refname>udev_device_get_sysattr_value</refname>
@ -38,18 +36,6 @@
<funcsynopsis>
<funcsynopsisinfo>#include &lt;libudev.h&gt;</funcsynopsisinfo>
<funcprototype>
<funcdef>int <function>udev_device_has_tag</function></funcdef>
<paramdef>struct udev_device *<parameter>udev_device</parameter></paramdef>
<paramdef>const char *<parameter>tag</parameter></paramdef>
</funcprototype>
<funcprototype>
<funcdef>int <function>udev_device_has_current_tag</function></funcdef>
<paramdef>struct udev_device *<parameter>udev_device</parameter></paramdef>
<paramdef>const char *<parameter>tag</parameter></paramdef>
</funcprototype>
<funcprototype>
<funcdef>struct udev_list_entry *<function>udev_device_get_devlinks_list_entry</function></funcdef>
<paramdef>struct udev_device *<parameter>udev_device</parameter></paramdef>
@ -65,11 +51,6 @@
<paramdef>struct udev_device *<parameter>udev_device</parameter></paramdef>
</funcprototype>
<funcprototype>
<funcdef>struct udev_list_entry *<function>udev_device_get_current_tags_list_entry</function></funcdef>
<paramdef>struct udev_device *<parameter>udev_device</parameter></paramdef>
</funcprototype>
<funcprototype>
<funcdef>struct udev_list_entry *<function>udev_device_get_sysattr_list_entry</function></funcdef>
<paramdef>struct udev_device *<parameter>udev_device</parameter></paramdef>
@ -81,6 +62,12 @@
<paramdef>const char *<parameter>key</parameter></paramdef>
</funcprototype>
<funcprototype>
<funcdef>int <function>udev_device_has_tag</function></funcdef>
<paramdef>struct udev_device *<parameter>udev_device</parameter></paramdef>
<paramdef>const char *<parameter>tag</parameter></paramdef>
</funcprototype>
<funcprototype>
<funcdef>const char *<function>udev_device_get_sysattr_value</function></funcdef>
<paramdef>struct udev_device *<parameter>udev_device</parameter></paramdef>
@ -97,40 +84,22 @@
</funcsynopsis>
</refsynopsisdiv>
<refsect1>
<!--<refsect1>
<title>Description</title>
<para><function>udev_device_has_tag()</function> returns a valuer larger than zero if the specified
device object has the indicated tag assigned to it, and zero otherwise. See
<citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry> for details on
the tags concept. <function>udev_device_has_current_tag()</function> executes a similar check, however
only determines whether the indicated tag was set as result of the most recent event seen for the
device. Tags are "sticky", i.e. once set for a device they remain on the device until the device is
unplugged, even if the rules run for later events of the same device do not set them anymore. Any tag for
which <function>udev_device_has_current_tag()</function> returns true will hence also return true when
passed to <function>udev_device_has_tag()</function>, but the opposite might not be true, in case a tag is
no longer configured by the rules applied to the most recent device even.</para>
<para><function>udev_device_get_tags_list_entry()</function> returns a a
<function>udev_list_entry</function> object, encapsulating a list of tags set for the specified
device. Similar, <function>udev_device_get_current_tags_list_entry()</function> returns a list of tags
set for the specified device as effect of the most recent device event seen (see above for details on the
difference).</para>
</refsect1>
<para>XXX: Add short description.</para>
</refsect1>-->
<refsect1>
<title>Return Value</title>
<para>On success, <function>udev_device_has_tag()</function> and
<function>udev_device_has_current_tag()</function> return positive or <constant>0</constant>, depending
on whether the device has the given tag or not. On failure, a negative error code is returned.</para>
<para>On success, <function>udev_device_get_devlinks_list_entry()</function>,
<para>On success,
<function>udev_device_get_devlinks_list_entry()</function>,
<function>udev_device_get_properties_list_entry()</function>,
<function>udev_device_get_tags_list_entry()</function>,
<function>udev_device_get_current_tags_list_entry()</function> and
<function>udev_device_get_sysattr_list_entry()</function> return a pointer to the first entry of the
retrieved list. If that list is empty, or if an error occurred, <constant>NULL</constant> is
<function>udev_device_get_tags_list_entry()</function> and
<function>udev_device_get_sysattr_list_entry()</function> return
a pointer to the first entry of the retrieved list. If that list
is empty, or if an error occurred, <constant>NULL</constant> is
returned.</para>
<para>On success,
@ -150,13 +119,17 @@
contain <constant>NUL</constant> bytes should not be set with
this function; instead, write them directly to the files within
the device's <property>syspath</property>.</para>
<para>On success, <function>udev_device_has_tag()</function>
returns <constant>1</constant> or <constant>0</constant>,
depending on whether the device has the given tag or not.
On failure, a negative error code is returned.</para>
</refsect1>
<refsect1>
<title>See Also</title>
<para>
<citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
<citerefentry><refentrytitle>udev_new</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>udev_device_new_from_syspath</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>udev_device_get_syspath</refentrytitle><manvolnum>3</manvolnum></citerefentry>,

View File

@ -14,7 +14,7 @@ project('systemd', 'c',
)
libsystemd_version = '0.29.0'
libudev_version = '1.7.0'
libudev_version = '1.6.18'
# We need the same data in two different formats, ugh!
# Also, for hysterical reasons, we use different variable

213
po/fr.po
View File

@ -9,7 +9,7 @@ msgstr ""
"Project-Id-Version: systemd\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-19 18:02+0200\n"
"PO-Revision-Date: 2020-08-28 05:29+0000\n"
"PO-Revision-Date: 2020-08-27 02:46+0000\n"
"Last-Translator: Julien Humbert <julroy67@gmail.com>\n"
"Language-Team: French <https://translate.fedoraproject.org/projects/systemd/"
"master/fr/>\n"
@ -51,7 +51,7 @@ msgstr ""
#: src/core/org.freedesktop.systemd1.policy.in:54
msgid "Set or unset system and service manager environment variables"
msgstr ""
"Définir ou supprimer des variables denvironnement du système ou du "
"Définir ou supprimer des variables d'environnement du système ou du "
"gestionnaire de services"
#: src/core/org.freedesktop.systemd1.policy.in:55
@ -59,12 +59,12 @@ msgid ""
"Authentication is required to set or unset system and service manager "
"environment variables."
msgstr ""
"Authentification requise pour définir ou supprimer des variables d"
"environnement du système ou du gestionnaire de services."
"Authentification requise pour définir ou supprimer des variables "
"d'environnement du système ou du gestionnaire de services."
#: src/core/org.freedesktop.systemd1.policy.in:64
msgid "Reload the systemd state"
msgstr "Recharger létat de systemd"
msgstr "Recharger l'état de systemd"
#: src/core/org.freedesktop.systemd1.policy.in:65
msgid "Authentication is required to reload the systemd state."
@ -77,7 +77,7 @@ msgstr "Créer un espace personnel"
#: src/home/org.freedesktop.home1.policy:14
msgid "Authentication is required to create a user's home area."
msgstr ""
"Authentification requise pour créer lespace personnel dun utilisateur."
"Authentification requise pour créer l'espace personnel d'un utilisateur."
#: src/home/org.freedesktop.home1.policy:23
msgid "Remove a home area"
@ -86,18 +86,18 @@ msgstr "Retirer un espace personnel"
#: src/home/org.freedesktop.home1.policy:24
msgid "Authentication is required to remove a user's home area."
msgstr ""
"Authentification requise pour retirer lespace personnel dun utilisateur."
"Authentification requise pour retirer l'espace personnel d'un utilisateur."
#: src/home/org.freedesktop.home1.policy:33
msgid "Check credentials of a home area"
msgstr "Vérifier les identifiants dun espace personnel"
msgstr "Vérifier les identifiants d'un espace personnel"
#: src/home/org.freedesktop.home1.policy:34
msgid ""
"Authentication is required to check credentials against a user's home area."
msgstr ""
"Authentification requise pour vérifier les identifiants de lespace "
"personnel dun utilisateur."
"Authentification requise pour vérifier les identifiants de l'espace "
"personnel d'un utilisateur."
#: src/home/org.freedesktop.home1.policy:43
msgid "Update a home area"
@ -106,7 +106,7 @@ msgstr "Mettre à jour un espace personnel"
#: src/home/org.freedesktop.home1.policy:44
msgid "Authentication is required to update a user's home area."
msgstr ""
"Authentification requise pour mettre à jour lespace personnel dun "
"Authentification requise pour mettre à jour l'espace personnel d'un "
"utilisateur."
#: src/home/org.freedesktop.home1.policy:53
@ -119,34 +119,34 @@ msgstr "Authentification requise pour retailler un espace personnel."
#: src/home/org.freedesktop.home1.policy:63
msgid "Change password of a home area"
msgstr "Changer le mot de passe dun espace personnel"
msgstr "Changer le mot de passe d'un espace personnel"
#: src/home/org.freedesktop.home1.policy:64
msgid ""
"Authentication is required to change the password of a user's home area."
msgstr ""
"Authentification requise pour changer le mot de passe de lespace personnel "
"dun utilisateur."
"Authentification requise pour changer le mot de passe de l'espace personnel "
"d'un utilisateur."
#: src/hostname/org.freedesktop.hostname1.policy:20
msgid "Set hostname"
msgstr "Définir le nom dhôte"
msgstr "Définir le nom d'hôte"
#: src/hostname/org.freedesktop.hostname1.policy:21
msgid "Authentication is required to set the local hostname."
msgstr "Authentification requise pour définir le nom dhôte local."
msgstr "Authentification requise pour définir le nom d'hôte local."
#: src/hostname/org.freedesktop.hostname1.policy:30
msgid "Set static hostname"
msgstr "Définir le nom dhôte statique"
msgstr "Définir le nom d'hôte statique"
#: src/hostname/org.freedesktop.hostname1.policy:31
msgid ""
"Authentication is required to set the statically configured local hostname, "
"as well as the pretty hostname."
msgstr ""
"Authentification requise pour définir le nom dhôte local de manière "
"statique, tout comme le nom dhôte familier."
"Authentification requise pour définir le nom d'hôte local de manière "
"statique, tout comme le nom d'hôte familier."
#: src/hostname/org.freedesktop.hostname1.policy:41
msgid "Set machine information"
@ -159,11 +159,11 @@ msgstr ""
#: src/hostname/org.freedesktop.hostname1.policy:51
msgid "Get product UUID"
msgstr "Obtenir lUUID du produit"
msgstr "Obtenir l'UUID du produit"
#: src/hostname/org.freedesktop.hostname1.policy:52
msgid "Authentication is required to get product UUID."
msgstr "Authentification requise pour obtenir lUUID du produit."
msgstr "Authentification requise pour obtenir l'UUID du produit."
#: src/import/org.freedesktop.import1.policy:22
msgid "Import a VM or container image"
@ -214,33 +214,33 @@ msgstr ""
#: src/login/org.freedesktop.login1.policy:22
msgid "Allow applications to inhibit system shutdown"
msgstr "Permet aux applications dempêcher larrêt du système"
msgstr "Permet aux applications d'empêcher l'arrêt du système"
#: src/login/org.freedesktop.login1.policy:23
msgid ""
"Authentication is required for an application to inhibit system shutdown."
msgstr ""
"Authentification requise pour permettre à une application dempêcher larrêt "
"Authentification requise pour permettre à une application d'empêcher l'arrêt "
"du système."
#: src/login/org.freedesktop.login1.policy:33
msgid "Allow applications to delay system shutdown"
msgstr "Permet aux applications de retarder larrêt du système"
msgstr "Permet aux applications de retarder l'arrêt du système"
#: src/login/org.freedesktop.login1.policy:34
msgid "Authentication is required for an application to delay system shutdown."
msgstr ""
"Authentification requise pour permettre à une application de retarder l"
"arrêt du système."
"Authentification requise pour permettre à une application de retarder "
"l'arrêt du système."
#: src/login/org.freedesktop.login1.policy:44
msgid "Allow applications to inhibit system sleep"
msgstr "Permet aux applications dempêcher la mise en veille du système"
msgstr "Permet aux applications d'empêcher la mise en veille du système"
#: src/login/org.freedesktop.login1.policy:45
msgid "Authentication is required for an application to inhibit system sleep."
msgstr ""
"Authentification requise pour permettre à une application dempêcher la mise "
"Authentification requise pour permettre à une application d'empêcher la mise "
"en veille du système."
#: src/login/org.freedesktop.login1.policy:55
@ -255,20 +255,21 @@ msgstr ""
#: src/login/org.freedesktop.login1.policy:65
msgid "Allow applications to inhibit automatic system suspend"
msgstr "Permet aux applications dempêcher lhibernation automatique du système"
msgstr ""
"Permet aux applications d'empêcher l'hibernation automatique du système"
#: src/login/org.freedesktop.login1.policy:66
msgid ""
"Authentication is required for an application to inhibit automatic system "
"suspend."
msgstr ""
"Authentification requise pour permettre à une application dempêcher l"
"hibernation automatique du système."
"Authentification requise pour permettre à une application d'empêcher "
"l'hibernation automatique du système."
#: src/login/org.freedesktop.login1.policy:75
msgid "Allow applications to inhibit system handling of the power key"
msgstr ""
"Permet aux applications dempêcher la gestion du bouton dalimentation du "
"Permet aux applications d'empêcher la gestion du bouton d'alimentation du "
"système"
#: src/login/org.freedesktop.login1.policy:76
@ -276,13 +277,13 @@ msgid ""
"Authentication is required for an application to inhibit system handling of "
"the power key."
msgstr ""
"Authentification requise pour permettre à une application dempêcher la "
"gestion du bouton dalimentation du système."
"Authentification requise pour permettre à une application d'empêcher la "
"gestion du bouton d'alimentation du système."
#: src/login/org.freedesktop.login1.policy:86
msgid "Allow applications to inhibit system handling of the suspend key"
msgstr ""
"Permet aux applications dempêcher la gestion du bouton de mise en veille du "
"Permet aux applications d'empêcher la gestion du bouton de mise en veille du "
"système"
#: src/login/org.freedesktop.login1.policy:87
@ -290,13 +291,13 @@ msgid ""
"Authentication is required for an application to inhibit system handling of "
"the suspend key."
msgstr ""
"Authentification requise pour permettre à une application dempêcher la "
"Authentification requise pour permettre à une application d'empêcher la "
"gestion du bouton de mise en veille du système."
#: src/login/org.freedesktop.login1.policy:97
msgid "Allow applications to inhibit system handling of the hibernate key"
msgstr ""
"Permet aux applications dempêcher la gestion du bouton dhibernation du "
"Permet aux applications d'empêcher la gestion du bouton d'hibernation du "
"système"
#: src/login/org.freedesktop.login1.policy:98
@ -304,46 +305,46 @@ msgid ""
"Authentication is required for an application to inhibit system handling of "
"the hibernate key."
msgstr ""
"Authentification requise pour permettre à une application dempêcher la "
"gestion du bouton dhibernation du système."
"Authentification requise pour permettre à une application d'empêcher la "
"gestion du bouton d'hibernation du système."
#: src/login/org.freedesktop.login1.policy:107
msgid "Allow applications to inhibit system handling of the lid switch"
msgstr ""
"Permet aux applications dempêcher la gestion par le système du rabat de "
"lécran"
"Permet aux applications d'empêcher la gestion par le système du rabat de "
"l'écran"
#: src/login/org.freedesktop.login1.policy:108
msgid ""
"Authentication is required for an application to inhibit system handling of "
"the lid switch."
msgstr ""
"Authentification requise pour permettre à une application dempêcher la "
"gestion par le système du rabat de lécran."
"Authentification requise pour permettre à une application d'empêcher la "
"gestion par le système du rabat de l'écran."
#: src/login/org.freedesktop.login1.policy:117
msgid "Allow non-logged-in user to run programs"
msgstr "Permet à un utilisateur non connecté dexécuter des programmes"
msgstr "Permet à un utilisateur non connecté d'exécuter des programmes"
#: src/login/org.freedesktop.login1.policy:118
msgid "Explicit request is required to run programs as a non-logged-in user."
msgstr ""
"Requête explicite requise pour exécuter des programmes en tant qu"
"utilisateur non connecté."
"Requête explicite requise pour exécuter des programmes en tant "
"qu'utilisateur non connecté."
#: src/login/org.freedesktop.login1.policy:127
msgid "Allow non-logged-in users to run programs"
msgstr "Permet aux utilisateurs non connectés dexécuter des programmes"
msgstr "Permet aux utilisateurs non connectés d'exécuter des programmes"
#: src/login/org.freedesktop.login1.policy:128
msgid "Authentication is required to run programs as a non-logged-in user."
msgstr ""
"Authentification requise pour exécuter des programmes en tant quutilisateur "
"Authentification requise pour exécuter des programmes en tant qu'utilisateur "
"non connecté."
#: src/login/org.freedesktop.login1.policy:137
msgid "Allow attaching devices to seats"
msgstr "Permet dassocier des périphériques à des postes (seats)"
msgstr "Permet d'associer des périphériques à des postes (seats)"
#: src/login/org.freedesktop.login1.policy:138
msgid "Authentication is required to attach a device to a seat."
@ -370,27 +371,27 @@ msgstr "Authentification requise pour éteindre le système."
#: src/login/org.freedesktop.login1.policy:169
msgid "Power off the system while other users are logged in"
msgstr "Éteindre le système alors que dautres utilisateurs sont connectés"
msgstr "Éteindre le système alors que d'autres utilisateurs sont connectés"
#: src/login/org.freedesktop.login1.policy:170
msgid ""
"Authentication is required to power off the system while other users are "
"logged in."
msgstr ""
"Authentification requise pour éteindre le système alors que dautres "
"Authentification requise pour éteindre le système alors que d'autres "
"utilisateurs sont connectés."
#: src/login/org.freedesktop.login1.policy:180
msgid "Power off the system while an application is inhibiting this"
msgstr "Éteindre le système alors quune application a demandé de lempêcher"
msgstr "Éteindre le système alors qu'une application a demandé de l'empêcher"
#: src/login/org.freedesktop.login1.policy:181
msgid ""
"Authentication is required to power off the system while an application is "
"inhibiting this."
msgstr ""
"Authentification requise pour éteindre le système alors quune application a "
"demandé de lempêcher."
"Authentification requise pour éteindre le système alors qu'une application a "
"demandé de l'empêcher."
#: src/login/org.freedesktop.login1.policy:191
msgid "Reboot the system"
@ -402,27 +403,27 @@ msgstr "Authentification requise pour redémarrer le système."
#: src/login/org.freedesktop.login1.policy:202
msgid "Reboot the system while other users are logged in"
msgstr "Redémarrer le système alors que dautres utilisateurs sont connectés"
msgstr "Redémarrer le système alors que d'autres utilisateurs sont connectés"
#: src/login/org.freedesktop.login1.policy:203
msgid ""
"Authentication is required to reboot the system while other users are logged "
"in."
msgstr ""
"Authentification requise pour redémarrer le système alors que dautres "
"Authentification requise pour redémarrer le système alors que d'autres "
"utilisateurs sont connectés."
#: src/login/org.freedesktop.login1.policy:213
msgid "Reboot the system while an application is inhibiting this"
msgstr "Redémarrer le système alors quune application a demandé de lempêcher"
msgstr "Redémarrer le système alors qu'une application a demandé de l'empêcher"
#: src/login/org.freedesktop.login1.policy:214
msgid ""
"Authentication is required to reboot the system while an application is "
"inhibiting this."
msgstr ""
"Authentification requise pour redémarrer le système alors quune application "
"a demandé de lempêcher."
"Authentification requise pour redémarrer le système alors qu'une application "
"a demandé de l'empêcher."
#: src/login/org.freedesktop.login1.policy:224
msgid "Halt the system"
@ -434,19 +435,19 @@ msgstr "Authentification requise pour arrêter le système."
#: src/login/org.freedesktop.login1.policy:235
msgid "Halt the system while other users are logged in"
msgstr "Arrêter le système alors que dautres utilisateurs sont connectés"
msgstr "Arrêter le système alors que d'autres utilisateurs sont connectés"
#: src/login/org.freedesktop.login1.policy:236
msgid ""
"Authentication is required to halt the system while other users are logged "
"in."
msgstr ""
"Authentification requise pour arrêter le système alors que dautres "
"Authentification requise pour arrêter le système alors que d'autres "
"utilisateurs sont connectés."
#: src/login/org.freedesktop.login1.policy:246
msgid "Halt the system while an application is inhibiting this"
msgstr "Arrêter le système alors quune application a demandé de lempêcher"
msgstr "Arrêter le système alors qu'une application a demandé de l'empêcher"
#: src/login/org.freedesktop.login1.policy:247
#, fuzzy
@ -471,28 +472,28 @@ msgstr "Authentification requise pour mettre le système en veille."
#: src/login/org.freedesktop.login1.policy:267
msgid "Suspend the system while other users are logged in"
msgstr ""
"Mettre le système en veille alors que dautres utilisateurs sont connectés"
"Mettre le système en veille alors que d'autres utilisateurs sont connectés"
#: src/login/org.freedesktop.login1.policy:268
msgid ""
"Authentication is required to suspend the system while other users are "
"logged in."
msgstr ""
"Authentification requise pour mettre le système en veille alors que dautres "
"Authentification requise pour mettre le système en veille alors que d'autres "
"utilisateurs sont connectés."
#: src/login/org.freedesktop.login1.policy:278
msgid "Suspend the system while an application is inhibiting this"
msgstr ""
"Mettre le système en veille alors quune application a demandé de lempêcher"
"Mettre le système en veille alors qu'une application a demandé de l'empêcher"
#: src/login/org.freedesktop.login1.policy:279
msgid ""
"Authentication is required to suspend the system while an application is "
"inhibiting this."
msgstr ""
"Authentification requise pour mettre le système en veille alors quune "
"application a demandé de lempêcher."
"Authentification requise pour mettre le système en veille alors qu'une "
"application a demandé de l'empêcher."
#: src/login/org.freedesktop.login1.policy:289
msgid "Hibernate the system"
@ -505,7 +506,7 @@ msgstr "Authentification requise pour mettre le système en hibernation."
#: src/login/org.freedesktop.login1.policy:299
msgid "Hibernate the system while other users are logged in"
msgstr ""
"Mettre le système en hibernation alors que dautres utilisateurs sont "
"Mettre le système en hibernation alors que d'autres utilisateurs sont "
"connectés"
#: src/login/org.freedesktop.login1.policy:300
@ -513,22 +514,22 @@ msgid ""
"Authentication is required to hibernate the system while other users are "
"logged in."
msgstr ""
"Authentification requise pour mettre le système en hibernation alors que d"
"autres utilisateurs sont connectés."
"Authentification requise pour mettre le système en hibernation alors que "
"d'autres utilisateurs sont connectés."
#: src/login/org.freedesktop.login1.policy:310
msgid "Hibernate the system while an application is inhibiting this"
msgstr ""
"Mettre le système en hibernation alors quune application a demandé de "
"lempêcher"
"Mettre le système en hibernation alors qu'une application a demandé de "
"l'empêcher"
#: src/login/org.freedesktop.login1.policy:311
msgid ""
"Authentication is required to hibernate the system while an application is "
"inhibiting this."
msgstr ""
"Authentification requise pour mettre le système en hibernation alors quune "
"application a demandé de lempêcher."
"Authentification requise pour mettre le système en hibernation alors qu'une "
"application a demandé de l'empêcher."
#: src/login/org.freedesktop.login1.policy:321
msgid "Manage active sessions, users and seats"
@ -552,48 +553,48 @@ msgstr ""
#: src/login/org.freedesktop.login1.policy:341
msgid "Set the reboot \"reason\" in the kernel"
msgstr "Définir la «raison» du redémarrage dans le noyau"
msgstr "Définir la « raison » du redémarrage dans le noyau"
#: src/login/org.freedesktop.login1.policy:342
msgid "Authentication is required to set the reboot \"reason\" in the kernel."
msgstr ""
"Authentification requise pour définir la «raison» du redémarrage dans le "
"Authentification requise pour définir la « raison » du redémarrage dans le "
"noyau."
#: src/login/org.freedesktop.login1.policy:352
msgid "Indicate to the firmware to boot to setup interface"
msgstr "Indiquer au micrologiciel de démarrer sur linterface de configuration"
msgstr "Indiquer au micrologiciel de démarrer sur l'interface de configuration"
#: src/login/org.freedesktop.login1.policy:353
msgid ""
"Authentication is required to indicate to the firmware to boot to setup "
"interface."
msgstr ""
"Authentification requise pour indiquer au micrologiciel de démarrer sur l"
"interface de configuration."
"Authentification requise pour indiquer au micrologiciel de démarrer sur "
"l'interface de configuration."
#: src/login/org.freedesktop.login1.policy:363
msgid "Indicate to the boot loader to boot to the boot loader menu"
msgstr "Indiquer au programme damorçage dafficher le menu au démarrage"
msgstr "Indiquer au programme d'amorçage d'afficher le menu au démarrage"
#: src/login/org.freedesktop.login1.policy:364
msgid ""
"Authentication is required to indicate to the boot loader to boot to the "
"boot loader menu."
msgstr ""
"Authentification requise pour indiquer au programme damorçage dafficher le "
"Authentification requise pour indiquer au programme d'amorçage d'afficher le "
"menu au démarrage."
#: src/login/org.freedesktop.login1.policy:374
msgid "Indicate to the boot loader to boot a specific entry"
msgstr "Indiquer au programme damorçage de démarrer une entrée spécifique"
msgstr "Indiquer au programme d'amorçage de démarrer une entrée spécifique"
#: src/login/org.freedesktop.login1.policy:375
msgid ""
"Authentication is required to indicate to the boot loader to boot into a "
"specific boot loader entry."
msgstr ""
"Authentification requise pour indiquer au programme damorçage de démarrer "
"Authentification requise pour indiquer au programme d'amorçage de démarrer "
"une entrée spécifique."
#: src/login/org.freedesktop.login1.policy:385
@ -623,11 +624,11 @@ msgstr ""
#: src/machine/org.freedesktop.machine1.policy:32
msgid "Log into the local host"
msgstr "Connexion à lhôte local"
msgstr "Connexion à l'hôte local"
#: src/machine/org.freedesktop.machine1.policy:33
msgid "Authentication is required to log into the local host."
msgstr "Authentification requise pour permettre la connexion à lhôte local."
msgstr "Authentification requise pour permettre la connexion à l'hôte local."
#: src/machine/org.freedesktop.machine1.policy:42
msgid "Acquire a shell in a local container"
@ -641,12 +642,12 @@ msgstr ""
#: src/machine/org.freedesktop.machine1.policy:53
msgid "Acquire a shell on the local host"
msgstr "Obtenir une interface système sur lhôte local"
msgstr "Obtenir une interface système sur l'hôte local"
#: src/machine/org.freedesktop.machine1.policy:54
msgid "Authentication is required to acquire a shell on the local host."
msgstr ""
"Authentification requise pour obtenir une interface système sur lhôte local."
"Authentification requise pour obtenir une interface système sur l'hôte local."
#: src/machine/org.freedesktop.machine1.policy:64
msgid "Acquire a pseudo TTY in a local container"
@ -661,12 +662,12 @@ msgstr ""
#: src/machine/org.freedesktop.machine1.policy:74
msgid "Acquire a pseudo TTY on the local host"
msgstr "Obtenir un pseudo terminal sur lhôte local"
msgstr "Obtenir un pseudo terminal sur l'hôte local"
#: src/machine/org.freedesktop.machine1.policy:75
msgid "Authentication is required to acquire a pseudo TTY on the local host."
msgstr ""
"Authentification requise pour obtenir un pseudo terminal sur lhôte local."
"Authentification requise pour obtenir un pseudo terminal sur l'hôte local."
#: src/machine/org.freedesktop.machine1.policy:84
msgid "Manage local virtual machines and containers"
@ -889,11 +890,11 @@ msgstr ""
#: src/timedate/org.freedesktop.timedate1.policy:22
msgid "Set system time"
msgstr "Définir lheure du système"
msgstr "Définir l'heure du système"
#: src/timedate/org.freedesktop.timedate1.policy:23
msgid "Authentication is required to set the system time."
msgstr "Authentification requise pour définir lheure du système."
msgstr "Authentification requise pour définir l'heure du système."
#: src/timedate/org.freedesktop.timedate1.policy:33
msgid "Set system timezone"
@ -906,7 +907,7 @@ msgstr "Authentification requise pour définir le fuseau horaire du système."
#: src/timedate/org.freedesktop.timedate1.policy:43
msgid "Set RTC to local timezone or UTC"
msgstr ""
"Positionner lhorloge matérielle à lheure locale ou sur le temps universel "
"Positionner l'horloge matérielle à l'heure locale ou sur le temps universel "
"coordonné (UTC)"
#: src/timedate/org.freedesktop.timedate1.policy:44
@ -914,54 +915,54 @@ msgid ""
"Authentication is required to control whether the RTC stores the local or "
"UTC time."
msgstr ""
"Authentification requise pour positionner lhorloge matérielle à lheure "
"Authentification requise pour positionner l'horloge matérielle à l'heure "
"locale ou sur le temps universel coordonné (UTC)."
#: src/timedate/org.freedesktop.timedate1.policy:53
msgid "Turn network time synchronization on or off"
msgstr "Activer ou désactiver la synchronisation de lheure avec le réseau"
msgstr "Activer ou désactiver la synchronisation de l'heure avec le réseau"
#: src/timedate/org.freedesktop.timedate1.policy:54
msgid ""
"Authentication is required to control whether network time synchronization "
"shall be enabled."
msgstr ""
"Authentification requise pour activer ou désactiver la synchronisation de l"
"heure avec le réseau."
"Authentification requise pour activer ou désactiver la synchronisation de "
"l'heure avec le réseau."
#: src/core/dbus-unit.c:362
msgid "Authentication is required to start '$(unit)'."
msgstr "Authentification requise pour démarrer «$(unit)»."
msgstr "Authentification requise pour démarrer « $(unit) »."
#: src/core/dbus-unit.c:363
msgid "Authentication is required to stop '$(unit)'."
msgstr "Authentification requise pour arrêter «$(unit)»."
msgstr "Authentification requise pour arrêter « $(unit) »."
#: src/core/dbus-unit.c:364
msgid "Authentication is required to reload '$(unit)'."
msgstr "Authentification requise pour recharger «$(unit)»."
msgstr "Authentification requise pour recharger « $(unit) »."
#: src/core/dbus-unit.c:365 src/core/dbus-unit.c:366
msgid "Authentication is required to restart '$(unit)'."
msgstr "Authentification requise pour redémarrer «$(unit)»."
msgstr "Authentification requise pour redémarrer « $(unit) »."
#: src/core/dbus-unit.c:538
msgid ""
"Authentication is required to send a UNIX signal to the processes of "
"'$(unit)'."
msgstr ""
"Authentification requise pour envoyer un signal UNIX aux processus de « "
"$(unit)»."
"Authentification requise pour envoyer un signal UNIX aux processus de "
"« $(unit) »."
#: src/core/dbus-unit.c:569
msgid "Authentication is required to reset the \"failed\" state of '$(unit)'."
msgstr ""
"Authentification requise pour réinitialiser létat d«échec» de « $(unit)"
"»."
"Authentification requise pour réinitialiser l'état d'« échec » de "
"« $(unit) »."
#: src/core/dbus-unit.c:602
msgid "Authentication is required to set properties on '$(unit)'."
msgstr "Authentification requise pour définir des propriétés de «$(unit)»."
msgstr "Authentification requise pour définir des propriétés de « $(unit) »."
#: src/core/dbus-unit.c:711
msgid ""
@ -969,7 +970,7 @@ msgid ""
"'$(unit)'."
msgstr ""
"Authentification requise pour supprimer les fichiers et les dossiers "
"associés à «$(unit)»."
"associés à « $(unit) »."
#: src/core/dbus-unit.c:760
#, fuzzy

View File

@ -3,23 +3,22 @@
# SOME DESCRIPTIVE TITLE.
# This file is distributed under the same license as the PACKAGE package.
# gogo <trebelnik2@gmail.com>, 2016.
# Gogo Gogsi <linux.hr@protonmail.com>, 2020.
#
msgid ""
msgstr ""
"Project-Id-Version: systemd master\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-19 18:02+0200\n"
"PO-Revision-Date: 2020-08-29 11:29+0000\n"
"Last-Translator: Gogo Gogsi <linux.hr@protonmail.com>\n"
"Language-Team: Croatian <https://translate.fedoraproject.org/projects/"
"systemd/master/hr/>\n"
"PO-Revision-Date: 2020-03-08 12:57+0100\n"
"Last-Translator: gogo <linux.hr@protonmail.com>\n"
"Language-Team: \n"
"Language: hr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 4.2.1\n"
"X-Generator: Poedit 2.0.6\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
#: src/core/org.freedesktop.systemd1.policy.in:22
msgid "Send passphrase back to system"
@ -564,7 +563,7 @@ msgstr "Postavljanje zaslonske pruke"
#: src/login/org.freedesktop.login1.policy:386
msgid "Authentication is required to set a wall message"
msgstr "Potrebna je ovjera za postavljanje zaslonske poruke."
msgstr "Potrebna je ovjera za postavljanje zaslonske pruke."
#: src/login/org.freedesktop.login1.policy:395
msgid "Change Session"
@ -909,11 +908,14 @@ msgid ""
"Authentication is required to delete files and directories associated with "
"'$(unit)'."
msgstr ""
"Potrebna je ovjera za brisanje datoteka i direktorija pridruženih sa "
"Potrebna je ovjera za za brisanje datoteka i direktorija pridruženih sa "
"'$(unit)'."
#: src/core/dbus-unit.c:760
#, fuzzy
#| msgid ""
#| "Authentication is required to send a UNIX signal to the processes of "
#| "'$(unit)'."
msgid ""
"Authentication is required to freeze or thaw the processes of '$(unit)' unit."
msgstr ""
"Potrebna je ovjera za zamrzavanje ili odmrzavanje procesa '$(unit)' jedinice."
msgstr "Potrebna je ovjera za slanje UNIX signala u procese '$(unit)'."

397
po/uk.po
View File

@ -8,68 +8,67 @@ msgstr ""
"Project-Id-Version: systemd master\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-19 18:02+0200\n"
"PO-Revision-Date: 2020-08-29 11:29+0000\n"
"PO-Revision-Date: 2020-03-25 18:40+0200\n"
"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
"Language-Team: Ukrainian <https://translate.fedoraproject.org/projects/"
"systemd/master/uk/>\n"
"Language-Team: Ukrainian <kde-i18n-uk@kde.org>\n"
"Language: uk\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 4.2.1\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: Lokalize 20.03.70\n"
#: src/core/org.freedesktop.systemd1.policy.in:22
msgid "Send passphrase back to system"
msgstr "Надсилання пароля назад у систему"
msgstr "Надіслати пароль назад у систему"
#: src/core/org.freedesktop.systemd1.policy.in:23
msgid ""
"Authentication is required to send the entered passphrase back to the system."
msgstr "Для надсилання введеного пароля до системи слід пройти розпізнавання."
msgstr ""
"Потрібна автентифікація, щоб надіслати введений пароль назад у систему."
#: src/core/org.freedesktop.systemd1.policy.in:33
msgid "Manage system services or other units"
msgstr "Керування системними службами й іншими одиницями systemd"
msgstr "Керувати системними службами й іншими одиницями systemd"
#: src/core/org.freedesktop.systemd1.policy.in:34
msgid "Authentication is required to manage system services or other units."
msgstr ""
"Для керування системними службами й іншими одиницями systemd слід пройти "
"розпізнавання."
"Потрібна автентифікація, щоб керувати системними службами й іншими одиницями "
"systemd."
#: src/core/org.freedesktop.systemd1.policy.in:43
msgid "Manage system service or unit files"
msgstr "Керування системними службами й одиницями systemd"
msgstr "Керувати системними службами й одиницями systemd"
#: src/core/org.freedesktop.systemd1.policy.in:44
msgid "Authentication is required to manage system service or unit files."
msgstr ""
"Для керування системними службами й одиницями systemd слід пройти "
"розпізнавання."
"Потрібна автентифікація, щоб керувати системними службами й одиницями "
"systemd."
#: src/core/org.freedesktop.systemd1.policy.in:54
msgid "Set or unset system and service manager environment variables"
msgstr ""
"Встановлення і скасування встановлення змінних середовища для керування "
"службами і системою"
"Встановити або забрати змінну середовища з керування службами і системою"
#: src/core/org.freedesktop.systemd1.policy.in:55
msgid ""
"Authentication is required to set or unset system and service manager "
"environment variables."
msgstr ""
"Для встановлення або скасовування встановлення змінних середовища для "
"керування службами і системою слід пройти розпізнавання."
"Потрібна автентифікація, щоб установити або забрати змінні середовища з "
"керування службами і системою."
#: src/core/org.freedesktop.systemd1.policy.in:64
msgid "Reload the systemd state"
msgstr "Перезавантаження стану systemd"
msgstr "Перезапустити стан системи"
#: src/core/org.freedesktop.systemd1.policy.in:65
msgid "Authentication is required to reload the systemd state."
msgstr "Для перезавантаження стану systemd слід пройти розпізнавання."
msgstr "Потрібна автентифікація, щоб перезапустити стан системи."
#: src/home/org.freedesktop.home1.policy:13
msgid "Create a home area"
@ -128,31 +127,31 @@ msgstr ""
#: src/hostname/org.freedesktop.hostname1.policy:20
msgid "Set hostname"
msgstr "Встановлення назви вузла"
msgstr "Встановити назву вузла"
#: src/hostname/org.freedesktop.hostname1.policy:21
msgid "Authentication is required to set the local hostname."
msgstr "Для встановлення назви локального вузла слід пройти розпізнавання."
msgstr "Потрібна автентифікація, щоб встановити назву локального вузла."
#: src/hostname/org.freedesktop.hostname1.policy:30
msgid "Set static hostname"
msgstr "Встановлення статичної назви вузла"
msgstr "Встановити статичну назву вузла"
#: src/hostname/org.freedesktop.hostname1.policy:31
msgid ""
"Authentication is required to set the statically configured local hostname, "
"as well as the pretty hostname."
msgstr ""
"Для встановлення статично налаштованої назви локального вузла і форматованої "
"назви слід пройти розпізнавання."
"Потрібна автентифікація, щоб вказати статично налаштовану назву локального "
"вузла, так само й форматовану."
#: src/hostname/org.freedesktop.hostname1.policy:41
msgid "Set machine information"
msgstr "Встановлення даних щодо машини"
msgstr "Встановити інформацію про машину"
#: src/hostname/org.freedesktop.hostname1.policy:42
msgid "Authentication is required to set local machine information."
msgstr "Для встановлення даних щодо локальної машини слід пройти розпізнавання."
msgstr "Потрібна автентифікація, щоб вказати локальну інформацію про машини."
#: src/hostname/org.freedesktop.hostname1.policy:51
msgid "Get product UUID"
@ -160,378 +159,371 @@ msgstr "Отримання UUID продукту"
#: src/hostname/org.freedesktop.hostname1.policy:52
msgid "Authentication is required to get product UUID."
msgstr "Для отримання UUID продукту слід пройти розпізнавання."
msgstr "Потрібна автентифікація, щоб отримати UUID продукту."
#: src/import/org.freedesktop.import1.policy:22
msgid "Import a VM or container image"
msgstr "Імпортування образу контейнера або віртуальної машини"
msgstr "Імпортувати образ контейнера або віртуальної машини"
#: src/import/org.freedesktop.import1.policy:23
msgid "Authentication is required to import a VM or container image"
msgstr ""
"Для імпортування образу контейнера або віртуальної машини слід пройти "
"розпізнавання"
"Потрібна автентифікація, щоб імпортувати образ контейнера або віртуальної "
"машини"
#: src/import/org.freedesktop.import1.policy:32
msgid "Export a VM or container image"
msgstr "Експортування образу контейнера або віртуальної машини"
msgstr "Експортувати образ контейнера або віртуальної машини"
#: src/import/org.freedesktop.import1.policy:33
msgid "Authentication is required to export a VM or container image"
msgstr ""
"Для експортування образу контейнера або віртуальної машини слід пройти "
"розпізнавання"
"Потрібна автентифікація, щоб експортувати образ контейнера або віртуальної "
"машини"
#: src/import/org.freedesktop.import1.policy:42
msgid "Download a VM or container image"
msgstr "Отримання образу контейнера або віртуальної машини"
msgstr "Звантажити образ контейнера або віртуальної машини"
#: src/import/org.freedesktop.import1.policy:43
msgid "Authentication is required to download a VM or container image"
msgstr ""
"Для отримання образу контейнера або віртуальної машини слід пройти "
"розпізнавання"
"Потрібна автентифікація, щоб звантажити образ контейнера або віртуальної "
"машини"
#: src/locale/org.freedesktop.locale1.policy:22
msgid "Set system locale"
msgstr "Визначення системної локалі"
msgstr "Вказати системну локаль"
#: src/locale/org.freedesktop.locale1.policy:23
msgid "Authentication is required to set the system locale."
msgstr "Для визначення системної локалі слід пройти розпізнавання."
msgstr "Потрібна автентифікація, щоб встановити системну локаль."
#: src/locale/org.freedesktop.locale1.policy:33
msgid "Set system keyboard settings"
msgstr "Визначення загальносистемних параметрів клавіатури"
msgstr "Вказати налаштування системної клавіатури"
#: src/locale/org.freedesktop.locale1.policy:34
msgid "Authentication is required to set the system keyboard settings."
msgstr ""
"Для визначення загальносистемних параметрів клавіатури слід пройти "
"розпізнавання."
"Потрібна автентифікація, щоб вказати налаштування системної клавіатури."
#: src/login/org.freedesktop.login1.policy:22
msgid "Allow applications to inhibit system shutdown"
msgstr "Уможливлення перешкоджання вимкненню системи програмами"
msgstr "Дозволити програмам перешкоджати вимкненню системи"
#: src/login/org.freedesktop.login1.policy:23
msgid ""
"Authentication is required for an application to inhibit system shutdown."
msgstr ""
"Для того, щоб уможливити програмам перешкоджання вимкненню системи, слід "
"пройти розпізнавання."
"Потрібна автентифікація, щоб дозволити програмам перешкоджати вимкненню "
"системи."
#: src/login/org.freedesktop.login1.policy:33
msgid "Allow applications to delay system shutdown"
msgstr "Уможливлення затримки вимкнення системи програмами"
msgstr "Дозволити програмам затримувати вимкнення системи"
#: src/login/org.freedesktop.login1.policy:34
msgid "Authentication is required for an application to delay system shutdown."
msgstr ""
"Для того, щоб уможливити програмам затримання вимкнення системи, слід пройти "
"розпізнавання."
"Потрібна автентифікація, щоб дозволити програмам затримувати вимкнення "
"системи."
#: src/login/org.freedesktop.login1.policy:44
msgid "Allow applications to inhibit system sleep"
msgstr "Уможливлення перешкоджання присиплянню системи програмами"
msgstr "Дозволити програмам перешкоджати засинанню системи"
#: src/login/org.freedesktop.login1.policy:45
msgid "Authentication is required for an application to inhibit system sleep."
msgstr ""
"Для того, щоб уможливити програмам перешкоджання присиплянню системи, слід "
"пройти розпізнавання."
"Потрібна автентифікація, щоб дозволити програмам перешкоджати засинанню "
"системи."
#: src/login/org.freedesktop.login1.policy:55
msgid "Allow applications to delay system sleep"
msgstr "Уможливлення затримання присипляння системи програмами"
msgstr "Дозволити програмами затримувати засинання системи"
#: src/login/org.freedesktop.login1.policy:56
msgid "Authentication is required for an application to delay system sleep."
msgstr ""
"Для того, щоб уможливити програмам затримання присипляння системи, слід "
"пройти розпізнавання."
"Потрібна автентифікація, щоб дозволити програмам затримувати засинання "
"системи."
#: src/login/org.freedesktop.login1.policy:65
msgid "Allow applications to inhibit automatic system suspend"
msgstr ""
"Уможливлення перешкоджання автоматичному призупиненню системи програмами"
msgstr "Дозволити програмам перешкоджати автоматичному призупиненню системи"
#: src/login/org.freedesktop.login1.policy:66
msgid ""
"Authentication is required for an application to inhibit automatic system "
"suspend."
msgstr ""
"Для того, щоб уможливити програмам перешкоджання автоматичне призупинення "
"роботи системи, слід пройти розпізнавання."
"Потрібна автентифікація, щоб дозволити програмам перешкоджати автоматичному "
"призупиненню системи."
#: src/login/org.freedesktop.login1.policy:75
msgid "Allow applications to inhibit system handling of the power key"
msgstr ""
"Уможливлення перешкоджання обробці системою клавіші живлення для програм"
msgstr "Дозволити програмам перешкоджати обробленню системою клавіші живлення"
#: src/login/org.freedesktop.login1.policy:76
msgid ""
"Authentication is required for an application to inhibit system handling of "
"the power key."
msgstr ""
"Для того, щоб дозволити програмам перешкоджати обробленню системою клавіші "
"живлення, слід пройти розпізнавання."
"Потрібна автентифікація, щоб дозволити програмам перешкоджати обробленню "
"системою клавіші живлення."
#: src/login/org.freedesktop.login1.policy:86
msgid "Allow applications to inhibit system handling of the suspend key"
msgstr ""
"Уможливлення перешкоджання обробці системою клавіші призупинення для програм"
"Дозволити програмам перешкоджати обробленню системою клавіші призупинення"
#: src/login/org.freedesktop.login1.policy:87
msgid ""
"Authentication is required for an application to inhibit system handling of "
"the suspend key."
msgstr ""
"Для того, щоб дозволити програмам перешкоджати обробленню системою клавіші "
"призупинення, слід пройти розпізнавання."
"Потрібна автентифікація, щоб дозволити програмам перешкоджати обробленню "
"системою клавіші призупинення."
#: src/login/org.freedesktop.login1.policy:97
msgid "Allow applications to inhibit system handling of the hibernate key"
msgstr ""
"Уможливлення перешкоджання обробці системою клавіші присипляння для програм"
"Дозволити програмам перешкоджати обробленню системою клавіші присипання"
#: src/login/org.freedesktop.login1.policy:98
msgid ""
"Authentication is required for an application to inhibit system handling of "
"the hibernate key."
msgstr ""
"Для того, щоб дозволити програмам перешкоджати обробленню системою клавіші "
"присипляння, слід пройти розпізнавання."
"Потрібна автентифікація, щоб дозволити програмам перешкоджати обробленню "
"системою клавіші присипання."
#: src/login/org.freedesktop.login1.policy:107
msgid "Allow applications to inhibit system handling of the lid switch"
msgstr ""
"Уможливлення перешкоджання обробці системою перемикання кришки для програм"
"Дозволити програмам перешкоджати обробленню системою клавіші перемикання "
"кришки"
#: src/login/org.freedesktop.login1.policy:108
msgid ""
"Authentication is required for an application to inhibit system handling of "
"the lid switch."
msgstr ""
"Для того, щоб дозволити програмам перешкоджати обробленню системою "
"перемикання кришки, слід пройти розпізнавання."
"Потрібна автентифікація, щоб дозволити програмам перешкоджати обробленню "
"системою клавіші перемикання кришки."
#: src/login/org.freedesktop.login1.policy:117
msgid "Allow non-logged-in user to run programs"
msgstr "Дозвіл для незареєстрованого користувача на запуск програм"
msgstr "Дозволити незареєстрованим користувачам запускати програми"
#: src/login/org.freedesktop.login1.policy:118
msgid "Explicit request is required to run programs as a non-logged-in user."
msgstr ""
"Для того, щоб дозволити незареєстрованому користувачеві запускати програми, "
"потрібен явний запит."
"Потрібна автентифікація, щоб дозволити незареєстрованим користувачам "
"запускати програми."
#: src/login/org.freedesktop.login1.policy:127
msgid "Allow non-logged-in users to run programs"
msgstr "Дозвіл для незареєстрованих користувачів на запуск програм"
msgstr "Дозволити незареєстрованим користувачам запускати програми"
#: src/login/org.freedesktop.login1.policy:128
msgid "Authentication is required to run programs as a non-logged-in user."
msgstr ""
"Для того, щоб дозволити незареєстрованому користувачеві запускати програми, "
"слід пройти розпізнавання."
"Потрібна автентифікація, щоб дозволити незареєстрованим користувачам "
"запускати програми."
#: src/login/org.freedesktop.login1.policy:137
msgid "Allow attaching devices to seats"
msgstr "Дозвіл на під'єднання пристроїв до місць"
msgstr "Дозволити під'єднання пристроїв до місць"
#: src/login/org.freedesktop.login1.policy:138
msgid "Authentication is required to attach a device to a seat."
msgstr ""
"Для того, щоб під'єднувати пристрої до місць, слід пройти розпізнавання."
msgstr "Потрібна автентифікація, щоб під'єднувати пристрої до місць."
#: src/login/org.freedesktop.login1.policy:148
msgid "Flush device to seat attachments"
msgstr "Вилучення прив'язки пристроїв для місць"
msgstr "Очисний пристрій для під'єднань до місця"
#: src/login/org.freedesktop.login1.policy:149
msgid "Authentication is required to reset how devices are attached to seats."
msgstr "Для скидання прив'язки пристроїв до місць слід пройти розпізнавання."
msgstr ""
"Потрібна автентифікація, щоб перезапустити спосіб під'єднання до місць."
#: src/login/org.freedesktop.login1.policy:158
msgid "Power off the system"
msgstr "Вимикання системи"
msgstr "Вимкнути систему"
#: src/login/org.freedesktop.login1.policy:159
msgid "Authentication is required to power off the system."
msgstr "Для вимикання системи слід пройти розпізнавання."
msgstr "Потрібна автентифікація, щоб вимкнути систему."
#: src/login/org.freedesktop.login1.policy:169
msgid "Power off the system while other users are logged in"
msgstr "Вимикання системи, коли інші користувачі ще у ній"
msgstr "Вимкнути систему, коли інші користувачі ще в ній"
#: src/login/org.freedesktop.login1.policy:170
msgid ""
"Authentication is required to power off the system while other users are "
"logged in."
msgstr ""
"Для вимикання системи, коли у ній ще працюють інші користувачі, слід пройти "
"розпізнавання."
"Потрібна автентифікація, щоб вимкнути систему, коли інші користувачі в ній."
#: src/login/org.freedesktop.login1.policy:180
msgid "Power off the system while an application is inhibiting this"
msgstr "Вимикання системи, коли програми намагаються перешкодити цьому"
msgstr "Вимкнути систему, коли програми намагаються перешкодити цьому"
#: src/login/org.freedesktop.login1.policy:181
msgid ""
"Authentication is required to power off the system while an application is "
"inhibiting this."
msgstr ""
"Для того, щоб вимкнути систему, коли програми намагаються перешкодити цьому, "
"слід пройти розпізнавання."
"Потрібна автентифікація, щоб вимкнути систему, коли програми намагаються "
"перешкодити цьому."
#: src/login/org.freedesktop.login1.policy:191
msgid "Reboot the system"
msgstr "Перезавантаження системи"
msgstr "Перезавантажити систему"
#: src/login/org.freedesktop.login1.policy:192
msgid "Authentication is required to reboot the system."
msgstr "Для перезавантаження системи слід пройти розпізнавання."
msgstr "Для перезавантаження системи необхідна ідентифікація."
#: src/login/org.freedesktop.login1.policy:202
msgid "Reboot the system while other users are logged in"
msgstr "Перезавантаження, якщо інші користувачі в системі"
msgstr "Перезавантажити, якщо інші користувачі в системі"
#: src/login/org.freedesktop.login1.policy:203
msgid ""
"Authentication is required to reboot the system while other users are logged "
"in."
msgstr ""
"Для перезавантаження системи, коли у ній ще працюють інші користувачі, слід "
"пройти розпізнавання."
"Потрібна автентифікація, щоб перезапустити систему, коли інші користувачі в "
"ній."
#: src/login/org.freedesktop.login1.policy:213
msgid "Reboot the system while an application is inhibiting this"
msgstr "Перезапуск системи, коли програми намагаються перешкодити цьому"
msgstr "Перезапустити систему, коли програми намагаються перешкодити цьому"
#: src/login/org.freedesktop.login1.policy:214
msgid ""
"Authentication is required to reboot the system while an application is "
"inhibiting this."
msgstr ""
"Для того, щоб перезавантажити систему, коли програми намагаються перешкодити "
"цьому, слід пройти розпізнавання."
"Потрібна автентифікація, щоб перезапустити систему, коли програми "
"намагаються перешкодити цьому."
#: src/login/org.freedesktop.login1.policy:224
msgid "Halt the system"
msgstr "Зупинення системи"
msgstr "Зупинити систему"
#: src/login/org.freedesktop.login1.policy:225
msgid "Authentication is required to halt the system."
msgstr "Для зупинення системи слід пройти розпізнавання."
msgstr "Потрібна автентифікація, щоб зупинити систему."
#: src/login/org.freedesktop.login1.policy:235
msgid "Halt the system while other users are logged in"
msgstr "Зупинення системи, коли інші користувачі в ній"
msgstr "Зупинити систему, коли інші користувачі в ній"
#: src/login/org.freedesktop.login1.policy:236
msgid ""
"Authentication is required to halt the system while other users are logged "
"in."
msgstr ""
"Для зупинення системи, коли у ній ще працюють інші користувачі, слід пройти "
"розпізнавання."
"Потрібна автентифікація, щоб зупинити систему, коли інші користувачі в ній."
#: src/login/org.freedesktop.login1.policy:246
msgid "Halt the system while an application is inhibiting this"
msgstr "Зупинення системи, коли програми намагаються перешкодити цьому"
msgstr "Зупинити систему, коли програми намагаються перешкодити цьому"
#: src/login/org.freedesktop.login1.policy:247
msgid ""
"Authentication is required to halt the system while an application is "
"inhibiting this."
msgstr ""
"Для того, щоб зупинити систему, коли програми намагаються перешкодити цьому, "
"слід пройти розпізнавання."
"Потрібна автентифікація, щоб зупинити систему, коли програма намагається "
"перешкодити цьому."
#: src/login/org.freedesktop.login1.policy:257
msgid "Suspend the system"
msgstr "Призупинення системи"
msgstr "Призупинити систему"
#: src/login/org.freedesktop.login1.policy:258
msgid "Authentication is required to suspend the system."
msgstr "Для призупинення системи слід пройти розпізнавання."
msgstr "Потрібна автентифікація, щоб призупинити систему."
#: src/login/org.freedesktop.login1.policy:267
msgid "Suspend the system while other users are logged in"
msgstr "Призупинення системи, коли інші користувачі в ній"
msgstr "Призупинити систему, коли інші користувачі в ній"
#: src/login/org.freedesktop.login1.policy:268
msgid ""
"Authentication is required to suspend the system while other users are "
"logged in."
msgstr ""
"Для призупинення системи, коли у ній ще працюють інші користувачі, слід "
"пройти розпізнавання."
"Потрібна автентифікація, щоб призупинити систему, коли інші користувачі в "
"ній."
#: src/login/org.freedesktop.login1.policy:278
msgid "Suspend the system while an application is inhibiting this"
msgstr "Призупинення системи, коли програми намагаються перешкодити цьому"
msgstr "Призупинити систему, коли програми намагаються перешкодити цьому"
#: src/login/org.freedesktop.login1.policy:279
msgid ""
"Authentication is required to suspend the system while an application is "
"inhibiting this."
msgstr ""
"Для того, щоб призупинити систему, коли програми намагаються перешкодити "
"цьому, слід пройти розпізнавання."
"Потрібна автентифікація, щоб призупинити систему, коли програми намагаються "
"перешкодити цьому."
#: src/login/org.freedesktop.login1.policy:289
msgid "Hibernate the system"
msgstr "Присипляння системи"
msgstr "Приспати систему"
#: src/login/org.freedesktop.login1.policy:290
msgid "Authentication is required to hibernate the system."
msgstr "Для присипляння системи слід пройти розпізнавання."
msgstr "Потрібна автентифікація, щоб приспати систему."
#: src/login/org.freedesktop.login1.policy:299
msgid "Hibernate the system while other users are logged in"
msgstr "Присипляння системи, коли інші користувачі в ній"
msgstr "Приспати систему, коли інші користувачі в ній"
#: src/login/org.freedesktop.login1.policy:300
msgid ""
"Authentication is required to hibernate the system while other users are "
"logged in."
msgstr ""
"Для присипляння системи, коли у ній ще працюють інші користувачі, слід "
"пройти розпізнавання."
"Потрібна автентифікація, щоб присипання систему, коли інші користувачі в ній."
#: src/login/org.freedesktop.login1.policy:310
msgid "Hibernate the system while an application is inhibiting this"
msgstr "Присипляння системи, коли програми намагаються перешкодити цьому"
msgstr "Приспати систему, коли програми намагаються перешкодити цьому"
#: src/login/org.freedesktop.login1.policy:311
msgid ""
"Authentication is required to hibernate the system while an application is "
"inhibiting this."
msgstr ""
"Для того, щоб приспати систему, коли програми намагаються перешкодити цьому, "
"слід пройти розпізнавання."
"Потрібна автентифікація, щоб приспати систему, коли програми намагаються "
"перешкодити цьому."
#: src/login/org.freedesktop.login1.policy:321
msgid "Manage active sessions, users and seats"
msgstr "Керування сеансами, користувачами і робочими місцями"
msgstr "Керувати сеансами, користувачами і робочими місцями"
#: src/login/org.freedesktop.login1.policy:322
msgid "Authentication is required to manage active sessions, users and seats."
msgstr ""
"Для того, щоб керувати сеансами, користувачами і робочими місцями, слід "
"пройти розпізнавання."
"Потрібна автентифікація, щоб керувати сеансами, користувачами і робочими "
"місцями."
#: src/login/org.freedesktop.login1.policy:331
msgid "Lock or unlock active sessions"
msgstr "Блокування і розблоковування сеансів"
msgstr "Заблокувати або розблокувати сеанси"
#: src/login/org.freedesktop.login1.policy:332
msgid "Authentication is required to lock or unlock active sessions."
msgstr ""
"Для того, щоб заблокувати або розблокувати активні сеанси, слід пройти "
"розпізнавання."
msgstr "Потрібна автентифікація, щоб заблокувати або розблокувати сеанси."
#: src/login/org.freedesktop.login1.policy:341
msgid "Set the reboot \"reason\" in the kernel"
@ -540,8 +532,7 @@ msgstr "Встановлення «причини» перезавантажен
#: src/login/org.freedesktop.login1.policy:342
msgid "Authentication is required to set the reboot \"reason\" in the kernel."
msgstr ""
"Для того, щоб встановити «причину» перезавантаження у ядрі, слід пройти "
"розпізнавання."
"Потрібна автентифікація, щоб встановити «причину» перезавантаження у ядрі."
#: src/login/org.freedesktop.login1.policy:352
msgid "Indicate to the firmware to boot to setup interface"
@ -552,8 +543,8 @@ msgid ""
"Authentication is required to indicate to the firmware to boot to setup "
"interface."
msgstr ""
"Для того, щоб дозволити мікрокоду визначати, чи завантажувати інтерфейс "
"встановлення, слід пройти розпізнавання."
"Потрібна автентифікація, щоб дозволити мікрокоду визначати, чи завантажувати "
"інтерфейс встановлення."
#: src/login/org.freedesktop.login1.policy:363
msgid "Indicate to the boot loader to boot to the boot loader menu"
@ -564,8 +555,8 @@ msgid ""
"Authentication is required to indicate to the boot loader to boot to the "
"boot loader menu."
msgstr ""
"Для того, щоб вказати завантажувачу, що слід завантажитися до меню "
"завантажувача, слід пройти розпізнавання."
"Потрібна автентифікація, щоб вказати завантажувачу, що слід завантажитися до "
"меню завантажувача."
#: src/login/org.freedesktop.login1.policy:374
msgid "Indicate to the boot loader to boot a specific entry"
@ -576,16 +567,16 @@ msgid ""
"Authentication is required to indicate to the boot loader to boot into a "
"specific boot loader entry."
msgstr ""
"Для того, щоб вказати завантажувачу, що слід завантажити певний пункт меню "
"завантаження, слід пройти розпізнавання."
"Потрібна автентифікація, щоб вказати завантажувачу, що слід завантажити "
"певний пункт меню завантаження."
#: src/login/org.freedesktop.login1.policy:385
msgid "Set a wall message"
msgstr "Встановлення повідомлення на стіні"
msgstr "Вказати повідомлення на стіні"
#: src/login/org.freedesktop.login1.policy:386
msgid "Authentication is required to set a wall message"
msgstr "Для встановлення повідомлення на стіні слід пройти розпізнавання"
msgstr "Потрібна автентифікація, щоб вказати повідомлення на стіні"
#: src/login/org.freedesktop.login1.policy:395
msgid "Change Session"
@ -597,81 +588,77 @@ msgstr "Для зміни віртуального термінала слід
#: src/machine/org.freedesktop.machine1.policy:22
msgid "Log into a local container"
msgstr "Вхід до локального контейнера"
msgstr "Увійти в локальний контейнер"
#: src/machine/org.freedesktop.machine1.policy:23
msgid "Authentication is required to log into a local container."
msgstr ""
"Для того, щоб увійти до локального контейнера, слід пройти розпізнавання."
msgstr "Потрібна автентифікація, щоб увійти в локальний контейнер."
#: src/machine/org.freedesktop.machine1.policy:32
msgid "Log into the local host"
msgstr "Вхід до локального вузла"
msgstr "Увійти в локальний вузол"
#: src/machine/org.freedesktop.machine1.policy:33
msgid "Authentication is required to log into the local host."
msgstr "Для входу до локального вузла слід пройти розпізнавання."
msgstr "Потрібна автентифікація, щоб увійти в локальний вузол."
#: src/machine/org.freedesktop.machine1.policy:42
msgid "Acquire a shell in a local container"
msgstr "Отримання командної оболонки у локальному контейнері"
msgstr "Перейняти оболонку в локальному контейнері"
#: src/machine/org.freedesktop.machine1.policy:43
msgid "Authentication is required to acquire a shell in a local container."
msgstr ""
"Для отримання командної оболонки у локальному контейнері слід пройти "
"розпізнавання."
"Потрібна автентифікація, щоб перейняти оболонку в локальному контейнері."
#: src/machine/org.freedesktop.machine1.policy:53
msgid "Acquire a shell on the local host"
msgstr "Отримання командної оболонки на локальному вузлі"
msgstr "Перейняти оболонку на локальному вузлі"
#: src/machine/org.freedesktop.machine1.policy:54
msgid "Authentication is required to acquire a shell on the local host."
msgstr ""
"Для отримання командної оболонки на локальному вузлі слід пройти "
"розпізнавання."
msgstr "Потрібна автентифікація, щоб перейняти оболонку на локальному вузлі."
#: src/machine/org.freedesktop.machine1.policy:64
msgid "Acquire a pseudo TTY in a local container"
msgstr "Отримання псевдо-TTY у локальному контейнері"
msgstr "Перейняти псевдо TTY в локальному контейнері"
#: src/machine/org.freedesktop.machine1.policy:65
msgid ""
"Authentication is required to acquire a pseudo TTY in a local container."
msgstr ""
"Для отримання псевдо-TTY в локальному контейнері слід пройти розпізнавання."
"Потрібна автентифікація, щоб перейняти псевдо TTY в локальному контейнері."
#: src/machine/org.freedesktop.machine1.policy:74
msgid "Acquire a pseudo TTY on the local host"
msgstr "Отримання псевдо-TTY на локальному вузлі"
msgstr "Перейняти псевдо TTY на локальному вузлі"
#: src/machine/org.freedesktop.machine1.policy:75
msgid "Authentication is required to acquire a pseudo TTY on the local host."
msgstr "Для отримання псевдо-TTY на локальному вузлі слід пройти розпізнавання."
msgstr "Потрібна автентифікація, щоб перейняти псевдо TTY на локальному вузлі."
#: src/machine/org.freedesktop.machine1.policy:84
msgid "Manage local virtual machines and containers"
msgstr "Керування локальними віртуальними машинами і контейнерами"
msgstr "Керувати локальними віртуальними машинами і контейнерами"
#: src/machine/org.freedesktop.machine1.policy:85
msgid ""
"Authentication is required to manage local virtual machines and containers."
msgstr ""
"Для доступу до керування локальними віртуальними машинами і контейнерами "
"слід пройти розпізнавання."
"Потрібна автентифікація, щоб керувати локальними віртуальними машинами і "
"контейнерами."
#: src/machine/org.freedesktop.machine1.policy:95
msgid "Manage local virtual machine and container images"
msgstr "Керування локальними образами віртуальних машин і контейнерів"
msgstr "Керувати локальними образами віртуальних машин і контейнерів"
#: src/machine/org.freedesktop.machine1.policy:96
msgid ""
"Authentication is required to manage local virtual machine and container "
"images."
msgstr ""
"Для доступу до керування локальними образами віртуальних машин і контейнерів "
"слід пройти розпізнавання."
"Потрібна автентифікація, щоб керувати локальними образами віртуальних машин "
"і контейнерів."
#: src/network/org.freedesktop.network1.policy:22
msgid "Set NTP servers"
@ -679,7 +666,7 @@ msgstr "Встановлення серверів NTP"
#: src/network/org.freedesktop.network1.policy:23
msgid "Authentication is required to set NTP servers."
msgstr "Для встановлення серверів NTP слід пройти розпізнавання."
msgstr "Потрібна автентифікація, щоб встановити сервери NTP."
#: src/network/org.freedesktop.network1.policy:33
#: src/resolve/org.freedesktop.resolve1.policy:44
@ -689,7 +676,7 @@ msgstr "Встановлення серверів DNS"
#: src/network/org.freedesktop.network1.policy:34
#: src/resolve/org.freedesktop.resolve1.policy:45
msgid "Authentication is required to set DNS servers."
msgstr "Для встановлення серверів DNS слід пройти розпізнавання."
msgstr "Потрібна автентифікація, щоб встановити сервери DNS."
#: src/network/org.freedesktop.network1.policy:44
#: src/resolve/org.freedesktop.resolve1.policy:55
@ -699,7 +686,7 @@ msgstr "Встановлення доменів"
#: src/network/org.freedesktop.network1.policy:45
#: src/resolve/org.freedesktop.resolve1.policy:56
msgid "Authentication is required to set domains."
msgstr "Для встановлення доменів слід пройти розпізнавання."
msgstr "Потрібна автентифікація, щоб встановити домени."
#: src/network/org.freedesktop.network1.policy:55
#: src/resolve/org.freedesktop.resolve1.policy:66
@ -709,7 +696,7 @@ msgstr "Встановлення типового маршруту"
#: src/network/org.freedesktop.network1.policy:56
#: src/resolve/org.freedesktop.resolve1.policy:67
msgid "Authentication is required to set default route."
msgstr "Для встановлення типового маршруту слід пройти розпізнавання."
msgstr "Потрібна автентифікація, щоб встановити типовий маршрут."
#: src/network/org.freedesktop.network1.policy:66
#: src/resolve/org.freedesktop.resolve1.policy:77
@ -719,17 +706,17 @@ msgstr "Вмикання або вимикання LLMNR"
#: src/network/org.freedesktop.network1.policy:67
#: src/resolve/org.freedesktop.resolve1.policy:78
msgid "Authentication is required to enable or disable LLMNR."
msgstr "Для вмикання або вимикання LLMNR слід пройти розпізнавання."
msgstr "Потрібна автентифікація, щоб увімкнути або вимкнути LLMNR."
#: src/network/org.freedesktop.network1.policy:77
#: src/resolve/org.freedesktop.resolve1.policy:88
msgid "Enable/disable multicast DNS"
msgstr "Вмикання або вимикання трансляційної DNS"
msgstr "Вмикання або вимикання трансляційного DNS"
#: src/network/org.freedesktop.network1.policy:78
#: src/resolve/org.freedesktop.resolve1.policy:89
msgid "Authentication is required to enable or disable multicast DNS."
msgstr "Для вмикання або вимикання трансляційної DNS слід пройти розпізнавання."
msgstr "Потрібна автентифікація, щоб увімкнути або вимкнути трансляційну DNS."
#: src/network/org.freedesktop.network1.policy:88
#: src/resolve/org.freedesktop.resolve1.policy:99
@ -739,7 +726,7 @@ msgstr "Вмикання і вимикання DNS через TLS"
#: src/network/org.freedesktop.network1.policy:89
#: src/resolve/org.freedesktop.resolve1.policy:100
msgid "Authentication is required to enable or disable DNS over TLS."
msgstr "Для вмикання або вимикання DNS через TLS слід пройти розпізнавання."
msgstr "Потрібна автентифікація, щоб увімкнути або вимкнути DNS через TLS."
#: src/network/org.freedesktop.network1.policy:99
#: src/resolve/org.freedesktop.resolve1.policy:110
@ -749,7 +736,7 @@ msgstr "Вмикання або вимикання DNSSEC"
#: src/network/org.freedesktop.network1.policy:100
#: src/resolve/org.freedesktop.resolve1.policy:111
msgid "Authentication is required to enable or disable DNSSEC."
msgstr "Для вмикання або вимикання DNSSEC слід пройти розпізнавання."
msgstr "Потрібна автентифікація, щоб увімкнути або вимкнути DNSSEC."
#: src/network/org.freedesktop.network1.policy:110
#: src/resolve/org.freedesktop.resolve1.policy:121
@ -760,7 +747,7 @@ msgstr "Встановлення прив'язок від'ємної довір
#: src/resolve/org.freedesktop.resolve1.policy:122
msgid "Authentication is required to set DNSSEC Negative Trust Anchors."
msgstr ""
"Для встановлення прив'язки від'ємної довіри DNSSEC слід пройти розпізнавання."
"Потрібна автентифікація, щоб встановити прив'язки від'ємної довіри DNSSEC."
#: src/network/org.freedesktop.network1.policy:121
msgid "Revert NTP settings"
@ -785,8 +772,8 @@ msgstr "Сервер DHCP надсилає повідомлення щодо п
#: src/network/org.freedesktop.network1.policy:144
msgid "Authentication is required to send force renew message."
msgstr ""
"Для надсилання повідомлення щодо примусового оновлення слід пройти "
"розпізнавання."
"Потрібна автентифікація, щоб надіслати повідомлення щодо примусового "
"оновлення"
#: src/network/org.freedesktop.network1.policy:154
msgid "Renew dynamic addresses"
@ -818,7 +805,7 @@ msgstr "Інспектування образу портативної служ
#: src/portable/org.freedesktop.portable1.policy:14
msgid "Authentication is required to inspect a portable service image."
msgstr "Для інспектування образу портативної служби слід пройти розпізнавання."
msgstr "Потрібна автентифікація, щоб інспектувати образ портативної служби."
#: src/portable/org.freedesktop.portable1.policy:23
msgid "Attach or detach a portable service image"
@ -828,8 +815,7 @@ msgstr "Долучення або вилучення образу портати
msgid ""
"Authentication is required to attach or detach a portable service image."
msgstr ""
"Для долучення або вилучення образу портативної служби слід пройти "
"розпізнавання."
"Потрібна автентифікація, щоб долучити або вилучити образ портативної служби."
#: src/portable/org.freedesktop.portable1.policy:34
msgid "Delete or modify portable service image"
@ -839,24 +825,24 @@ msgstr "Вилучення або внесення змін до образу п
msgid ""
"Authentication is required to delete or modify a portable service image."
msgstr ""
"Для вилучення образу портативної служби або внесення до нього змін слід "
"пройти розпізнавання."
"Потрібна автентифікація, щоб вилучити образ портативної служби або внести до "
"нього зміни."
#: src/resolve/org.freedesktop.resolve1.policy:22
msgid "Register a DNS-SD service"
msgstr "Реєстрація служби DNS-SD"
msgstr "Зареєструвати службу DNS-SD"
#: src/resolve/org.freedesktop.resolve1.policy:23
msgid "Authentication is required to register a DNS-SD service"
msgstr "Для реєстрації служби DNS-SD слід пройти розпізнавання"
msgstr "Потрібна автентифікація, щоб зареєструвати службу DNS-SD"
#: src/resolve/org.freedesktop.resolve1.policy:33
msgid "Unregister a DNS-SD service"
msgstr "Зняття з реєстрації служби DNS-SD"
msgstr "Зняти з реєстрації службу DNS-SD"
#: src/resolve/org.freedesktop.resolve1.policy:34
msgid "Authentication is required to unregister a DNS-SD service"
msgstr "Для зняття з реєстрації служби DNS-SD слід пройти розпізнавання"
msgstr "Потрібна автентифікація, щоб зняти з реєстрації службу DNS-SD"
#: src/resolve/org.freedesktop.resolve1.policy:132
msgid "Revert name resolution settings"
@ -870,88 +856,89 @@ msgstr ""
#: src/timedate/org.freedesktop.timedate1.policy:22
msgid "Set system time"
msgstr "Встановлення загальносистемного часу"
msgstr "Вказати системний час"
#: src/timedate/org.freedesktop.timedate1.policy:23
msgid "Authentication is required to set the system time."
msgstr "Для встановлення загальносистемного часу слід пройти розпізнавання."
msgstr "Потрібна автентифікація, щоб вказати системний час."
#: src/timedate/org.freedesktop.timedate1.policy:33
msgid "Set system timezone"
msgstr "Встановлення загальносистемного часового поясу"
msgstr "Вказати системний часовий пояс"
#: src/timedate/org.freedesktop.timedate1.policy:34
msgid "Authentication is required to set the system timezone."
msgstr ""
"Для встановлення загальносистемного часового поясу слід пройти розпізнавання."
msgstr "Потрібна автентифікація, щоб вказати системний часовий пояс."
#: src/timedate/org.freedesktop.timedate1.policy:43
msgid "Set RTC to local timezone or UTC"
msgstr "Встановлення для RTC місцевого часового поясу або UTC"
msgstr "Вкажіть RTC для локального часового поясу або UTC"
#: src/timedate/org.freedesktop.timedate1.policy:44
msgid ""
"Authentication is required to control whether the RTC stores the local or "
"UTC time."
msgstr ""
"Для керування тим, зберігатиме годинник реального часу локальний час чи час "
"UTC, слід пройти розпізнавання."
"Потрібна автентифікація, щоб контролювати, чи зберігає RTC локальний час або "
"UTC."
#: src/timedate/org.freedesktop.timedate1.policy:53
msgid "Turn network time synchronization on or off"
msgstr "Вмикання або вимикання синхронізації часу за допомогою мережі"
msgstr "Увімкнути або вимкнути синхронізування часу через мережу"
#: src/timedate/org.freedesktop.timedate1.policy:54
msgid ""
"Authentication is required to control whether network time synchronization "
"shall be enabled."
msgstr ""
"Для керування тим, чи слід вмикати синхронізацію часу за допомогою мережі, "
"слід пройти розпізнавання."
"Потрібна автентифікація, щоб контролювати, чи синхронізування часу через "
"мережу запущено."
#: src/core/dbus-unit.c:362
msgid "Authentication is required to start '$(unit)'."
msgstr "Для запуску «$(unit)» слід пройти розпізнавання."
msgstr "Потрібна автентифікація, щоб запустити «$(unit)»."
#: src/core/dbus-unit.c:363
msgid "Authentication is required to stop '$(unit)'."
msgstr "Для зупинення «$(unit)» слід пройти розпізнавання."
msgstr "Потрібна автентифікація, щоб зупинити «$(unit)»."
#: src/core/dbus-unit.c:364
msgid "Authentication is required to reload '$(unit)'."
msgstr "Для перезавантаження «$(unit)» слід пройти розпізнавання."
msgstr "Потрібна автентифікація, щоб перезавантажити «$(unit)»."
#: src/core/dbus-unit.c:365 src/core/dbus-unit.c:366
msgid "Authentication is required to restart '$(unit)'."
msgstr "Для перезапуску «$(unit)» слід пройти розпізнавання."
msgstr "Потрібна автентифікація, щоб перезапустити «$(unit)»."
#: src/core/dbus-unit.c:538
msgid ""
"Authentication is required to send a UNIX signal to the processes of "
"'$(unit)'."
msgstr ""
"Для надсилання сигналу UNIX до процесів «$(unit)» слід пройти розпізнавання."
"Потрібна автентифікація, щоб надіслати сигнал UNIX до процесів «$(unit)»."
#: src/core/dbus-unit.c:569
msgid "Authentication is required to reset the \"failed\" state of '$(unit)'."
msgstr ""
"Для скидання «пошкодженого» стану з «$(unit)» слід пройти розпізнавання."
msgstr "Потрібна автентифікація, щоб скинути «пошкоджений» стан з «$(unit)»."
#: src/core/dbus-unit.c:602
msgid "Authentication is required to set properties on '$(unit)'."
msgstr "Для визначення властивостей на «$(unit)» слід пройти розпізнавання."
msgstr "Потрібна автентифікація, щоб вказати властивості на «$(unit)»."
#: src/core/dbus-unit.c:711
msgid ""
"Authentication is required to delete files and directories associated with "
"'$(unit)'."
msgstr ""
"Для вилучення файлів і каталогів, які пов'язано із «$(unit)», слід пройти "
"розпізнавання."
"Потрібна автентифікація, щоб вилучити файли і каталоги, які пов'язано із "
"«$(unit)»."
#: src/core/dbus-unit.c:760
#, fuzzy
#| msgid ""
#| "Authentication is required to send a UNIX signal to the processes of "
#| "'$(unit)'."
msgid ""
"Authentication is required to freeze or thaw the processes of '$(unit)' unit."
msgstr ""
"Для замороження або розмороження процесів модуля «$(unit)» слід пройти "
"розпізнавання."
"Потрібна автентифікація, щоб надіслати сигнал UNIX до процесів «$(unit)»."

View File

@ -736,10 +736,6 @@ static bool device_is_ready(sd_device *dev) {
if (device_is_renaming(dev) > 0)
return false;
/* Is it really tagged as 'systemd' right now? */
if (sd_device_has_current_tag(dev, "systemd") <= 0)
return false;
if (sd_device_get_property_value(dev, "SYSTEMD_READY", &ready) < 0)
return true;

View File

@ -77,7 +77,7 @@ enum {
META_ARGV_UID, /* %u: as seen in the initial user namespace */
META_ARGV_GID, /* %g: as seen in the initial user namespace */
META_ARGV_SIGNAL, /* %s: number of signal causing dump */
META_ARGV_TIMESTAMP, /* %t: time of dump, expressed as seconds since the Epoch (we expand this to µs granularity) */
META_ARGV_TIMESTAMP, /* %t: time of dump, expressed as seconds since the Epoch */
META_ARGV_RLIMIT, /* %c: core file size soft resource limit */
META_ARGV_HOSTNAME, /* %h: hostname */
_META_ARGV_MAX,
@ -311,7 +311,7 @@ static int make_filename(const Context *context, char **ret) {
return -ENOMEM;
if (asprintf(ret,
"/var/lib/systemd/coredump/core.%s.%s." SD_ID128_FORMAT_STR ".%s.%s",
"/var/lib/systemd/coredump/core.%s.%s." SD_ID128_FORMAT_STR ".%s.%s000000",
c,
u,
SD_ID128_FORMAT_VAL(boot),
@ -1016,11 +1016,8 @@ static int send_iovec(const struct iovec_wrapper *iovw, int input_fd) {
return 0;
}
static int gather_pid_metadata_from_argv(
struct iovec_wrapper *iovw,
Context *context,
static int gather_pid_metadata_from_argv(struct iovec_wrapper *iovw, Context *context,
int argc, char **argv) {
_cleanup_free_ char *free_timestamp = NULL;
int i, r, signo;
char *t;
@ -1038,7 +1035,6 @@ static int gather_pid_metadata_from_argv(
t = argv[i];
switch (i) {
case META_ARGV_TIMESTAMP:
/* The journal fields contain the timestamp padded with six
* zeroes, so that the kernel-supplied 1s granularity timestamps
@ -1048,14 +1044,12 @@ static int gather_pid_metadata_from_argv(
if (!t)
return log_oom();
break;
case META_ARGV_SIGNAL:
/* For signal, record its pretty name too */
if (safe_atoi(argv[i], &signo) >= 0 && SIGNAL_VALID(signo))
(void) iovw_put_string_field(iovw, "COREDUMP_SIGNAL_NAME=SIG",
signal_to_string(signo));
break;
default:
break;
}

View File

@ -93,7 +93,7 @@ static bool press_any_key(void) {
static void print_welcome(void) {
_cleanup_free_ char *pretty_name = NULL, *ansi_color = NULL;
static bool done = false;
const char *pn, *ac;
const char *pn;
int r;
if (!arg_welcome)
@ -112,10 +112,9 @@ static void print_welcome(void) {
"Failed to read os-release file, ignoring: %m");
pn = isempty(pretty_name) ? "Linux" : pretty_name;
ac = isempty(ansi_color) ? "0" : ansi_color;
if (colors_enabled())
printf("\nWelcome to your new installation of \x1B[%sm%s\x1B[0m!\n", ac, pn);
printf("\nWelcome to your new installation of \x1B[%sm%s\x1B[0m!\n", ansi_color, pn);
else
printf("\nWelcome to your new installation of %s!\n", pn);

View File

@ -81,7 +81,6 @@ int import_fork_tar_x(const char *path, pid_t *ret) {
if (r == 0) {
const char *cmdline[] = {
"tar",
"--ignore-zeros",
"--numeric-owner",
"-C", path,
"-px",

View File

@ -728,8 +728,4 @@ global:
sd_event_source_set_time_relative;
sd_bus_error_has_names_sentinel;
sd_device_get_current_tag_first;
sd_device_get_current_tag_next;
sd_device_has_current_tag;
} LIBSYSTEMD_246;

View File

@ -28,10 +28,10 @@ struct sd_device {
Set *sysattrs; /* names of sysattrs */
Iterator sysattrs_iterator;
Set *all_tags, *current_tags;
Iterator all_tags_iterator, current_tags_iterator;
uint64_t all_tags_iterator_generation, current_tags_iterator_generation; /* generation when iteration was started */
Set *tags;
Iterator tags_iterator;
uint64_t tags_generation; /* changes whenever the tags are changed */
uint64_t tags_iterator_generation; /* generation when iteration was started */
Set *devlinks;
Iterator devlinks_iterator;
@ -71,7 +71,7 @@ struct sd_device {
bool parent_set:1; /* no need to try to reload parent */
bool sysattrs_read:1; /* don't try to re-read sysattrs once read */
bool property_tags_outdated:1; /* need to update TAGS= or CURRENT_TAGS= property */
bool property_tags_outdated:1; /* need to update TAGS= property */
bool property_devlinks_outdated:1; /* need to update DEVLINKS= property */
bool properties_buf_outdated:1; /* need to reread hashmap */
bool sysname_set:1; /* don't reread sysname */

View File

@ -329,7 +329,7 @@ static int device_amend(sd_device *device, const char *key, const char *value) {
if (r < 0)
return log_device_debug_errno(device, r, "sd-device: Failed to add devlink '%s': %m", devlink);
}
} else if (STR_IN_SET(key, "TAGS", "CURRENT_TAGS")) {
} else if (streq(key, "TAGS")) {
const char *word, *state;
size_t l;
@ -339,11 +339,10 @@ static int device_amend(sd_device *device, const char *key, const char *value) {
(void) strncpy(tag, word, l);
tag[l] = '\0';
r = device_add_tag(device, tag, streq(key, "CURRENT_TAGS"));
r = device_add_tag(device, tag);
if (r < 0)
return log_device_debug_errno(device, r, "sd-device: Failed to add tag '%s': %m", tag);
}
} else {
r = device_add_property_internal(device, key, value);
if (r < 0)
@ -760,8 +759,8 @@ int device_copy_properties(sd_device *device_dst, sd_device *device_src) {
void device_cleanup_tags(sd_device *device) {
assert(device);
device->all_tags = set_free_free(device->all_tags);
device->current_tags = set_free_free(device->current_tags);
set_free_free(device->tags);
device->tags = NULL;
device->property_tags_outdated = true;
device->tags_generation++;
}
@ -779,7 +778,7 @@ void device_remove_tag(sd_device *device, const char *tag) {
assert(device);
assert(tag);
free(set_remove(device->current_tags, tag));
free(set_remove(device->tags, tag));
device->property_tags_outdated = true;
device->tags_generation++;
}
@ -847,10 +846,7 @@ static bool device_has_info(sd_device *device) {
if (!ordered_hashmap_isempty(device->properties_db))
return true;
if (!set_isempty(device->all_tags))
return true;
if (!set_isempty(device->current_tags))
if (!set_isempty(device->tags))
return true;
if (device->watch_handle >= 0)
@ -943,10 +939,7 @@ int device_update_db(sd_device *device) {
fprintf(f, "E:%s=%s\n", property, value);
FOREACH_DEVICE_TAG(device, tag)
fprintf(f, "G:%s\n", tag); /* Any tag */
SET_FOREACH(tag, device->current_tags, i)
fprintf(f, "Q:%s\n", tag); /* Current tag */
fprintf(f, "G:%s\n", tag);
}
r = fflush_and_check(f);

View File

@ -45,7 +45,7 @@ void device_set_devlink_priority(sd_device *device, int priority);
int device_ensure_usec_initialized(sd_device *device, sd_device *device_old);
int device_add_devlink(sd_device *device, const char *devlink);
int device_add_property(sd_device *device, const char *property, const char *value);
int device_add_tag(sd_device *device, const char *tag, bool both);
int device_add_tag(sd_device *device, const char *tag);
void device_remove_tag(sd_device *device, const char *tag);
void device_cleanup_tags(sd_device *device);
void device_cleanup_devlinks(sd_device *device);

View File

@ -11,11 +11,6 @@
tag; \
tag = sd_device_get_tag_next(device))
#define FOREACH_DEVICE_CURRENT_TAG(device, tag) \
for (tag = sd_device_get_current_tag_first(device); \
tag; \
tag = sd_device_get_current_tag_next(device))
#define FOREACH_DEVICE_SYSATTR(device, attr) \
for (attr = sd_device_get_sysattr_first(device); \
attr; \

View File

@ -69,8 +69,7 @@ static sd_device *device_free(sd_device *device) {
ordered_hashmap_free_free_free(device->properties_db);
hashmap_free_free_free(device->sysattr_values);
set_free(device->sysattrs);
set_free(device->all_tags);
set_free(device->current_tags);
set_free(device->tags);
set_free(device->devlinks);
return mfree(device);
@ -1063,8 +1062,8 @@ static bool is_valid_tag(const char *tag) {
return !strchr(tag, ':') && !strchr(tag, ' ');
}
int device_add_tag(sd_device *device, const char *tag, bool both) {
int r, added;
int device_add_tag(sd_device *device, const char *tag) {
int r;
assert(device);
assert(tag);
@ -1072,21 +1071,9 @@ int device_add_tag(sd_device *device, const char *tag, bool both) {
if (!is_valid_tag(tag))
return -EINVAL;
/* Definitely add to the "all" list of tags (i.e. the sticky list) */
added = set_put_strdup(&device->all_tags, tag);
if (added < 0)
return added;
/* And optionally, also add it to the current list of tags */
if (both) {
r = set_put_strdup(&device->current_tags, tag);
if (r < 0) {
if (added > 0)
(void) set_remove(device->all_tags, tag);
r = set_put_strdup(&device->tags, tag);
if (r < 0)
return r;
}
}
device->tags_generation++;
device->property_tags_outdated = true;
@ -1164,9 +1151,8 @@ static int handle_db_line(sd_device *device, char key, const char *value) {
assert(value);
switch (key) {
case 'G': /* Any tag */
case 'Q': /* Current tag */
r = device_add_tag(device, value, key == 'Q');
case 'G':
r = device_add_tag(device, value);
if (r < 0)
return r;
@ -1421,10 +1407,10 @@ _public_ const char *sd_device_get_tag_first(sd_device *device) {
(void) device_read_db(device);
device->all_tags_iterator_generation = device->tags_generation;
device->all_tags_iterator = ITERATOR_FIRST;
device->tags_iterator_generation = device->tags_generation;
device->tags_iterator = ITERATOR_FIRST;
(void) set_iterate(device->all_tags, &device->all_tags_iterator, &v);
(void) set_iterate(device->tags, &device->tags_iterator, &v);
return v;
}
@ -1435,38 +1421,10 @@ _public_ const char *sd_device_get_tag_next(sd_device *device) {
(void) device_read_db(device);
if (device->all_tags_iterator_generation != device->tags_generation)
if (device->tags_iterator_generation != device->tags_generation)
return NULL;
(void) set_iterate(device->all_tags, &device->all_tags_iterator, &v);
return v;
}
_public_ const char *sd_device_get_current_tag_first(sd_device *device) {
void *v;
assert_return(device, NULL);
(void) device_read_db(device);
device->current_tags_iterator_generation = device->tags_generation;
device->current_tags_iterator = ITERATOR_FIRST;
(void) set_iterate(device->current_tags, &device->current_tags_iterator, &v);
return v;
}
_public_ const char *sd_device_get_current_tag_next(sd_device *device) {
void *v;
assert_return(device, NULL);
(void) device_read_db(device);
if (device->current_tags_iterator_generation != device->tags_generation)
return NULL;
(void) set_iterate(device->current_tags, &device->current_tags_iterator, &v);
(void) set_iterate(device->tags, &device->tags_iterator, &v);
return v;
}
@ -1498,31 +1456,6 @@ _public_ const char *sd_device_get_devlink_next(sd_device *device) {
return v;
}
static char *join_string_set(Set *s) {
size_t ret_allocated = 0, ret_len;
_cleanup_free_ char *ret = NULL;
const char *tag;
Iterator i;
if (!GREEDY_REALLOC(ret, ret_allocated, 2))
return NULL;
strcpy(ret, ":");
ret_len = 1;
SET_FOREACH(tag, s, i) {
char *e;
if (!GREEDY_REALLOC(ret, ret_allocated, ret_len + strlen(tag) + 2))
return NULL;
e = stpcpy(stpcpy(ret + ret_len, tag), ":");
ret_len = e - ret;
}
return TAKE_PTR(ret);
}
int device_properties_prepare(sd_device *device) {
int r;
@ -1561,27 +1494,26 @@ int device_properties_prepare(sd_device *device) {
if (device->property_tags_outdated) {
_cleanup_free_ char *tags = NULL;
size_t tags_allocated = 0, tags_len = 0;
const char *tag;
tags = join_string_set(device->all_tags);
if (!tags)
if (!GREEDY_REALLOC(tags, tags_allocated, 2))
return -ENOMEM;
stpcpy(tags, ":");
tags_len++;
for (tag = sd_device_get_tag_first(device); tag; tag = sd_device_get_tag_next(device)) {
char *e;
if (!GREEDY_REALLOC(tags, tags_allocated, tags_len + strlen(tag) + 2))
return -ENOMEM;
e = stpcpy(stpcpy(tags + tags_len, tag), ":");
tags_len = e - tags;
}
if (!streq(tags, ":")) {
r = device_add_property_internal(device, "TAGS", tags);
if (r < 0)
return r;
}
free(tags);
tags = join_string_set(device->current_tags);
if (!tags)
return -ENOMEM;
if (!streq(tags, ":")) {
r = device_add_property_internal(device, "CURRENT_TAGS", tags);
if (r < 0)
return r;
}
device->property_tags_outdated = false;
}
@ -1757,16 +1689,7 @@ _public_ int sd_device_has_tag(sd_device *device, const char *tag) {
(void) device_read_db(device);
return set_contains(device->all_tags, tag);
}
_public_ int sd_device_has_current_tag(sd_device *device, const char *tag) {
assert_return(device, -EINVAL);
assert_return(tag, -EINVAL);
(void) device_read_db(device);
return set_contains(device->current_tags, tag);
return !!set_contains(device->tags, tag);
}
_public_ int sd_device_get_property_value(sd_device *device, const char *key, const char **_value) {

View File

@ -56,13 +56,12 @@ struct udev_device {
struct udev_list *properties;
uint64_t properties_generation;
struct udev_list *all_tags, *current_tags;
uint64_t all_tags_generation, current_tags_generation;
struct udev_list *tags;
uint64_t tags_generation;
struct udev_list *devlinks;
uint64_t devlinks_generation;
bool properties_read:1;
bool all_tags_read:1;
bool current_tags_read:1;
bool tags_read:1;
bool devlinks_read:1;
struct udev_list *sysattrs;
bool sysattrs_read;
@ -200,7 +199,7 @@ _public_ const char *udev_device_get_property_value(struct udev_device *udev_dev
}
struct udev_device *udev_device_new(struct udev *udev, sd_device *device) {
_cleanup_(udev_list_freep) struct udev_list *properties = NULL, *all_tags = NULL, *current_tags = NULL, *sysattrs = NULL, *devlinks = NULL;
_cleanup_(udev_list_freep) struct udev_list *properties = NULL, *tags = NULL, *sysattrs = NULL, *devlinks = NULL;
struct udev_device *udev_device;
assert(device);
@ -208,11 +207,8 @@ struct udev_device *udev_device_new(struct udev *udev, sd_device *device) {
properties = udev_list_new(true);
if (!properties)
return_with_errno(NULL, ENOMEM);
all_tags = udev_list_new(true);
if (!all_tags)
return_with_errno(NULL, ENOMEM);
current_tags = udev_list_new(true);
if (!current_tags)
tags = udev_list_new(true);
if (!tags)
return_with_errno(NULL, ENOMEM);
sysattrs = udev_list_new(true);
if (!sysattrs)
@ -230,8 +226,7 @@ struct udev_device *udev_device_new(struct udev *udev, sd_device *device) {
.udev = udev,
.device = sd_device_ref(device),
.properties = TAKE_PTR(properties),
.all_tags = TAKE_PTR(all_tags),
.current_tags = TAKE_PTR(current_tags),
.tags = TAKE_PTR(tags),
.sysattrs = TAKE_PTR(sysattrs),
.devlinks = TAKE_PTR(devlinks),
};
@ -480,8 +475,7 @@ static struct udev_device *udev_device_free(struct udev_device *udev_device) {
udev_list_free(udev_device->properties);
udev_list_free(udev_device->sysattrs);
udev_list_free(udev_device->all_tags);
udev_list_free(udev_device->current_tags);
udev_list_free(udev_device->tags);
udev_list_free(udev_device->devlinks);
return mfree(udev_device);
@ -840,41 +834,21 @@ _public_ int udev_device_get_is_initialized(struct udev_device *udev_device) {
_public_ struct udev_list_entry *udev_device_get_tags_list_entry(struct udev_device *udev_device) {
assert_return_errno(udev_device, NULL, EINVAL);
if (device_get_tags_generation(udev_device->device) != udev_device->all_tags_generation ||
!udev_device->all_tags_read) {
if (device_get_tags_generation(udev_device->device) != udev_device->tags_generation ||
!udev_device->tags_read) {
const char *tag;
udev_list_cleanup(udev_device->all_tags);
udev_list_cleanup(udev_device->tags);
FOREACH_DEVICE_TAG(udev_device->device, tag)
if (!udev_list_entry_add(udev_device->all_tags, tag, NULL))
if (!udev_list_entry_add(udev_device->tags, tag, NULL))
return_with_errno(NULL, ENOMEM);
udev_device->all_tags_read = true;
udev_device->all_tags_generation = device_get_tags_generation(udev_device->device);
udev_device->tags_read = true;
udev_device->tags_generation = device_get_tags_generation(udev_device->device);
}
return udev_list_get_entry(udev_device->all_tags);
}
_public_ struct udev_list_entry *udev_device_get_current_tags_list_entry(struct udev_device *udev_device) {
assert_return_errno(udev_device, NULL, EINVAL);
if (device_get_tags_generation(udev_device->device) != udev_device->current_tags_generation ||
!udev_device->current_tags_read) {
const char *tag;
udev_list_cleanup(udev_device->current_tags);
FOREACH_DEVICE_CURRENT_TAG(udev_device->device, tag)
if (!udev_list_entry_add(udev_device->current_tags, tag, NULL))
return_with_errno(NULL, ENOMEM);
udev_device->current_tags_read = true;
udev_device->current_tags_generation = device_get_tags_generation(udev_device->device);
}
return udev_list_get_entry(udev_device->current_tags);
return udev_list_get_entry(udev_device->tags);
}
/**
@ -892,12 +866,6 @@ _public_ int udev_device_has_tag(struct udev_device *udev_device, const char *ta
return sd_device_has_tag(udev_device->device, tag) > 0;
}
_public_ int udev_device_has_current_tag(struct udev_device *udev_device, const char *tag) {
assert_return(udev_device, 0);
return sd_device_has_current_tag(udev_device->device, tag) > 0;
}
sd_device *udev_device_get_sd_device(struct udev_device *udev_device) {
assert(udev_device);

View File

@ -82,7 +82,6 @@ int udev_device_get_is_initialized(struct udev_device *udev_device);
struct udev_list_entry *udev_device_get_devlinks_list_entry(struct udev_device *udev_device);
struct udev_list_entry *udev_device_get_properties_list_entry(struct udev_device *udev_device);
struct udev_list_entry *udev_device_get_tags_list_entry(struct udev_device *udev_device);
struct udev_list_entry *udev_device_get_current_tags_list_entry(struct udev_device *udev_device);
struct udev_list_entry *udev_device_get_sysattr_list_entry(struct udev_device *udev_device);
const char *udev_device_get_property_value(struct udev_device *udev_device, const char *key);
const char *udev_device_get_driver(struct udev_device *udev_device);
@ -93,7 +92,6 @@ unsigned long long int udev_device_get_usec_since_initialized(struct udev_device
const char *udev_device_get_sysattr_value(struct udev_device *udev_device, const char *sysattr);
int udev_device_set_sysattr_value(struct udev_device *udev_device, const char *sysattr, const char *value);
int udev_device_has_tag(struct udev_device *udev_device, const char *tag);
int udev_device_has_current_tag(struct udev_device *udev_device, const char *tag);
/*
* udev_monitor

View File

@ -118,9 +118,3 @@ global:
udev_queue_flush;
udev_queue_get_fd;
} LIBUDEV_199;
LIBUDEV_247 {
global:
udev_device_has_current_tag;
udev_device_get_current_tags_list_entry;
} LIBUDEV_215;

View File

@ -195,10 +195,6 @@ int devnode_acl_all(const char *seat,
FOREACH_DEVICE(e, d) {
const char *node, *sn;
/* Make sure the tag is still in place */
if (sd_device_has_current_tag(d, "uaccess") <= 0)
continue;
if (sd_device_get_property_value(d, "ID_SEAT", &sn) < 0 || isempty(sn))
sn = "seat0";

View File

@ -243,8 +243,7 @@ int manager_process_seat_device(Manager *m, sd_device *d) {
assert(m);
if (device_for_action(d, DEVICE_ACTION_REMOVE) ||
sd_device_has_current_tag(d, "seat") <= 0) {
if (device_for_action(d, DEVICE_ACTION_REMOVE)) {
const char *syspath;
r = sd_device_get_syspath(d, &syspath);
@ -272,7 +271,7 @@ int manager_process_seat_device(Manager *m, sd_device *d) {
}
seat = hashmap_get(m->seats, sn);
master = sd_device_has_current_tag(d, "master-of-seat") > 0;
master = sd_device_has_tag(d, "master-of-seat") > 0;
/* Ignore non-master devices for unknown seats */
if (!master && !seat)
@ -314,8 +313,7 @@ int manager_process_button_device(Manager *m, sd_device *d) {
if (r < 0)
return r;
if (device_for_action(d, DEVICE_ACTION_REMOVE) ||
sd_device_has_current_tag(d, "power-switch") <= 0) {
if (device_for_action(d, DEVICE_ACTION_REMOVE)) {
b = hashmap_get(m->buttons, sysname);
if (!b)

View File

@ -1361,7 +1361,7 @@ static int attach_device(Manager *m, const char *seat, const char *sysfs) {
if (r < 0)
return r;
if (sd_device_has_current_tag(d, "seat") <= 0)
if (sd_device_has_tag(d, "seat") <= 0)
return -ENODEV;
if (sd_device_get_property_value(d, "ID_FOR_SEAT", &id_for_seat) < 0)

View File

@ -53,14 +53,14 @@ static int show_sysfs_one(
/* Explicitly also check for tag 'seat' here */
if (!streq(seat, sn) ||
sd_device_has_current_tag(dev_list[*i_dev], "seat") <= 0 ||
sd_device_has_tag(dev_list[*i_dev], "seat") <= 0 ||
sd_device_get_subsystem(dev_list[*i_dev], &subsystem) < 0 ||
sd_device_get_sysname(dev_list[*i_dev], &sysname) < 0) {
(*i_dev)++;
continue;
}
is_master = sd_device_has_current_tag(dev_list[*i_dev], "master-of-seat") > 0;
is_master = sd_device_has_tag(dev_list[*i_dev], "master-of-seat") > 0;
if (sd_device_get_sysattr_value(dev_list[*i_dev], "name", &name) < 0)
(void) sd_device_get_sysattr_value(dev_list[*i_dev], "id", &name);
@ -80,7 +80,7 @@ static int show_sysfs_one(
isempty(lookahead_sn))
lookahead_sn = "seat0";
if (streq(seat, lookahead_sn) && sd_device_has_current_tag(dev_list[lookahead], "seat") > 0)
if (streq(seat, lookahead_sn) && sd_device_has_tag(dev_list[lookahead], "seat") > 0)
break;
}
}

View File

@ -809,8 +809,6 @@ static const char *const resolv_conf_mode_table[_RESOLV_CONF_MODE_MAX] = {
DEFINE_STRING_TABLE_LOOKUP_WITH_BOOLEAN(resolv_conf_mode, ResolvConfMode, RESOLV_CONF_AUTO);
int parse_link_journal(const char *s, LinkJournal *ret_mode, bool *ret_try) {
int r;
assert(s);
assert(ret_mode);
assert(ret_try);
@ -818,6 +816,9 @@ int parse_link_journal(const char *s, LinkJournal *ret_mode, bool *ret_try) {
if (streq(s, "auto")) {
*ret_mode = LINK_AUTO;
*ret_try = false;
} else if (streq(s, "no")) {
*ret_mode = LINK_NO;
*ret_try = false;
} else if (streq(s, "guest")) {
*ret_mode = LINK_GUEST;
*ret_try = false;
@ -830,16 +831,8 @@ int parse_link_journal(const char *s, LinkJournal *ret_mode, bool *ret_try) {
} else if (streq(s, "try-host")) {
*ret_mode = LINK_HOST;
*ret_try = true;
} else {
/* Also support boolean values, to make things less confusing. */
r = parse_boolean(s);
if (r < 0)
return r;
/* Let's consider "true" to be equivalent to "auto". */
*ret_mode = r ? LINK_AUTO : LINK_NO;
*ret_try = false;
}
} else
return -EINVAL;
return 0;
}

View File

@ -7313,30 +7313,19 @@ static int create_edit_temp_file(const char *new_path, const char *original_path
if (r < 0)
return log_error_errno(r, "Failed to determine temporary filename for \"%s\": %m", new_path);
r = mkdir_parents_label(new_path, 0755);
r = mkdir_parents(new_path, 0755);
if (r < 0)
return log_error_errno(r, "Failed to create directories for \"%s\": %m", new_path);
r = mac_selinux_create_file_prepare(original_path, S_IFREG);
if (r < 0)
return r;
r = copy_file(original_path, t, 0, 0644, 0, 0, COPY_REFLINK);
if (r == -ENOENT) {
r = touch(t);
mac_selinux_create_file_clear();
if (r < 0)
return log_error_errno(r, "Failed to create temporary file \"%s\": %m", t);
} else {
mac_selinux_create_file_clear();
if (r < 0)
} else if (r < 0)
return log_error_errno(r, "Failed to create temporary file for \"%s\": %m", new_path);
}
*ret_tmp_fn = TAKE_PTR(t);
@ -7615,10 +7604,6 @@ static int edit(int argc, char *argv[], void *userdata) {
if (r < 0)
return log_error_errno(r, "Failed to determine unit paths: %m");
r = mac_selinux_init();
if (r < 0)
return r;
r = acquire_bus(BUS_MANAGER, &bus);
if (r < 0)
return r;

View File

@ -64,8 +64,6 @@ int sd_device_get_usec_since_initialized(sd_device *device, uint64_t *usec);
const char *sd_device_get_tag_first(sd_device *device);
const char *sd_device_get_tag_next(sd_device *device);
const char *sd_device_get_current_tag_first(sd_device *device);
const char *sd_device_get_current_tag_next(sd_device *device);
const char *sd_device_get_devlink_first(sd_device *device);
const char *sd_device_get_devlink_next(sd_device *device);
const char *sd_device_get_property_first(sd_device *device, const char **value);
@ -74,7 +72,6 @@ const char *sd_device_get_sysattr_first(sd_device *device);
const char *sd_device_get_sysattr_next(sd_device *device);
int sd_device_has_tag(sd_device *device, const char *tag);
int sd_device_has_current_tag(sd_device *device, const char *tag);
int sd_device_get_property_value(sd_device *device, const char *key, const char **value);
int sd_device_get_sysattr_value(sd_device *device, const char *sysattr, const char **_value);

View File

@ -958,24 +958,6 @@ static int udev_event_on_move(UdevEvent *event) {
return 0;
}
static int copy_all_tags(sd_device *d, sd_device *s) {
const char *tag;
int r;
assert(d);
if (!s)
return 0;
for (tag = sd_device_get_tag_first(s); tag; tag = sd_device_get_tag_next(s)) {
r = device_add_tag(d, tag, false);
if (r < 0)
return r;
}
return 0;
}
int udev_event_execute_rules(UdevEvent *event,
usec_t timeout_usec,
int timeout_signal,
@ -1008,10 +990,6 @@ int udev_event_execute_rules(UdevEvent *event,
if (r < 0)
return log_device_debug_errno(dev, r, "Failed to clone sd_device object: %m");
r = copy_all_tags(dev, event->dev_db_clone);
if (r < 0)
log_device_warning_errno(dev, r, "Failed to copy all tags from old database entry, ignoring: %m");
if (sd_device_get_devnum(dev, NULL) >= 0)
/* Disable watch during event processing. */
(void) udev_watch_end(event->dev_db_clone);

View File

@ -2017,7 +2017,7 @@ static int udev_rule_apply_token_to_event(
if (token->op == OP_REMOVE)
device_remove_tag(dev, buf);
else {
r = device_add_tag(dev, buf, true);
r = device_add_tag(dev, buf);
if (r < 0)
return log_rule_error_errno(dev, rules, r, "Failed to add tag '%s': %m", buf);
}

View File

@ -1 +0,0 @@
../TEST-01-BASIC/Makefile

View File

@ -1,8 +0,0 @@
#!/usr/bin/env bash
set -e
TEST_DESCRIPTION="UDEV tags management"
TEST_NO_NSPAWN=1
. $TEST_BASE_DIR/test-functions
do_test "$@" 55

View File

@ -673,7 +673,7 @@ get_ldpath() {
install_missing_libraries() {
# install possible missing libraries
for i in $initdir{,/usr}/{sbin,bin}/* $initdir{,/usr}/lib/systemd/{,tests/{,manual/,unsafe/}}*; do
LD_LIBRARY_PATH="${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:}$(get_ldpath $i):$(get_ldpath $i)/src/udev" inst_libs $i
LD_LIBRARY_PATH="${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:}$(get_ldpath $i)" inst_libs $i
done
}

View File

@ -1,7 +0,0 @@
[Unit]
Description=TESTSUITE-55-UDEV-TAGS
[Service]
ExecStartPre=rm -f /failed /testok
ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh
Type=oneshot

View File

@ -1,66 +0,0 @@
#!/bin/bash
set -ex
set -o pipefail
mkdir -p /run/udev/rules.d/
! test -f /run/udev/tags/added/c1:3 &&
! test -f /run/udev/tags/changed/c1:3 &&
udevadm info /dev/null | grep -q -v 'E: TAGS=.*:added:.*' &&
udevadm info /dev/null | grep -q -v 'E: CURRENT_TAGS=.*:added:.*' &&
udevadm info /dev/null | grep -q -v 'E: TAGS=.*:changed:.*' &&
udevadm info /dev/null | grep -q -v 'E: CURRENT_TAGS=.*:changed:.*'
cat > /run/udev/rules.d/50-testsuite.rules <<EOF
ACTION=="add", SUBSYSTEM=="mem", KERNEL=="null", TAG+="added"
ACTION=="change", SUBSYSTEM=="mem", KERNEL=="null", TAG+="changed"
EOF
udevadm control --reload
udevadm trigger -c add /dev/null
while : ; do
test -f /run/udev/tags/added/c1:3 &&
! test -f /run/udev/tags/changed/c1:3 &&
udevadm info /dev/null | grep -q 'E: TAGS=.*:added:.*' &&
udevadm info /dev/null | grep -q 'E: CURRENT_TAGS=.*:added:.*' &&
udevadm info /dev/null | grep -q -v 'E: TAGS=.*:changed:.*' &&
udevadm info /dev/null | grep -q -v 'E: CURRENT_TAGS=.*:changed:.*' &&
break
sleep .5
done
udevadm control --reload
udevadm trigger -c change /dev/null
while : ; do
test -f /run/udev/tags/added/c1:3 &&
test -f /run/udev/tags/changed/c1:3 &&
udevadm info /dev/null | grep -q 'E: TAGS=.*:added:.*' &&
udevadm info /dev/null | grep -q -v 'E: CURRENT_TAGS=.*:added:.*' &&
udevadm info /dev/null | grep -q 'E: TAGS=.*:changed:.*' &&
udevadm info /dev/null | grep -q 'E: CURRENT_TAGS=.*:changed:.*' &&
break
sleep .5
done
udevadm control --reload
udevadm trigger -c add /dev/null
while : ; do
test -f /run/udev/tags/added/c1:3 &&
test -f /run/udev/tags/changed/c1:3 &&
udevadm info /dev/null | grep -q 'E: TAGS=.*:added:.*' &&
udevadm info /dev/null | grep -q 'E: CURRENT_TAGS=.*:added:.*' &&
udevadm info /dev/null | grep -q 'E: TAGS=.*:changed:.*' &&
udevadm info /dev/null | grep -q -v 'E: CURRENT_TAGS=.*:changed:.*' &&
break
sleep .5
done
echo OK > /testok
exit 0