libvirt/src/util
Michal Privoznik 438b50dda8 virSetUIDGIDWithCaps: Don't drop CAP_SETPCAP right away
There are few cases where we execute a virCommand with all caps
cleared (virCommandClearCaps()). For instance
dnsmasqCapsRefreshInternal() does just that. This means, that
after fork() and before exec() the virSetUIDGIDWithCaps() is
called. But since the caller did not want to change anything,
just drop capabilities, these are the values of arguments:

  virSetUIDGIDWithCaps (uid=-1, gid=-1, groups=0x0, ngroups=0,
                        capBits=0, clearExistingCaps=true)

This means that indeed all capabilities will be dropped,
including CAP_SETPCAP. But this capability controls whether
capabilities can be set, IOW whether capng_apply() succeeds.

There are two calls of capng_apply() in the function. The
CAP_SETPCAP is dropped after the first call and thus the other
call (capng_apply(CAPNG_SELECT_BOUNDS);) fails.

The solution is to keep the capability for as long as needed
(just like CAP_SETGID and CAP_SETUID) and drop it only at the
very end (just like CAP_SETGID and CAP_SETUID).

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1949388
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
2021-06-29 08:52:12 +02:00
..
glibcompat.c src: ensure GSource background unref happens in correct event loop 2021-03-17 09:16:05 +00:00
glibcompat.h src: ensure GSource background unref happens in correct event loop 2021-03-17 09:16:05 +00:00
iohelper.c util: iohelper: Don't handle OOM from posix_memalign 2021-03-02 09:50:19 +01:00
meson.build meson: tools: depend on keycode generated sources 2021-03-05 20:05:54 +04:00
viralloc.c util: Make virReallocN return void 2021-03-22 12:44:18 +01:00
viralloc.h util: Make virReallocN return void 2021-03-22 12:44:18 +01:00
virarch.c util: add a virArchFromHost() impl for Windows 2020-01-29 14:51:39 +00:00
virarch.h util: add ARCH_IS_MIPS64 helper macro 2020-11-20 12:09:51 +00:00
virarptable.c lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virarptable.h lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
viraudit.c lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
viraudit.h lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virauth.c lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virauth.h lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virauthconfig.c lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virauthconfig.h lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virbitmap.c lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virbitmap.h lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virbpf.c lib: Prefer WITH_* prefix for #if conditionals 2020-09-02 10:28:10 +02:00
virbpf.h lib: Prefer WITH_* prefix for #if conditionals 2020-09-02 10:28:10 +02:00
virbuffer.c lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virbuffer.h lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
vircgroup.c Replace AbsPath judgement method with g_path_is_absolute() 2021-04-21 10:02:09 +02:00
vircgroup.h lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
vircgroupbackend.c vircgroupbackend: Extend error messages in VIR_CGROUP_BACKEND_CALL() 2021-04-19 11:21:40 +02:00
vircgroupbackend.h vircgroupbackend: Extend error messages in VIR_CGROUP_BACKEND_CALL() 2021-04-19 11:21:40 +02:00
vircgrouppriv.h vircgroup: Fix virCgroupKillRecursive() wrt nested controllers 2021-04-19 11:21:40 +02:00
vircgroupv1.c vircgroup: Fix virCgroupKillRecursive() wrt nested controllers 2021-04-19 11:21:40 +02:00
vircgroupv1.h
vircgroupv2.c vircgroup: Fix virCgroupKillRecursive() wrt nested controllers 2021-04-19 11:21:40 +02:00
vircgroupv2.h
vircgroupv2devices.c vircgroupv2devices: refactor virCgroupV2DevicesRemoveProg 2021-04-14 12:06:16 +02:00
vircgroupv2devices.h vircgroupv2devices: refactor virCgroupV2DevicesRemoveProg 2021-04-14 12:06:16 +02:00
vircommand.c util: command: Introduce virCommandToStringBuf 2021-06-15 16:27:35 +02:00
vircommand.h util: command: Introduce virCommandToStringBuf 2021-06-15 16:27:35 +02:00
vircommandpriv.h lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virconf.c Remove static analysis assertions 2021-05-24 20:26:20 +02:00
virconf.h lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
vircrypto.c virCryptoEncryptDataAESgnutls: Use virSecureErase instead of memset 2021-02-03 13:07:13 +01:00
vircrypto.h
virdaemon.c lib: Replace virFileMakePath() with g_mkdir_with_parents() 2021-03-04 20:52:23 +01:00
virdaemon.h util: introduce shared daemon startup code 2020-03-27 16:22:49 +01:00
virdevmapper.c virDevMapperGetTargetsImpl: Use correct length when copying into dm.name 2021-03-08 12:16:13 +01:00
virdevmapper.h util: Move virIsDevMapperDevice() to virdevmapper.c 2020-06-15 14:50:46 +02:00
virdnsmasq.c virdnsmasq: remove binaryPath argument from dnsmasqCapsNewFromBinary 2021-04-21 14:18:31 +02:00
virdnsmasq.h virdnsmasq: remove binaryPath argument from dnsmasqCapsNewFromBinary 2021-04-21 14:18:31 +02:00
virebtables.c util: replace VIR_FREE with g_free in all vir*Free() functions 2021-02-05 00:20:43 -05:00
virebtables.h
virendian.h
virenum.c
virenum.h src: replace verify(expr) with G_STATIC_ASSERT(expr) 2020-01-17 10:02:01 +00:00
virerror.c Add basic driver for the Cloud-Hypervisor 2021-06-04 10:56:06 +01:00
virerror.h util: virerror: Remove VIR_ERROR_MAX_LENGTH macro 2021-03-05 15:01:29 +01:00
virerrorpriv.h
virevent.c util: event: check return value of virInitialize 2020-09-23 13:26:34 +02:00
virevent.h event: add API for requiring an event loop impl to be registered 2019-12-18 14:04:59 +00:00
vireventglib.c src: ensure GSource background unref happens in correct event loop 2021-03-17 09:16:05 +00:00
vireventglib.h util: import an event loop impl based on GMainContext 2020-02-07 15:03:53 +00:00
vireventglibwatch.c util: keep track of full GSource object not source ID number 2020-08-07 12:43:56 +01:00
vireventglibwatch.h util: keep track of full GSource object not source ID number 2020-08-07 12:43:56 +01:00
vireventthread.c util: do not unref event thread after joining it 2020-09-23 17:06:36 +02:00
vireventthread.h src: introduce an abstraction for running event loops 2020-03-11 14:44:04 +00:00
virfcp.c virBuildPath: Remove return value 2021-03-02 09:50:19 +01:00
virfcp.h
virfdstream.c lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virfdstream.h
virfile.c virFindFileInPath: Don't pass NULL to g_canonicalize_filename() 2021-06-15 21:14:03 +02:00
virfile.h Replace virFileAbsPath() with g_canonicalize_filename() 2021-06-15 12:42:02 +02:00
virfilecache.c lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virfilecache.h lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virfirewall.c virfirewall: use virFindFileInPath instead of virFileIsExecutable 2021-04-21 14:18:39 +02:00
virfirewall.h lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virfirewalld.c util: firewall: use g_new0 2020-10-06 12:31:34 +02:00
virfirewalld.h
virfirewalldpriv.h
virfirewallpriv.h
virfirmware.c lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virfirmware.h lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virgdbus.c virgdbus: fix getting non-shared DBus connection 2020-11-09 23:42:33 +01:00
virgdbus.h virgdbus: add DBus reply format check 2020-09-23 12:53:31 +02:00
virgettext.c lib: Prefer WITH_* prefix for #if conditionals 2020-09-02 10:28:10 +02:00
virgettext.h
virgic.c Remove virutil.h where possible 2020-02-24 23:15:49 +01:00
virgic.h lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virglibutil.c util: Add helpers for auto-freeing GSList filled with strings 2021-02-11 17:05:32 +01:00
virglibutil.h util: Add helpers for auto-freeing GSList filled with strings 2021-02-11 17:05:32 +01:00
virhash.c Fix spelling 2021-04-15 15:42:21 +02:00
virhash.h lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virhashcode.c Prefer https: everywhere where possible 2020-09-01 21:58:46 +02:00
virhashcode.h Prefer https: everywhere where possible 2020-09-01 21:58:46 +02:00
virhook.c virBuildPath: Remove return value 2021-03-02 09:50:19 +01:00
virhook.h bhyve: add hooks 2020-02-24 17:25:07 +00:00
virhostcpu.c lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virhostcpu.h lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virhostcpupriv.h hostcpu: Introduce virHostCPUGetSignature 2020-05-25 16:09:41 +02:00
virhostmem.c Remove static analysis assertions 2021-05-24 20:26:20 +02:00
virhostmem.h
virhostuptime.c virhostuptime: Fix rounding in uptime calculation 2021-02-02 15:00:55 +01:00
virhostuptime.h virhostuptime: Introduce virHostBootTimeInit() 2020-01-07 17:00:10 +01:00
viridentity.c viridentity: Fix ref/unref imbalance in VIR_IDENTITY_AUTORESTORE 2021-05-17 21:06:15 +02:00
viridentity.h src: add API to determine if current identity is a system identity 2021-05-13 11:07:40 +01:00
viridentitypriv.h util: generate a persistent system token 2021-05-13 11:07:16 +01:00
virinitctl.c src: replace verify(expr) with G_STATIC_ASSERT(expr) 2020-01-17 10:02:01 +00:00
virinitctl.h
viriptables.c lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
viriptables.h lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
viriscsi.c Remove all the uses that use subtraction in their length argument 2019-12-12 14:24:35 +01:00
viriscsi.h
virjson.c lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virjson.h lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virkeycode.c Split declarations from initializations 2020-08-25 19:03:11 +02:00
virkeycode.h Remove virutil.h from all header files 2020-02-24 23:15:50 +01:00
virkmod.c util: rename method to virKModIsProhibited 2020-06-26 15:39:33 +01:00
virkmod.h util: rename method to virKModIsProhibited 2020-06-26 15:39:33 +01:00
virlease.c lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virlease.h lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virlockspace.c lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virlockspace.h lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virlog.c Replace virFileAbsPath() with g_canonicalize_filename() 2021-06-15 12:42:02 +02:00
virlog.h lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virmacaddr.c lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virmacaddr.h lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virmacmap.c lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virmacmap.h lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virmdev.c nodedev: refactor virMediatedDeviceGetIOMMUGroupNum() 2021-04-15 08:51:37 -05:00
virmdev.h lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virmodule.c lib: Prefer WITH_* prefix for #if conditionals 2020-09-02 10:28:10 +02:00
virmodule.h
virnetdev.c Drop magic comments for coverity 2021-05-24 20:26:20 +02:00
virnetdev.h virnetdev: move virNetDevSetRootQDisc to virnetdevbandwidth 2021-04-21 14:19:34 +02:00
virnetdevbandwidth.c virnetdev: move virNetDevSetRootQDisc to virnetdevbandwidth 2021-04-21 14:19:34 +02:00
virnetdevbandwidth.h virnetdev: move virNetDevSetRootQDisc to virnetdevbandwidth 2021-04-21 14:19:34 +02:00
virnetdevbridge.c meson: Drop netinet workaround 2021-06-01 14:30:39 +02:00
virnetdevbridge.h util: query/set BR_ISOLATED flag on netdevs attached to bridge 2020-02-20 23:07:53 -05:00
virnetdevip.c lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virnetdevip.h lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virnetdevmacvlan.c lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virnetdevmacvlan.h netdevmacvlan: Use helper function to create unique macvlan/macvtap name 2020-12-15 13:35:33 -05:00
virnetdevmidonet.c lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virnetdevmidonet.h
virnetdevopenvswitch.c openvswitch: don't delete existing OVS port prior to recreating same port 2021-06-10 01:23:47 -04:00
virnetdevopenvswitch.h virnetdevopenvswitch: Remove redundant declaration 2021-05-20 11:30:01 +02:00
virnetdevtap.c lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virnetdevtap.h lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virnetdevveth.c util:veth: Create veth device pair by netlink 2020-12-16 14:43:18 -05:00
virnetdevveth.h
virnetdevvlan.c lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virnetdevvlan.h lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virnetdevvportprofile.c lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virnetdevvportprofile.h lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virnetlink.c lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virnetlink.h lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virnodesuspend.c lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virnodesuspend.h
virnuma.c conf, docs, schema: Add support for 'restrictive' mode in numatune 2021-04-19 11:39:13 +02:00
virnuma.h virnuma: Export virNumaGetMaxCPUs properly 2021-05-17 15:54:13 +02:00
virnvme.c lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virnvme.h lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virobject.c Remove static analysis assertions 2021-05-24 20:26:20 +02:00
virobject.h lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virpci.c Fix spelling 2021-04-15 15:42:21 +02:00
virpci.h conf: Use virTristateXXX in virPCIDeviceAddress 2021-04-16 09:48:42 +02:00
virperf.c lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virperf.h lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virpidfile.c lib: Replace virFileMakePath() with g_mkdir_with_parents() 2021-03-04 20:52:23 +01:00
virpidfile.h
virpolkit.c lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virpolkit.h lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virportallocator.c lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virportallocator.h lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virprobe.h
virprocess.c Drop magic comments for coverity 2021-05-24 20:26:20 +02:00
virprocess.h lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virqemu.c lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virqemu.h lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virrandom.c util: add virRandomToken API 2021-05-13 11:07:13 +01:00
virrandom.h util: add virRandomToken API 2021-05-13 11:07:13 +01:00
virresctrl.c virresctrl: fix starting VMs with cputune.memorytune specified 2021-06-21 13:17:18 +02:00
virresctrl.h lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virresctrlpriv.h lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virrotatingfile.c lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virrotatingfile.h lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virscsi.c lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virscsi.h lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virscsihost.c util: quieten virSCSIHostGetUniqueId 2020-11-06 15:03:39 +01:00
virscsihost.h
virscsivhost.c lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virscsivhost.h lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virseclabel.c lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virseclabel.h lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virsecret.c secret: rework handling of private secrets 2021-05-13 11:07:47 +01:00
virsecret.h lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virsecureerase.c util: virsecureerase: Introduce virSecureEraseString 2021-02-03 13:07:13 +01:00
virsecureerase.h util: virsecureerase: Introduce virSecureEraseString 2021-02-03 13:07:13 +01:00
virsocket.c util: Fix file descriptor passing on 64-bit FreeBSD and NetBSD. 2021-02-17 10:15:33 +00:00
virsocket.h gnulib: delete all gnulib integration 2020-02-07 15:03:54 +00:00
virsocketaddr.c lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virsocketaddr.h lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virstoragefile.c virStorageFileParseBackingStoreStr: use g_strsplit instead of virStringSplitCount 2021-04-12 15:55:09 +02:00
virstoragefile.h Remove virStorageFileCanonicalizePath 2021-04-12 15:55:09 +02:00
virstring.c util: virstring: Remove the virStringSplitCount wrapper funcion 2021-04-12 15:55:10 +02:00
virstring.h util: virstring: Remove the virStringSplitCount wrapper funcion 2021-04-12 15:55:10 +02:00
virsysinfo.c lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virsysinfo.h lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virsysinfopriv.h lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virsystemd.c lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virsystemd.h lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virsystemdpriv.h
virthread.c virthread: Make sure virOnce() returns -1 on error 2021-05-07 12:33:58 +02:00
virthread.h lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virthreadjob.c
virthreadjob.h
virthreadpool.c lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virthreadpool.h lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virtime.c util: o-z: use g_new0 2020-10-06 12:31:34 +02:00
virtime.h
virtpm.c lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virtpm.h
virtypedparam-public.c Do not check return value of VIR_RESIZE_N 2021-03-22 12:44:18 +01:00
virtypedparam.c lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virtypedparam.h lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
viruri.c lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
viruri.h lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virusb.c lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virusb.h lib: Drop internal virXXXPtr typedefs 2021-04-13 17:00:38 +02:00
virutil.c virSetUIDGIDWithCaps: Don't drop CAP_SETPCAP right away 2021-06-29 08:52:12 +02:00
virutil.h virIndexToDiskName: Make 'idx' unsigned and remove check 2021-03-05 15:33:34 +01:00
viruuid.c viruuid: Rework virUUIDIsValid() 2020-12-04 16:24:19 +01:00
viruuid.h viruuid: Rework virUUIDIsValid() 2020-12-04 16:24:19 +01:00
virvhba.c remove unnecessary cleanup labels and unused return variables 2020-11-02 22:01:36 -05:00
virvhba.h
virvsock.c lib: Prefer WITH_* prefix for #if conditionals 2020-09-02 10:28:10 +02:00
virvsock.h
virxdrdefs.h src: remove all traces of Cygwin support 2020-01-29 14:51:40 +00:00
virxml.c virxml: Avoid double indentation of <metadata/> element 2021-05-25 13:17:22 +02:00
virxml.h virxml: Introduce and use virXMLFormatMetadata() 2021-05-25 13:17:22 +02:00