Compare commits
No commits in common. "c8" and "imports/c9-beta/udisks2-2.9.2-6.el9" have entirely different histories.
c8
...
imports/c9
2
.gitignore
vendored
2
.gitignore
vendored
@ -1 +1 @@
|
|||||||
SOURCES/udisks-2.9.0.tar.bz2
|
SOURCES/udisks-2.9.2.tar.bz2
|
||||||
|
1
.udisks2.metadata
Normal file
1
.udisks2.metadata
Normal file
@ -0,0 +1 @@
|
|||||||
|
15aaadab7f6ce2ddc4c6ca114019241cd1152f04 SOURCES/udisks-2.9.2.tar.bz2
|
25
SOURCES/ignore-apple-boot-part.patch
Normal file
25
SOURCES/ignore-apple-boot-part.patch
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
From b9863c11601e199420a375e13505e2b795de77c5 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Frederick Grose <4335897+FGrose@users.noreply.github.com>
|
||||||
|
Date: Tue, 9 Feb 2021 19:02:01 -0500
|
||||||
|
Subject: [PATCH] 80-udisks2.rules: Ignore Apple boot partition from
|
||||||
|
livecd-tools
|
||||||
|
|
||||||
|
https://github.com/livecd-tools/livecd-tools/pull/176 creates a new boot
|
||||||
|
partition with livecd-iso-to-disk from Fedora Live .iso files that UDISKS
|
||||||
|
should ignore.
|
||||||
|
---
|
||||||
|
data/80-udisks2.rules | 1 +
|
||||||
|
1 file changed, 1 insertion(+)
|
||||||
|
|
||||||
|
diff --git a/data/80-udisks2.rules b/data/80-udisks2.rules
|
||||||
|
index fb50f48a0..d6fa072fd 100644
|
||||||
|
--- a/data/80-udisks2.rules
|
||||||
|
+++ b/data/80-udisks2.rules
|
||||||
|
@@ -122,6 +122,7 @@ ENV{ID_PART_ENTRY_SCHEME}=="mac", ENV{ID_PART_ENTRY_TYPE}=="Apple_Bootstrap", EN
|
||||||
|
|
||||||
|
# Apple Boot partitions
|
||||||
|
ENV{ID_PART_ENTRY_SCHEME}=="gpt", ENV{ID_PART_ENTRY_TYPE}=="426f6f74-0000-11aa-aa11-00306543ecac", ENV{UDISKS_IGNORE}="1"
|
||||||
|
+ENV{ID_FS_LABEL}=="ANACONDA", ENV{ID_PART_ENTRY_TYPE}=="48465300-0000-11aa-aa11-00306543ecac|0xaf", ENV{UDISKS_IGNORE}="1"
|
||||||
|
|
||||||
|
# special DOS partition types (EFI, hidden, etc.) and RAID/LVM
|
||||||
|
# see http://www.win.tue.nl/~aeb/partitions/partition_types-1.html
|
@ -1,11 +0,0 @@
|
|||||||
diff -up udisks-2.9.0/src/tests/dbus-tests/test_10_basic.py.bak udisks-2.9.0/src/tests/dbus-tests/test_10_basic.py
|
|
||||||
--- udisks-2.9.0/src/tests/dbus-tests/test_10_basic.py.bak 2020-05-26 14:59:20.000000000 +0200
|
|
||||||
+++ udisks-2.9.0/src/tests/dbus-tests/test_10_basic.py 2021-04-23 15:49:07.405824214 +0200
|
|
||||||
@@ -26,6 +26,7 @@ class UdisksBaseTest(udiskstestcase.Udis
|
|
||||||
elif distro in ('enterprise_linux', 'centos') and int(version) > 7:
|
|
||||||
modules.pop('bcache')
|
|
||||||
modules.pop('btrfs')
|
|
||||||
+ modules.pop('zram')
|
|
||||||
# assuming the kvdo module is typically pulled in as a vdo tool dependency
|
|
||||||
if not find_executable("vdo"):
|
|
||||||
modules.pop('vdo')
|
|
@ -0,0 +1,29 @@
|
|||||||
|
From 79eed9aa35fbf1c5131b44b50b407742f68e2f61 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Florian Ziegler <florian.ziegler@posteo.de>
|
||||||
|
Date: Sat, 17 Apr 2021 13:31:31 +0200
|
||||||
|
Subject: [PATCH 8/8] Ignore "Extended Boot Loader" GPT partition
|
||||||
|
|
||||||
|
---
|
||||||
|
data/80-udisks2.rules | 6 ++++++
|
||||||
|
1 file changed, 6 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/data/80-udisks2.rules b/data/80-udisks2.rules
|
||||||
|
index fb50f48a..39bfa28b 100644
|
||||||
|
--- a/data/80-udisks2.rules
|
||||||
|
+++ b/data/80-udisks2.rules
|
||||||
|
@@ -135,6 +135,12 @@ ENV{ID_PART_ENTRY_SCHEME}=="gpt", \
|
||||||
|
ENV{ID_PART_ENTRY_TYPE}=="c12a7328-f81f-11d2-ba4b-00a0c93ec93b|21686148-6449-6e6f-744e-656564454649|a19d880f-05fc-4d3b-a006-743f0f84911e|e6d6d379-f507-44c2-a23c-238f2a3df928|e3c9e316-0b5c-4db8-817d-f92df00215ae|de94bba4-06d1-4d40-a16a-bfd50179d6ac", \
|
||||||
|
ENV{UDISKS_IGNORE}="1"
|
||||||
|
|
||||||
|
+# special Extended Boot Loader partition (XBOOTLDR)
|
||||||
|
+# see https://systemd.io/BOOT_LOADER_SPECIFICATION/
|
||||||
|
+ENV{ID_PART_ENTRY_SCHEME}=="gpt", \
|
||||||
|
+ ENV{ID_PART_ENTRY_TYPE}=="bc13c2ff-59e6-4262-a352-b275fd6f7172", \
|
||||||
|
+ ENV{UDISKS_IGNORE}="1"
|
||||||
|
+
|
||||||
|
# ZFS member partitions
|
||||||
|
ENV{ID_PART_ENTRY_SCHEME}=="gpt", \
|
||||||
|
ENV{ID_FS_TYPE}=="zfs_member", ENV{ID_PART_ENTRY_TYPE}=="6a898cc3-1dd2-11b2-99a6-080020736631", \
|
||||||
|
--
|
||||||
|
2.30.2
|
||||||
|
|
60
SOURCES/udisks-2.10.0-ata_conf_apply_GTask.patch
Normal file
60
SOURCES/udisks-2.10.0-ata_conf_apply_GTask.patch
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
commit 6ff556afabd490feb6c4b29f9e91e81d64e2c0ed
|
||||||
|
Author: Tomas Bzatek <tbzatek@redhat.com>
|
||||||
|
Date: Tue Mar 23 12:56:40 2021 +0100
|
||||||
|
|
||||||
|
udiskslinuxdriveata: Use GTask to apply configuration in a thread
|
||||||
|
|
||||||
|
Should fix a leaking GThread without a need to join or track it anyhow.
|
||||||
|
|
||||||
|
diff --git a/src/udiskslinuxdriveata.c b/src/udiskslinuxdriveata.c
|
||||||
|
index 5ebdcd76..2de138cd 100644
|
||||||
|
--- a/src/udiskslinuxdriveata.c
|
||||||
|
+++ b/src/udiskslinuxdriveata.c
|
||||||
|
@@ -1625,10 +1625,13 @@ apply_conf_data_free (ApplyConfData *data)
|
||||||
|
g_free (data);
|
||||||
|
}
|
||||||
|
|
||||||
|
-static gpointer
|
||||||
|
-apply_configuration_thread_func (gpointer user_data)
|
||||||
|
+static void
|
||||||
|
+apply_configuration_thread_func (GTask *task,
|
||||||
|
+ gpointer source_object,
|
||||||
|
+ gpointer task_data,
|
||||||
|
+ GCancellable *cancellable)
|
||||||
|
{
|
||||||
|
- ApplyConfData *data = user_data;
|
||||||
|
+ ApplyConfData *data = task_data;
|
||||||
|
UDisksDaemon *daemon;
|
||||||
|
const gchar *device_file = NULL;
|
||||||
|
gint fd = -1;
|
||||||
|
@@ -1799,8 +1802,6 @@ apply_configuration_thread_func (gpointer user_data)
|
||||||
|
out:
|
||||||
|
if (fd != -1)
|
||||||
|
close (fd);
|
||||||
|
- apply_conf_data_free (data);
|
||||||
|
- return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
@@ -1819,6 +1820,7 @@ udisks_linux_drive_ata_apply_configuration (UDisksLinuxDriveAta *drive,
|
||||||
|
{
|
||||||
|
gboolean has_conf = FALSE;
|
||||||
|
ApplyConfData *data = NULL;
|
||||||
|
+ GTask *task;
|
||||||
|
|
||||||
|
data = g_new0 (ApplyConfData, 1);
|
||||||
|
data->ata_pm_standby = -1;
|
||||||
|
@@ -1862,9 +1864,10 @@ udisks_linux_drive_ata_apply_configuration (UDisksLinuxDriveAta *drive,
|
||||||
|
/* this can easily take a long time and thus block (the drive may be in standby mode
|
||||||
|
* and needs to spin up) - so run it in a thread
|
||||||
|
*/
|
||||||
|
- g_thread_new ("apply-conf-thread",
|
||||||
|
- apply_configuration_thread_func,
|
||||||
|
- data);
|
||||||
|
+ task = g_task_new (data->object, NULL, NULL, NULL);
|
||||||
|
+ g_task_set_task_data (task, data, (GDestroyNotify) apply_conf_data_free);
|
||||||
|
+ g_task_run_in_thread (task, apply_configuration_thread_func);
|
||||||
|
+ g_object_unref (task);
|
||||||
|
|
||||||
|
data = NULL; /* don't free data below */
|
||||||
|
|
@ -1,60 +0,0 @@
|
|||||||
From eb917d346bc8592924c5f6566b01841176c53c8c Mon Sep 17 00:00:00 2001
|
|
||||||
From: Tomas Bzatek <tbzatek@redhat.com>
|
|
||||||
Date: Mon, 22 Aug 2022 16:27:11 +0200
|
|
||||||
Subject: [PATCH] udiskslinuxblock: Only permit ATA Secure Erase during
|
|
||||||
Format() on a whole block device
|
|
||||||
|
|
||||||
ATA Secure Erase requested as an option to the Format() method call used
|
|
||||||
to perform the actual erase on a whole drive object it looked up. When
|
|
||||||
Format() was called on a partition, this led to data loss on a whole drive.
|
|
||||||
This commit adds a safeguard to check that the Format() is requested
|
|
||||||
on a whole block device.
|
|
||||||
|
|
||||||
Severity of this issue was slightly lowered by a failure to submit
|
|
||||||
the ATA Secure erase command in case some filesystem was mounted
|
|
||||||
at that point.
|
|
||||||
---
|
|
||||||
src/udiskslinuxblock.c | 16 ++++++++++++++++
|
|
||||||
1 file changed, 16 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/src/udiskslinuxblock.c b/src/udiskslinuxblock.c
|
|
||||||
index d1da94edf..db0ed2bf6 100644
|
|
||||||
--- a/src/udiskslinuxblock.c
|
|
||||||
+++ b/src/udiskslinuxblock.c
|
|
||||||
@@ -2354,6 +2354,7 @@ erase_ata_device (UDisksBlock *block,
|
|
||||||
{
|
|
||||||
gboolean ret = FALSE;
|
|
||||||
UDisksObject *drive_object = NULL;
|
|
||||||
+ UDisksLinuxBlockObject *block_object = NULL;
|
|
||||||
UDisksDriveAta *ata = NULL;
|
|
||||||
|
|
||||||
drive_object = udisks_daemon_find_object (daemon, udisks_block_get_drive (block));
|
|
||||||
@@ -2369,6 +2370,20 @@ erase_ata_device (UDisksBlock *block,
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
+ /* Reverse check to ensure we're erasing whole block device and not a partition */
|
|
||||||
+ block_object = udisks_linux_drive_object_get_block (UDISKS_LINUX_DRIVE_OBJECT (drive_object), FALSE /* get_hw */);
|
|
||||||
+ if (block_object == NULL)
|
|
||||||
+ {
|
|
||||||
+ g_set_error (error, UDISKS_ERROR, UDISKS_ERROR_FAILED, "Couldn't find a block device for the drive to erase");
|
|
||||||
+ goto out;
|
|
||||||
+ }
|
|
||||||
+ if (g_strcmp0 (g_dbus_object_get_object_path (G_DBUS_OBJECT (object)),
|
|
||||||
+ g_dbus_object_get_object_path (G_DBUS_OBJECT (block_object))) != 0)
|
|
||||||
+ {
|
|
||||||
+ g_set_error (error, UDISKS_ERROR, UDISKS_ERROR_FAILED, "ATA secure erase needs to be performed on a whole block device");
|
|
||||||
+ goto out;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
/* sleep a tiny bit here to avoid the secure erase code racing with
|
|
||||||
* programs spawned by udev
|
|
||||||
*/
|
|
||||||
@@ -2382,6 +2397,7 @@ erase_ata_device (UDisksBlock *block,
|
|
||||||
out:
|
|
||||||
g_clear_object (&ata);
|
|
||||||
g_clear_object (&drive_object);
|
|
||||||
+ g_clear_object (&block_object);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
24
SOURCES/udisks-2.10.0-dosfstools_4.2-reread_part.patch
Normal file
24
SOURCES/udisks-2.10.0-dosfstools_4.2-reread_part.patch
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
commit d58ebcc32b583371dd73ab7f4c7be5191674ca62
|
||||||
|
Author: Tomas Bzatek <tbzatek@redhat.com>
|
||||||
|
Date: Wed Mar 17 18:52:22 2021 +0100
|
||||||
|
|
||||||
|
udiskslinuxblock: Re-read partition table after creating FAT filesystem
|
||||||
|
|
||||||
|
Might not be needed after reverting mkfs.vfat behaviour back
|
||||||
|
to the legacy way, added just as a precautionary measure.
|
||||||
|
|
||||||
|
diff --git a/src/udiskslinuxblock.c b/src/udiskslinuxblock.c
|
||||||
|
index 901426ad..69161b61 100644
|
||||||
|
--- a/src/udiskslinuxblock.c
|
||||||
|
+++ b/src/udiskslinuxblock.c
|
||||||
|
@@ -2913,7 +2913,9 @@ static inline gboolean
|
||||||
|
need_partprobe_after_mkfs (const gchar *fs_type)
|
||||||
|
{
|
||||||
|
/* udftools makes fake MBR since the 2.0 release */
|
||||||
|
- return (g_strcmp0 (fs_type, "udf") == 0);
|
||||||
|
+ /* dosfstools makes fake MBR since the 4.2 release */
|
||||||
|
+ return (g_strcmp0 (fs_type, "udf") == 0 ||
|
||||||
|
+ g_strcmp0 (fs_type, "vfat") == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
75
SOURCES/udisks-2.10.0-dosfstools_4.2.patch
Normal file
75
SOURCES/udisks-2.10.0-dosfstools_4.2.patch
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
commit ef1979d8cbfb8ad976de0af21a70f8c0f98fbbe9
|
||||||
|
Author: Tomas Bzatek <tbzatek@redhat.com>
|
||||||
|
Date: Wed Mar 17 18:50:19 2021 +0100
|
||||||
|
|
||||||
|
udiskslinuxfsinfo: Add dosfstools >= 4.2 quirks
|
||||||
|
|
||||||
|
Reverting back the legacy behaviour with no protective (fake) MBR
|
||||||
|
created while making new FAT filesystem on an unpartitioned block device.
|
||||||
|
|
||||||
|
Added a label clear functionality as well.
|
||||||
|
|
||||||
|
diff --git a/src/udiskslinuxfsinfo.c b/src/udiskslinuxfsinfo.c
|
||||||
|
index 15af26c8..f18b9b80 100644
|
||||||
|
--- a/src/udiskslinuxfsinfo.c
|
||||||
|
+++ b/src/udiskslinuxfsinfo.c
|
||||||
|
@@ -21,6 +21,8 @@
|
||||||
|
#include <string.h>
|
||||||
|
#include <glib.h>
|
||||||
|
|
||||||
|
+#include <blockdev/exec.h>
|
||||||
|
+
|
||||||
|
#include "config.h"
|
||||||
|
#include "udiskslinuxfsinfo.h"
|
||||||
|
#include "udisksconfigmanager.h"
|
||||||
|
@@ -236,6 +238,19 @@ const FSInfo _fs_info[] =
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
+/* workaround for dosfstools >= 4.2 */
|
||||||
|
+static const FSInfo vfat_dosfstools_42 =
|
||||||
|
+ {
|
||||||
|
+ FS_VFAT,
|
||||||
|
+ "fatlabel $DEVICE $LABEL",
|
||||||
|
+ "fatlabel --reset $DEVICE",
|
||||||
|
+ FALSE, /* supports_online_label_rename */
|
||||||
|
+ FALSE, /* supports_owners */
|
||||||
|
+ "mkfs.vfat -I -n $LABEL --mbr=n $DEVICE",
|
||||||
|
+ NULL,
|
||||||
|
+ NULL, /* option_no_discard */
|
||||||
|
+ };
|
||||||
|
+
|
||||||
|
/**
|
||||||
|
* get_fs_info:
|
||||||
|
*
|
||||||
|
@@ -248,6 +263,7 @@ const FSInfo _fs_info[] =
|
||||||
|
const FSInfo *
|
||||||
|
get_fs_info (const gchar *fstype)
|
||||||
|
{
|
||||||
|
+ const FSInfo *info = NULL;
|
||||||
|
guint n;
|
||||||
|
|
||||||
|
g_return_val_if_fail (fstype != NULL, NULL);
|
||||||
|
@@ -255,10 +271,20 @@ get_fs_info (const gchar *fstype)
|
||||||
|
for (n = 0; n < sizeof(_fs_info)/sizeof(FSInfo); n++)
|
||||||
|
{
|
||||||
|
if (strcmp (_fs_info[n].fstype, fstype) == 0)
|
||||||
|
- return &_fs_info[n];
|
||||||
|
+ {
|
||||||
|
+ info = &_fs_info[n];
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /* dosfstools >= 4.2 workaround */
|
||||||
|
+ if (g_str_equal (fstype, FS_VFAT) &&
|
||||||
|
+ bd_utils_check_util_version ("mkfs.vfat", "4.2", "--help", "mkfs.fat\\s+([\\d\\.]+).+", NULL))
|
||||||
|
+ {
|
||||||
|
+ info = &vfat_dosfstools_42;
|
||||||
|
}
|
||||||
|
|
||||||
|
- return NULL;
|
||||||
|
+ return info;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
32
SOURCES/udisks-2.10.0-g_mkdtemp-leak.patch
Normal file
32
SOURCES/udisks-2.10.0-g_mkdtemp-leak.patch
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
From fcdec5d58ba2bbe6d7ecf7168ab1a11282763041 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Tomas Bzatek <tbzatek@redhat.com>
|
||||||
|
Date: Fri, 16 Apr 2021 18:15:03 +0200
|
||||||
|
Subject: [PATCH 5/8] udiskslinuxfilesystemhelpers: Fix leaking string in case
|
||||||
|
g_mkdtemp() fails
|
||||||
|
|
||||||
|
---
|
||||||
|
src/udiskslinuxfilesystemhelpers.c | 6 +++---
|
||||||
|
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/udiskslinuxfilesystemhelpers.c b/src/udiskslinuxfilesystemhelpers.c
|
||||||
|
index 74d83152..7c5fc037 100644
|
||||||
|
--- a/src/udiskslinuxfilesystemhelpers.c
|
||||||
|
+++ b/src/udiskslinuxfilesystemhelpers.c
|
||||||
|
@@ -142,11 +142,11 @@ take_filesystem_ownership (const gchar *device,
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* device is not mounted, we need to mount it */
|
||||||
|
- mountpoint = g_mkdtemp (g_strdup ("/run/udisks2/temp-mount-XXXXXX"));
|
||||||
|
- if (mountpoint == NULL)
|
||||||
|
+ mountpoint = g_strdup ("/run/udisks2/temp-mount-XXXXXX");
|
||||||
|
+ if (g_mkdtemp (mountpoint) == NULL)
|
||||||
|
{
|
||||||
|
g_set_error (error, UDISKS_ERROR, UDISKS_ERROR_FAILED,
|
||||||
|
- "Cannot create temporary mountpoint.");
|
||||||
|
+ "Cannot create temporary mountpoint: %m.");
|
||||||
|
success = FALSE;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.30.2
|
||||||
|
|
@ -1,161 +0,0 @@
|
|||||||
From 26fcef727d68af97b1187d2ac3cad19acc3d97c8 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Tomas Bzatek <tbzatek@redhat.com>
|
|
||||||
Date: Tue, 16 May 2023 18:33:59 +0200
|
|
||||||
Subject: [PATCH 1/2] iscsi: Set node parameters before the Login/Logout action
|
|
||||||
|
|
||||||
This allows to properly pass required arguments like the CHAP
|
|
||||||
auth algorithms, etc.
|
|
||||||
---
|
|
||||||
modules/iscsi/udisksiscsiutil.c | 54 ++++++++++++++++++---------------
|
|
||||||
1 file changed, 29 insertions(+), 25 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/modules/iscsi/udisksiscsiutil.c b/modules/iscsi/udisksiscsiutil.c
|
|
||||||
index 78890106f0..b279442876 100644
|
|
||||||
--- a/modules/iscsi/udisksiscsiutil.c
|
|
||||||
+++ b/modules/iscsi/udisksiscsiutil.c
|
|
||||||
@@ -186,9 +186,10 @@ iscsi_perform_login_action (UDisksLinuxModuleISCSI *module,
|
|
||||||
}
|
|
||||||
|
|
||||||
static gint
|
|
||||||
-iscsi_node_set_parameters (struct libiscsi_context *ctx,
|
|
||||||
- struct libiscsi_node *node,
|
|
||||||
- GVariant *params)
|
|
||||||
+iscsi_node_set_parameters (struct libiscsi_context *ctx,
|
|
||||||
+ struct libiscsi_node *node,
|
|
||||||
+ GVariant *params,
|
|
||||||
+ gchar **errorstr)
|
|
||||||
{
|
|
||||||
GVariantIter iter;
|
|
||||||
GVariant *value;
|
|
||||||
@@ -207,9 +208,11 @@ iscsi_node_set_parameters (struct libiscsi_context *ctx,
|
|
||||||
|
|
||||||
/* Update the node parameter value. */
|
|
||||||
err = libiscsi_node_set_parameter (ctx, node, key, param_value);
|
|
||||||
+ if (errorstr && err != 0)
|
|
||||||
+ *errorstr = g_strdup (libiscsi_get_error_string (ctx));
|
|
||||||
|
|
||||||
g_variant_unref (value);
|
|
||||||
- g_free ((gpointer) key);
|
|
||||||
+ g_free (key);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
@@ -279,7 +282,7 @@ iscsi_login (UDisksLinuxModuleISCSI *module,
|
|
||||||
const gchar *password = NULL;
|
|
||||||
const gchar *reverse_username = NULL;
|
|
||||||
const gchar *reverse_password = NULL;
|
|
||||||
- gint err;
|
|
||||||
+ gint err = 0;
|
|
||||||
|
|
||||||
g_return_val_if_fail (UDISKS_IS_LINUX_MODULE_ISCSI (module), 1);
|
|
||||||
|
|
||||||
@@ -304,17 +307,18 @@ iscsi_login (UDisksLinuxModuleISCSI *module,
|
|
||||||
/* Get iscsi context. */
|
|
||||||
ctx = udisks_linux_module_iscsi_get_libiscsi_context (module);
|
|
||||||
|
|
||||||
- /* Login */
|
|
||||||
- err = iscsi_perform_login_action (module,
|
|
||||||
- ACTION_LOGIN,
|
|
||||||
- &node,
|
|
||||||
- &auth_info,
|
|
||||||
- errorstr);
|
|
||||||
+ /* Update node parameters. */
|
|
||||||
+ if (params)
|
|
||||||
+ err = iscsi_node_set_parameters (ctx, &node, params_without_chap, errorstr);
|
|
||||||
|
|
||||||
- if (err == 0 && params)
|
|
||||||
+ /* Login */
|
|
||||||
+ if (err == 0)
|
|
||||||
{
|
|
||||||
- /* Update node parameters. */
|
|
||||||
- err = iscsi_node_set_parameters (ctx, &node, params_without_chap);
|
|
||||||
+ err = iscsi_perform_login_action (module,
|
|
||||||
+ ACTION_LOGIN,
|
|
||||||
+ &node,
|
|
||||||
+ &auth_info,
|
|
||||||
+ errorstr);
|
|
||||||
}
|
|
||||||
|
|
||||||
g_variant_unref (params_without_chap);
|
|
||||||
@@ -334,7 +338,7 @@ iscsi_logout (UDisksLinuxModuleISCSI *module,
|
|
||||||
{
|
|
||||||
struct libiscsi_context *ctx;
|
|
||||||
struct libiscsi_node node = {0,};
|
|
||||||
- gint err;
|
|
||||||
+ gint err = 0;
|
|
||||||
|
|
||||||
g_return_val_if_fail (UDISKS_IS_LINUX_MODULE_ISCSI (module), 1);
|
|
||||||
|
|
||||||
@@ -344,18 +348,18 @@ iscsi_logout (UDisksLinuxModuleISCSI *module,
|
|
||||||
/* Get iscsi context. */
|
|
||||||
ctx = udisks_linux_module_iscsi_get_libiscsi_context (module);
|
|
||||||
|
|
||||||
- /* Logout */
|
|
||||||
- err = iscsi_perform_login_action (module,
|
|
||||||
- ACTION_LOGOUT,
|
|
||||||
- &node,
|
|
||||||
- NULL,
|
|
||||||
- errorstr);
|
|
||||||
+ /* Update node parameters. */
|
|
||||||
+ if (params)
|
|
||||||
+ err = iscsi_node_set_parameters (ctx, &node, params, errorstr);
|
|
||||||
|
|
||||||
- if (err == 0 && params)
|
|
||||||
+ /* Logout */
|
|
||||||
+ if (err == 0)
|
|
||||||
{
|
|
||||||
- /* Update node parameters. */
|
|
||||||
- err = iscsi_node_set_parameters (ctx, &node, params);
|
|
||||||
-
|
|
||||||
+ err = iscsi_perform_login_action (module,
|
|
||||||
+ ACTION_LOGOUT,
|
|
||||||
+ &node,
|
|
||||||
+ NULL,
|
|
||||||
+ errorstr);
|
|
||||||
}
|
|
||||||
|
|
||||||
return err;
|
|
||||||
|
|
||||||
From 749812784abcc4c0492bda0703bff5d3dae052f9 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Tomas Bzatek <tbzatek@redhat.com>
|
|
||||||
Date: Tue, 16 May 2023 18:35:42 +0200
|
|
||||||
Subject: [PATCH 2/2] tests: Disallow MD5 for iscsi CHAP login
|
|
||||||
|
|
||||||
MD5 is unavailable in FIPS mode:
|
|
||||||
|
|
||||||
iscsid[82167]: iscsid: Ignoring CHAP algorthm request for MD5 due to crypto lib configuration
|
|
||||||
iscsid[82167]: iscsid: Couldn't set CHAP algorithm list
|
|
||||||
kernel: rx_data returned 0, expecting 48.
|
|
||||||
kernel: iSCSI Login negotiation failed.
|
|
||||||
---
|
|
||||||
src/tests/dbus-tests/test_30_iscsi.py | 3 +++
|
|
||||||
1 file changed, 3 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/src/tests/dbus-tests/test_30_iscsi.py b/src/tests/dbus-tests/test_30_iscsi.py
|
|
||||||
index 09e975f30c..02ba6c92b0 100644
|
|
||||||
--- a/src/tests/dbus-tests/test_30_iscsi.py
|
|
||||||
+++ b/src/tests/dbus-tests/test_30_iscsi.py
|
|
||||||
@@ -161,6 +161,7 @@ def test_login_chap_auth(self):
|
|
||||||
self.assertEqual(port, self.port)
|
|
||||||
|
|
||||||
options = dbus.Dictionary(signature='sv')
|
|
||||||
+ options['node.session.auth.chap_algs'] = 'SHA3-256,SHA256,SHA1' # disallow MD5
|
|
||||||
options['username'] = self.initiator
|
|
||||||
|
|
||||||
msg = 'Login failed: initiator reported error \(24 - iSCSI login failed due to authorization failure\)'
|
|
||||||
@@ -227,6 +228,7 @@ def test_login_mutual_auth(self):
|
|
||||||
self.assertEqual(port, self.port)
|
|
||||||
|
|
||||||
options = dbus.Dictionary(signature='sv')
|
|
||||||
+ options['node.session.auth.chap_algs'] = 'SHA3-256,SHA256,SHA1' # disallow MD5
|
|
||||||
options['username'] = self.initiator
|
|
||||||
options['password'] = self.password
|
|
||||||
options['reverse-username'] = self.mutual_iqn
|
|
||||||
@@ -335,6 +337,7 @@ def test_login_noauth_badauth(self):
|
|
||||||
|
|
||||||
# first attempt - wrong password
|
|
||||||
options = dbus.Dictionary(signature='sv')
|
|
||||||
+ options['node.session.auth.chap_algs'] = 'SHA3-256,SHA256,SHA1' # disallow MD5
|
|
||||||
options['username'] = self.initiator
|
|
||||||
msg = r'Login failed: initiator reported error \((19 - encountered non-retryable iSCSI login failure|24 - iSCSI login failed due to authorization failure)\)'
|
|
||||||
with six.assertRaisesRegex(self, dbus.exceptions.DBusException, msg):
|
|
@ -1,29 +0,0 @@
|
|||||||
From 9a6e6b700b19539465ab6b241f04b94d4b3769c4 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Tomas Bzatek <tbzatek@redhat.com>
|
|
||||||
Date: Mon, 10 Oct 2022 13:55:29 +0200
|
|
||||||
Subject: [PATCH] iscsi: Always set auth info
|
|
||||||
|
|
||||||
In case of reusing a context auth info needs to be
|
|
||||||
always set to override previous data.
|
|
||||||
---
|
|
||||||
modules/iscsi/udisksiscsiutil.c | 7 ++-----
|
|
||||||
1 file changed, 2 insertions(+), 5 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/modules/iscsi/udisksiscsiutil.c b/modules/iscsi/udisksiscsiutil.c
|
|
||||||
index 8fdae889c7..78890106f0 100644
|
|
||||||
--- a/modules/iscsi/udisksiscsiutil.c
|
|
||||||
+++ b/modules/iscsi/udisksiscsiutil.c
|
|
||||||
@@ -171,11 +171,8 @@ iscsi_perform_login_action (UDisksLinuxModuleISCSI *module,
|
|
||||||
/* Get a libiscsi context. */
|
|
||||||
ctx = udisks_linux_module_iscsi_get_libiscsi_context (module);
|
|
||||||
|
|
||||||
- if (action == ACTION_LOGIN &&
|
|
||||||
- auth_info && auth_info->method == libiscsi_auth_chap)
|
|
||||||
- {
|
|
||||||
- libiscsi_node_set_auth (ctx, node, auth_info);
|
|
||||||
- }
|
|
||||||
+ if (action == ACTION_LOGIN && auth_info)
|
|
||||||
+ libiscsi_node_set_auth (ctx, node, auth_info);
|
|
||||||
|
|
||||||
/* Login or Logout */
|
|
||||||
err = action == ACTION_LOGIN ?
|
|
@ -1,73 +0,0 @@
|
|||||||
From 0441d0f93788b617a38b75e4a44744406976c822 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Tomas Bzatek <tbzatek@redhat.com>
|
|
||||||
Date: Mon, 31 Jul 2023 16:48:28 +0200
|
|
||||||
Subject: [PATCH] iscsi: Fix login on firmware-discovered nodes
|
|
||||||
|
|
||||||
There's currently no way to distinguish between force-no-auth and
|
|
||||||
use-fw-discovered-auth-info scenarios from the D-Bus API so let's
|
|
||||||
assume that the caller wants to retain the firmware-discovered auth
|
|
||||||
info unless overriden with specific CHAP credentials.
|
|
||||||
---
|
|
||||||
.../data/org.freedesktop.UDisks2.iscsi.xml | 3 +++
|
|
||||||
modules/iscsi/udisksiscsiutil.c | 27 ++++++++++++++++++-
|
|
||||||
2 files changed, 29 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/modules/iscsi/data/org.freedesktop.UDisks2.iscsi.xml b/modules/iscsi/data/org.freedesktop.UDisks2.iscsi.xml
|
|
||||||
index cf262deb68..e8a717ff1d 100644
|
|
||||||
--- a/modules/iscsi/data/org.freedesktop.UDisks2.iscsi.xml
|
|
||||||
+++ b/modules/iscsi/data/org.freedesktop.UDisks2.iscsi.xml
|
|
||||||
@@ -162,6 +162,9 @@
|
|
||||||
<parameter>reverse-password</parameter> will be used for CHAP
|
|
||||||
authentication.
|
|
||||||
|
|
||||||
+ Firmware-discovered nodes retain their authentication info unless
|
|
||||||
+ overriden with specified credentials (see above).
|
|
||||||
+
|
|
||||||
All the additional options are transformed into the interface
|
|
||||||
parameters. For example, if an automatic node startup is desired, the
|
|
||||||
<parameter>node.startup</parameter> needs to be set to
|
|
||||||
diff --git a/modules/iscsi/udisksiscsiutil.c b/modules/iscsi/udisksiscsiutil.c
|
|
||||||
index b279442876..fb4f5ea167 100644
|
|
||||||
--- a/modules/iscsi/udisksiscsiutil.c
|
|
||||||
+++ b/modules/iscsi/udisksiscsiutil.c
|
|
||||||
@@ -264,6 +264,31 @@ iscsi_params_pop_chap_data (GVariant *params,
|
|
||||||
return g_variant_dict_end (&dict);
|
|
||||||
}
|
|
||||||
|
|
||||||
+static gboolean
|
|
||||||
+is_auth_required (struct libiscsi_context *ctx,
|
|
||||||
+ struct libiscsi_node *node,
|
|
||||||
+ struct libiscsi_auth_info *auth_info)
|
|
||||||
+{
|
|
||||||
+ char val[LIBISCSI_VALUE_MAXLEN + 1] = {'\0',};
|
|
||||||
+ int ret;
|
|
||||||
+
|
|
||||||
+ /* TODO: No way to distinguish between the "no auth requested" and
|
|
||||||
+ * "retain discovered auth info" scenarios from the D-Bus API.
|
|
||||||
+ */
|
|
||||||
+
|
|
||||||
+ /* In case CHAP auth is requested, let's use it unconditionally */
|
|
||||||
+ if (auth_info->method != libiscsi_auth_none)
|
|
||||||
+ return TRUE;
|
|
||||||
+
|
|
||||||
+ /* Avoid auth override on firmware-discovered nodes */
|
|
||||||
+ ret = libiscsi_node_get_parameter (ctx, node, "node.discovery_type", val);
|
|
||||||
+ if (ret == 0 && g_strcmp0 (val, "fw") == 0)
|
|
||||||
+ return FALSE;
|
|
||||||
+
|
|
||||||
+ /* Not a firmware-discovered node, maintain legacy rules */
|
|
||||||
+ return TRUE;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
gint
|
|
||||||
iscsi_login (UDisksLinuxModuleISCSI *module,
|
|
||||||
const gchar *name,
|
|
||||||
@@ -317,7 +342,7 @@ iscsi_login (UDisksLinuxModuleISCSI *module,
|
|
||||||
err = iscsi_perform_login_action (module,
|
|
||||||
ACTION_LOGIN,
|
|
||||||
&node,
|
|
||||||
- &auth_info,
|
|
||||||
+ is_auth_required (ctx, &node, &auth_info) ? &auth_info : NULL,
|
|
||||||
errorstr);
|
|
||||||
}
|
|
||||||
|
|
@ -1,75 +0,0 @@
|
|||||||
commit fab797fcf5e4c8e09e4cde45647951acd764415e
|
|
||||||
Author: Tomas Bzatek <tbzatek@redhat.com>
|
|
||||||
Date: Mon Oct 10 13:58:15 2022 +0200
|
|
||||||
|
|
||||||
tests: Add bad auth test for iscsi
|
|
||||||
|
|
||||||
This tests that the auth info is properly set for each login call,
|
|
||||||
overriding previously set auth info with no trace.
|
|
||||||
|
|
||||||
diff --git a/src/tests/dbus-tests/test_30_iscsi.py b/src/tests/dbus-tests/test_30_iscsi.py
|
|
||||||
index 34bdfc4b..6ac8386b 100644
|
|
||||||
--- a/src/tests/dbus-tests/test_30_iscsi.py
|
|
||||||
+++ b/src/tests/dbus-tests/test_30_iscsi.py
|
|
||||||
@@ -284,3 +284,61 @@ class UdisksISCSITest(udiskstestcase.UdisksTestCase):
|
|
||||||
# make sure the session object is no longer on dbus
|
|
||||||
objects = udisks.GetManagedObjects(dbus_interface='org.freedesktop.DBus.ObjectManager')
|
|
||||||
self.assertNotIn(session_path, objects.keys())
|
|
||||||
+
|
|
||||||
+ def test_login_noauth_badauth(self):
|
|
||||||
+ """
|
|
||||||
+ Test auth info override
|
|
||||||
+ """
|
|
||||||
+ manager = self.get_object('/Manager')
|
|
||||||
+ nodes, _ = manager.DiscoverSendTargets(self.address, self.port, self.no_options,
|
|
||||||
+ dbus_interface=self.iface_prefix + '.Manager.ISCSI.Initiator',
|
|
||||||
+ timeout=self.iscsi_timeout)
|
|
||||||
+
|
|
||||||
+ node = next((node for node in nodes if node[0] == self.noauth_iqn), None)
|
|
||||||
+ self.assertIsNotNone(node)
|
|
||||||
+
|
|
||||||
+ (iqn, tpg, host, port, iface) = node
|
|
||||||
+ self.assertEqual(iqn, self.noauth_iqn)
|
|
||||||
+ self.assertEqual(host, self.address)
|
|
||||||
+ self.assertEqual(port, self.port)
|
|
||||||
+
|
|
||||||
+ self.addCleanup(self._force_lougout, self.noauth_iqn)
|
|
||||||
+
|
|
||||||
+ # first attempt - wrong password
|
|
||||||
+ options = dbus.Dictionary(signature='sv')
|
|
||||||
+ options['username'] = self.initiator
|
|
||||||
+ msg = 'Login failed: initiator reported error'
|
|
||||||
+ with six.assertRaisesRegex(self, dbus.exceptions.DBusException, msg):
|
|
||||||
+ options['password'] = '12345'
|
|
||||||
+ manager.Login(iqn, tpg, host, port, iface, options,
|
|
||||||
+ dbus_interface=self.iface_prefix + '.Manager.ISCSI.Initiator',
|
|
||||||
+ timeout=self.iscsi_timeout)
|
|
||||||
+
|
|
||||||
+ # second atttempt - no password
|
|
||||||
+ manager.Login(iqn, tpg, host, port, iface, self.no_options,
|
|
||||||
+ dbus_interface=self.iface_prefix + '.Manager.ISCSI.Initiator',
|
|
||||||
+ timeout=self.iscsi_timeout)
|
|
||||||
+
|
|
||||||
+ devs = glob.glob('/dev/disk/by-path/*%s*' % iqn)
|
|
||||||
+ self.assertEqual(len(devs), 1)
|
|
||||||
+
|
|
||||||
+ # check if the block device have 'Symlinks' property updated
|
|
||||||
+ disk_name = os.path.realpath(devs[0]).split('/')[-1]
|
|
||||||
+ disk_obj = self.get_object('/block_devices/' + disk_name)
|
|
||||||
+ dbus_path = str(disk_obj.object_path)
|
|
||||||
+ self.assertIsNotNone(disk_obj)
|
|
||||||
+
|
|
||||||
+ symlinks = self.get_property_raw(disk_obj, '.Block', 'Symlinks')
|
|
||||||
+ self.assertIn(self.str_to_ay(devs[0]), symlinks)
|
|
||||||
+
|
|
||||||
+ manager.Logout(iqn, tpg, host, port, iface, self.no_options,
|
|
||||||
+ dbus_interface=self.iface_prefix + '.Manager.ISCSI.Initiator',
|
|
||||||
+ timeout=self.iscsi_timeout)
|
|
||||||
+
|
|
||||||
+ devs = glob.glob('/dev/disk/by-path/*%s*' % iqn)
|
|
||||||
+ self.assertEqual(len(devs), 0)
|
|
||||||
+
|
|
||||||
+ # make sure the disk is no longer on dbus
|
|
||||||
+ udisks = self.get_object('')
|
|
||||||
+ objects = udisks.GetManagedObjects(dbus_interface='org.freedesktop.DBus.ObjectManager')
|
|
||||||
+ self.assertNotIn(dbus_path, objects.keys())
|
|
@ -1,51 +0,0 @@
|
|||||||
commit 13a6a27eecdd1fb527b9151309366970b182a58d
|
|
||||||
Author: Tomas Bzatek <tbzatek@redhat.com>
|
|
||||||
Date: Thu Oct 20 17:17:10 2022 +0200
|
|
||||||
|
|
||||||
tests: Fix LIO target config auth
|
|
||||||
|
|
||||||
Linux kernel 6.0 brought number of the LIO target changes related to authentication
|
|
||||||
that made our tests fail. Turned out our target config was incorrect, e.g.
|
|
||||||
not requiring auth for CHAP tests, etc. The kernel 6.0 looks to be more strict
|
|
||||||
in this regard.
|
|
||||||
|
|
||||||
diff --git a/src/tests/dbus-tests/targetcli_config.json b/src/tests/dbus-tests/targetcli_config.json
|
|
||||||
index 25d506b6..3be9eac2 100644
|
|
||||||
--- a/src/tests/dbus-tests/targetcli_config.json
|
|
||||||
+++ b/src/tests/dbus-tests/targetcli_config.json
|
|
||||||
@@ -385,7 +385,7 @@
|
|
||||||
"tpgs": [
|
|
||||||
{
|
|
||||||
"attributes": {
|
|
||||||
- "authentication": 0,
|
|
||||||
+ "authentication": 1,
|
|
||||||
"cache_dynamic_acls": 0,
|
|
||||||
"default_cmdsn_depth": 64,
|
|
||||||
"default_erl": 0,
|
|
||||||
@@ -432,7 +432,7 @@
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"parameters": {
|
|
||||||
- "AuthMethod": "CHAP,None",
|
|
||||||
+ "AuthMethod": "CHAP",
|
|
||||||
"DataDigest": "CRC32C,None",
|
|
||||||
"DataPDUInOrder": "Yes",
|
|
||||||
"DataSequenceInOrder": "Yes",
|
|
||||||
@@ -471,7 +471,7 @@
|
|
||||||
"tpgs": [
|
|
||||||
{
|
|
||||||
"attributes": {
|
|
||||||
- "authentication": 0,
|
|
||||||
+ "authentication": 1,
|
|
||||||
"cache_dynamic_acls": 0,
|
|
||||||
"default_cmdsn_depth": 64,
|
|
||||||
"default_erl": 0,
|
|
||||||
@@ -520,7 +520,7 @@
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"parameters": {
|
|
||||||
- "AuthMethod": "CHAP,None",
|
|
||||||
+ "AuthMethod": "CHAP",
|
|
||||||
"DataDigest": "CRC32C,None",
|
|
||||||
"DataPDUInOrder": "Yes",
|
|
||||||
"DataSequenceInOrder": "Yes",
|
|
@ -1,37 +0,0 @@
|
|||||||
commit 1bf172603e4cc77da70d8fd13b6ba6c8b8c91600
|
|
||||||
Author: Tomas Bzatek <tbzatek@redhat.com>
|
|
||||||
Date: Thu Oct 20 17:53:20 2022 +0200
|
|
||||||
|
|
||||||
tests: Test iscsi noauth in test_login_chap_auth
|
|
||||||
|
|
||||||
The other way is already tested in test_login_noauth_badauth.
|
|
||||||
|
|
||||||
diff --git a/src/tests/dbus-tests/test_30_iscsi.py b/src/tests/dbus-tests/test_30_iscsi.py
|
|
||||||
index 2b75462a..f2594d99 100644
|
|
||||||
--- a/src/tests/dbus-tests/test_30_iscsi.py
|
|
||||||
+++ b/src/tests/dbus-tests/test_30_iscsi.py
|
|
||||||
@@ -151,8 +151,14 @@ class UdisksISCSITest(udiskstestcase.UdisksTestCase):
|
|
||||||
options = dbus.Dictionary(signature='sv')
|
|
||||||
options['username'] = self.initiator
|
|
||||||
|
|
||||||
+ msg = 'Login failed: initiator reported error \(24 - iSCSI login failed due to authorization failure\)'
|
|
||||||
+ # missing auth info
|
|
||||||
+ with six.assertRaisesRegex(self, dbus.exceptions.DBusException, msg):
|
|
||||||
+ manager.Login(iqn, tpg, host, port, iface, self.no_options,
|
|
||||||
+ dbus_interface=self.iface_prefix + '.Manager.ISCSI.Initiator',
|
|
||||||
+ timeout=self.iscsi_timeout)
|
|
||||||
+
|
|
||||||
# wrong password
|
|
||||||
- msg = 'Login failed: initiator reported error'
|
|
||||||
with six.assertRaisesRegex(self, dbus.exceptions.DBusException, msg):
|
|
||||||
options['password'] = '12345'
|
|
||||||
manager.Login(iqn, tpg, host, port, iface, options,
|
|
||||||
@@ -318,7 +324,7 @@ class UdisksISCSITest(udiskstestcase.UdisksTestCase):
|
|
||||||
# first attempt - wrong password
|
|
||||||
options = dbus.Dictionary(signature='sv')
|
|
||||||
options['username'] = self.initiator
|
|
||||||
- msg = 'Login failed: initiator reported error'
|
|
||||||
+ msg = r'Login failed: initiator reported error \((19 - encountered non-retryable iSCSI login failure|24 - iSCSI login failed due to authorization failure)\)'
|
|
||||||
with six.assertRaisesRegex(self, dbus.exceptions.DBusException, msg):
|
|
||||||
options['password'] = '12345'
|
|
||||||
manager.Login(iqn, tpg, host, port, iface, options,
|
|
@ -1,42 +0,0 @@
|
|||||||
From fbe970add68e6d9d998fb7f78377368c403e200d Mon Sep 17 00:00:00 2001
|
|
||||||
From: Tomas Bzatek <tbzatek@redhat.com>
|
|
||||||
Date: Mon, 31 Oct 2022 15:15:31 +0100
|
|
||||||
Subject: [PATCH] tests: Restart iscsid on every InitiatorName change
|
|
||||||
|
|
||||||
The test LIO target config expects a specific initiator name as set
|
|
||||||
by the ACLs. However the iscsid daemon only seems to be reading
|
|
||||||
the InitiatorName string on startup and in case the service is running
|
|
||||||
with a different name, the auth tests will fail.
|
|
||||||
|
|
||||||
As a workaround, restart the iscsid service after each change.
|
|
||||||
A proper way through libiscsi or libopeniscsiusr would be nice -> TODO.
|
|
||||||
---
|
|
||||||
src/tests/dbus-tests/test_30_iscsi.py | 12 ++++++++++++
|
|
||||||
1 file changed, 12 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/src/tests/dbus-tests/test_30_iscsi.py b/src/tests/dbus-tests/test_30_iscsi.py
|
|
||||||
index f2594d992..09e975f30 100644
|
|
||||||
--- a/src/tests/dbus-tests/test_30_iscsi.py
|
|
||||||
+++ b/src/tests/dbus-tests/test_30_iscsi.py
|
|
||||||
@@ -48,9 +48,21 @@ def _force_lougout(self, target):
|
|
||||||
def _set_initiator_name(self):
|
|
||||||
manager = self.get_object('/Manager')
|
|
||||||
|
|
||||||
+ # make backup of INITIATOR_FILE and restore it at the end
|
|
||||||
+ try:
|
|
||||||
+ initiatorname_backup = self.read_file(INITIATOR_FILE)
|
|
||||||
+ self.addCleanup(self.write_file, INITIATOR_FILE, initiatorname_backup)
|
|
||||||
+ except FileNotFoundError as e:
|
|
||||||
+ # no existing file, simply remove it once finished
|
|
||||||
+ self.addCleanup(self.remove_file, INITIATOR_FILE, True)
|
|
||||||
+
|
|
||||||
manager.SetInitiatorName(self.initiator, self.no_options,
|
|
||||||
dbus_interface=self.iface_prefix + '.Manager.ISCSI.Initiator')
|
|
||||||
|
|
||||||
+ # running iscsid needs to be restarted to reflect the change
|
|
||||||
+ self.run_command('systemctl try-reload-or-restart iscsid.service')
|
|
||||||
+ # ignore the return code in case of non-systemd distros
|
|
||||||
+
|
|
||||||
init = manager.GetInitiatorName(self.no_options,
|
|
||||||
dbus_interface=self.iface_prefix + '.Manager.ISCSI.Initiator')
|
|
||||||
self.assertEqual(init, self.initiator)
|
|
@ -1,156 +0,0 @@
|
|||||||
commit 4090b87a1468fcc479aafd264328abfed471daeb
|
|
||||||
Author: Tomas Bzatek <tbzatek@redhat.com>
|
|
||||||
Date: Thu Jun 3 16:09:10 2021 +0200
|
|
||||||
|
|
||||||
tests: Extend iscsi method call timeouts
|
|
||||||
|
|
||||||
The default tests 100 sec. D-Bus method call timeout is not enough as
|
|
||||||
the iscsi initiator timeouts are typically around 120 sec, e.g. for
|
|
||||||
the Login operation.
|
|
||||||
|
|
||||||
diff --git a/src/tests/dbus-tests/test_30_iscsi.py b/src/tests/dbus-tests/test_30_iscsi.py
|
|
||||||
index 8ec6858c..34bdfc4b 100644
|
|
||||||
--- a/src/tests/dbus-tests/test_30_iscsi.py
|
|
||||||
+++ b/src/tests/dbus-tests/test_30_iscsi.py
|
|
||||||
@@ -26,6 +26,12 @@ class UdisksISCSITest(udiskstestcase.UdisksTestCase):
|
|
||||||
chap_iqn = 'iqn.2003-01.udisks.test:iscsi-test-chap'
|
|
||||||
mutual_iqn = 'iqn.2003-01.udisks.test:iscsi-test-mutual'
|
|
||||||
|
|
||||||
+ # Define common D-Bus method call timeout that needs to be slightly longer
|
|
||||||
+ # than the corresponding timeout defined in libiscsi:
|
|
||||||
+ # #define ISCSID_REQ_TIMEOUT 1000
|
|
||||||
+ # In reality the timeout is typically around 120 sec for the 'login' operation.
|
|
||||||
+ iscsi_timeout = 1000 + 5
|
|
||||||
+
|
|
||||||
@classmethod
|
|
||||||
def setUpClass(cls):
|
|
||||||
udiskstestcase.UdisksTestCase.setUpClass()
|
|
||||||
@@ -78,7 +84,8 @@ class UdisksISCSITest(udiskstestcase.UdisksTestCase):
|
|
||||||
def test_login_noauth(self):
|
|
||||||
manager = self.get_object('/Manager')
|
|
||||||
nodes, _ = manager.DiscoverSendTargets(self.address, self.port, self.no_options,
|
|
||||||
- dbus_interface=self.iface_prefix + '.Manager.ISCSI.Initiator')
|
|
||||||
+ dbus_interface=self.iface_prefix + '.Manager.ISCSI.Initiator',
|
|
||||||
+ timeout=self.iscsi_timeout)
|
|
||||||
|
|
||||||
node = next((node for node in nodes if node[0] == self.noauth_iqn), None)
|
|
||||||
self.assertIsNotNone(node)
|
|
||||||
@@ -90,7 +97,8 @@ class UdisksISCSITest(udiskstestcase.UdisksTestCase):
|
|
||||||
|
|
||||||
self.addCleanup(self._force_lougout, self.noauth_iqn)
|
|
||||||
manager.Login(iqn, tpg, host, port, iface, self.no_options,
|
|
||||||
- dbus_interface=self.iface_prefix + '.Manager.ISCSI.Initiator')
|
|
||||||
+ dbus_interface=self.iface_prefix + '.Manager.ISCSI.Initiator',
|
|
||||||
+ timeout=self.iscsi_timeout)
|
|
||||||
|
|
||||||
devs = glob.glob('/dev/disk/by-path/*%s*' % iqn)
|
|
||||||
self.assertEqual(len(devs), 1)
|
|
||||||
@@ -105,7 +113,8 @@ class UdisksISCSITest(udiskstestcase.UdisksTestCase):
|
|
||||||
self.assertIn(self.str_to_ay(devs[0]), symlinks)
|
|
||||||
|
|
||||||
manager.Logout(iqn, tpg, host, port, iface, self.no_options,
|
|
||||||
- dbus_interface=self.iface_prefix + '.Manager.ISCSI.Initiator')
|
|
||||||
+ dbus_interface=self.iface_prefix + '.Manager.ISCSI.Initiator',
|
|
||||||
+ timeout=self.iscsi_timeout)
|
|
||||||
|
|
||||||
devs = glob.glob('/dev/disk/by-path/*%s*' % iqn)
|
|
||||||
self.assertEqual(len(devs), 0)
|
|
||||||
@@ -120,7 +129,8 @@ class UdisksISCSITest(udiskstestcase.UdisksTestCase):
|
|
||||||
|
|
||||||
manager = self.get_object('/Manager')
|
|
||||||
nodes, _ = manager.DiscoverSendTargets(self.address, self.port, self.no_options,
|
|
||||||
- dbus_interface=self.iface_prefix + '.Manager.ISCSI.Initiator')
|
|
||||||
+ dbus_interface=self.iface_prefix + '.Manager.ISCSI.Initiator',
|
|
||||||
+ timeout=self.iscsi_timeout)
|
|
||||||
|
|
||||||
node = next((node for node in nodes if node[0] == self.chap_iqn), None)
|
|
||||||
self.assertIsNotNone(node)
|
|
||||||
@@ -138,14 +148,16 @@ class UdisksISCSITest(udiskstestcase.UdisksTestCase):
|
|
||||||
with six.assertRaisesRegex(self, dbus.exceptions.DBusException, msg):
|
|
||||||
options['password'] = '12345'
|
|
||||||
manager.Login(iqn, tpg, host, port, iface, options,
|
|
||||||
- dbus_interface=self.iface_prefix + '.Manager.ISCSI.Initiator')
|
|
||||||
+ dbus_interface=self.iface_prefix + '.Manager.ISCSI.Initiator',
|
|
||||||
+ timeout=self.iscsi_timeout)
|
|
||||||
|
|
||||||
# right password
|
|
||||||
options['password'] = self.password
|
|
||||||
|
|
||||||
self.addCleanup(self._force_lougout, self.chap_iqn)
|
|
||||||
manager.Login(iqn, tpg, host, port, iface, options,
|
|
||||||
- dbus_interface=self.iface_prefix + '.Manager.ISCSI.Initiator')
|
|
||||||
+ dbus_interface=self.iface_prefix + '.Manager.ISCSI.Initiator',
|
|
||||||
+ timeout=self.iscsi_timeout)
|
|
||||||
|
|
||||||
devs = glob.glob('/dev/disk/by-path/*%s*' % iqn)
|
|
||||||
self.assertEqual(len(devs), 1)
|
|
||||||
@@ -160,7 +172,8 @@ class UdisksISCSITest(udiskstestcase.UdisksTestCase):
|
|
||||||
self.assertIn(self.str_to_ay(devs[0]), symlinks)
|
|
||||||
|
|
||||||
manager.Logout(iqn, tpg, host, port, iface, self.no_options,
|
|
||||||
- dbus_interface=self.iface_prefix + '.Manager.ISCSI.Initiator')
|
|
||||||
+ dbus_interface=self.iface_prefix + '.Manager.ISCSI.Initiator',
|
|
||||||
+ timeout=self.iscsi_timeout)
|
|
||||||
|
|
||||||
devs = glob.glob('/dev/disk/by-path/*%s*' % iqn)
|
|
||||||
self.assertEqual(len(devs), 0)
|
|
||||||
@@ -175,7 +188,8 @@ class UdisksISCSITest(udiskstestcase.UdisksTestCase):
|
|
||||||
|
|
||||||
manager = self.get_object('/Manager')
|
|
||||||
nodes, _ = manager.DiscoverSendTargets(self.address, self.port, self.no_options,
|
|
||||||
- dbus_interface=self.iface_prefix + '.Manager.ISCSI.Initiator')
|
|
||||||
+ dbus_interface=self.iface_prefix + '.Manager.ISCSI.Initiator',
|
|
||||||
+ timeout=self.iscsi_timeout)
|
|
||||||
|
|
||||||
node = next((node for node in nodes if node[0] == self.mutual_iqn), None)
|
|
||||||
self.assertIsNotNone(node)
|
|
||||||
@@ -193,7 +207,8 @@ class UdisksISCSITest(udiskstestcase.UdisksTestCase):
|
|
||||||
|
|
||||||
self.addCleanup(self._force_lougout, self.mutual_iqn)
|
|
||||||
manager.Login(iqn, tpg, host, port, iface, options,
|
|
||||||
- dbus_interface=self.iface_prefix + '.Manager.ISCSI.Initiator')
|
|
||||||
+ dbus_interface=self.iface_prefix + '.Manager.ISCSI.Initiator',
|
|
||||||
+ timeout=self.iscsi_timeout)
|
|
||||||
|
|
||||||
devs = glob.glob('/dev/disk/by-path/*%s*' % iqn)
|
|
||||||
self.assertEqual(len(devs), 1)
|
|
||||||
@@ -208,7 +223,8 @@ class UdisksISCSITest(udiskstestcase.UdisksTestCase):
|
|
||||||
self.assertIn(self.str_to_ay(devs[0]), symlinks)
|
|
||||||
|
|
||||||
manager.Logout(iqn, tpg, host, port, iface, self.no_options,
|
|
||||||
- dbus_interface=self.iface_prefix + '.Manager.ISCSI.Initiator')
|
|
||||||
+ dbus_interface=self.iface_prefix + '.Manager.ISCSI.Initiator',
|
|
||||||
+ timeout=self.iscsi_timeout)
|
|
||||||
|
|
||||||
devs = glob.glob('/dev/disk/by-path/*%s*' % iqn)
|
|
||||||
self.assertEqual(len(devs), 0)
|
|
||||||
@@ -228,7 +244,8 @@ class UdisksISCSITest(udiskstestcase.UdisksTestCase):
|
|
||||||
self.skipTest("ISCSI.Session objects not supported.")
|
|
||||||
|
|
||||||
nodes, _ = manager.DiscoverSendTargets(self.address, self.port, self.no_options,
|
|
||||||
- dbus_interface=self.iface_prefix + '.Manager.ISCSI.Initiator')
|
|
||||||
+ dbus_interface=self.iface_prefix + '.Manager.ISCSI.Initiator',
|
|
||||||
+ timeout=self.iscsi_timeout)
|
|
||||||
|
|
||||||
node = next((node for node in nodes if node[0] == self.noauth_iqn), None)
|
|
||||||
self.assertIsNotNone(node)
|
|
||||||
@@ -237,7 +254,8 @@ class UdisksISCSITest(udiskstestcase.UdisksTestCase):
|
|
||||||
|
|
||||||
self.addCleanup(self._force_lougout, self.noauth_iqn)
|
|
||||||
manager.Login(iqn, tpg, host, port, iface, self.no_options,
|
|
||||||
- dbus_interface=self.iface_prefix + '.Manager.ISCSI.Initiator')
|
|
||||||
+ dbus_interface=self.iface_prefix + '.Manager.ISCSI.Initiator',
|
|
||||||
+ timeout=self.iscsi_timeout)
|
|
||||||
|
|
||||||
# /org/freedesktop/UDisks2/iscsi/sessionX should be created
|
|
||||||
udisks = self.get_object('')
|
|
||||||
@@ -260,7 +278,8 @@ class UdisksISCSITest(udiskstestcase.UdisksTestCase):
|
|
||||||
|
|
||||||
# logout using session
|
|
||||||
session.Logout(self.no_options,
|
|
||||||
- dbus_interface=self.iface_prefix + '.ISCSI.Session')
|
|
||||||
+ dbus_interface=self.iface_prefix + '.ISCSI.Session',
|
|
||||||
+ timeout=self.iscsi_timeout)
|
|
||||||
|
|
||||||
# make sure the session object is no longer on dbus
|
|
||||||
objects = udisks.GetManagedObjects(dbus_interface='org.freedesktop.DBus.ObjectManager')
|
|
@ -1,113 +0,0 @@
|
|||||||
From 28c39786927ad683f56c031d80a5c06f5b5b9aea Mon Sep 17 00:00:00 2001
|
|
||||||
From: Marius Vollmer <mvollmer@redhat.com>
|
|
||||||
Date: Tue, 5 Apr 2022 11:23:23 +0300
|
|
||||||
Subject: [PATCH] lvm2: Only install results of most recently started udpates
|
|
||||||
|
|
||||||
Fixes #966
|
|
||||||
---
|
|
||||||
modules/lvm2/udiskslinuxmodulelvm2.c | 13 ++++++++++++-
|
|
||||||
modules/lvm2/udiskslinuxvolumegroupobject.c | 12 ++++++++++++
|
|
||||||
2 files changed, 24 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/modules/lvm2/udiskslinuxmodulelvm2.c b/modules/lvm2/udiskslinuxmodulelvm2.c
|
|
||||||
index 8e1ea13aec..77ecf94a6d 100644
|
|
||||||
--- a/modules/lvm2/udiskslinuxmodulelvm2.c
|
|
||||||
+++ b/modules/lvm2/udiskslinuxmodulelvm2.c
|
|
||||||
@@ -59,6 +59,8 @@ struct _UDisksLinuxModuleLVM2 {
|
|
||||||
|
|
||||||
gint delayed_update_id;
|
|
||||||
gboolean coldplug_done;
|
|
||||||
+
|
|
||||||
+ guint32 update_epoch;
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef struct _UDisksLinuxModuleLVM2Class UDisksLinuxModuleLVM2Class;
|
|
||||||
@@ -86,6 +88,7 @@ udisks_linux_module_lvm2_constructed (GObject *object)
|
|
||||||
|
|
||||||
module->name_to_volume_group = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, (GDestroyNotify) g_object_unref);
|
|
||||||
module->coldplug_done = FALSE;
|
|
||||||
+ module->update_epoch = 0;
|
|
||||||
|
|
||||||
if (G_OBJECT_CLASS (udisks_linux_module_lvm2_parent_class)->constructed)
|
|
||||||
G_OBJECT_CLASS (udisks_linux_module_lvm2_parent_class)->constructed (object);
|
|
||||||
@@ -221,6 +224,12 @@ lvm_update_vgs (GObject *source_obj,
|
|
||||||
gpointer key, value;
|
|
||||||
const gchar *vg_name;
|
|
||||||
|
|
||||||
+ if (GPOINTER_TO_UINT (user_data) != module->update_epoch)
|
|
||||||
+ {
|
|
||||||
+ vgs_pvs_data_free (data);
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
if (! data)
|
|
||||||
{
|
|
||||||
if (error)
|
|
||||||
@@ -303,11 +312,13 @@ lvm_update (UDisksLinuxModuleLVM2 *module)
|
|
||||||
{
|
|
||||||
GTask *task;
|
|
||||||
|
|
||||||
+ module->update_epoch++;
|
|
||||||
+
|
|
||||||
/* the callback (lvm_update_vgs) is called in the default main loop (context) */
|
|
||||||
task = g_task_new (module,
|
|
||||||
NULL /* cancellable */,
|
|
||||||
lvm_update_vgs,
|
|
||||||
- NULL /* callback_data */);
|
|
||||||
+ GUINT_TO_POINTER (module->update_epoch));
|
|
||||||
|
|
||||||
/* holds a reference to 'task' until it is finished */
|
|
||||||
g_task_run_in_thread (task, (GTaskThreadFunc) vgs_task_func);
|
|
||||||
diff --git a/modules/lvm2/udiskslinuxvolumegroupobject.c b/modules/lvm2/udiskslinuxvolumegroupobject.c
|
|
||||||
index ce941cb250..ead08de7b1 100644
|
|
||||||
--- a/modules/lvm2/udiskslinuxvolumegroupobject.c
|
|
||||||
+++ b/modules/lvm2/udiskslinuxvolumegroupobject.c
|
|
||||||
@@ -66,6 +66,7 @@ struct _UDisksLinuxVolumeGroupObject
|
|
||||||
gchar *name;
|
|
||||||
|
|
||||||
GHashTable *logical_volumes;
|
|
||||||
+ guint32 update_epoch;
|
|
||||||
guint32 poll_epoch;
|
|
||||||
guint poll_timeout_id;
|
|
||||||
gboolean poll_requested;
|
|
||||||
@@ -99,6 +100,7 @@ static void crypttab_changed (UDisksCrypttabMonitor *monitor,
|
|
||||||
typedef struct {
|
|
||||||
BDLVMVGdata *vg_info;
|
|
||||||
GSList *vg_pvs;
|
|
||||||
+ guint32 epoch;
|
|
||||||
} VGUpdateData;
|
|
||||||
|
|
||||||
static void
|
|
||||||
@@ -183,6 +185,7 @@ udisks_linux_volume_group_object_set_property (GObject *__object,
|
|
||||||
static void
|
|
||||||
udisks_linux_volume_group_object_init (UDisksLinuxVolumeGroupObject *object)
|
|
||||||
{
|
|
||||||
+ object->update_epoch = 0;
|
|
||||||
object->poll_epoch = 0;
|
|
||||||
object->poll_timeout_id = 0;
|
|
||||||
object->poll_requested = FALSE;
|
|
||||||
@@ -575,6 +578,12 @@ update_vg (GObject *source_obj,
|
|
||||||
BDLVMVGdata *vg_info = data->vg_info;
|
|
||||||
GSList *vg_pvs = data->vg_pvs;
|
|
||||||
|
|
||||||
+ if (data->epoch != object->update_epoch)
|
|
||||||
+ {
|
|
||||||
+ lv_list_free (lvs);
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
/* free the data container (but not 'vg_info' and 'vg_pvs') */
|
|
||||||
g_free (data);
|
|
||||||
|
|
||||||
@@ -711,8 +720,11 @@ udisks_linux_volume_group_object_update (UDisksLinuxVolumeGroupObject *object, B
|
|
||||||
gchar *vg_name = g_strdup (vg_info->name);
|
|
||||||
GTask *task = NULL;
|
|
||||||
|
|
||||||
+ object->update_epoch++;
|
|
||||||
+
|
|
||||||
data->vg_info = vg_info;
|
|
||||||
data->vg_pvs = pvs;
|
|
||||||
+ data->epoch = object->update_epoch;
|
|
||||||
|
|
||||||
/* the callback (update_vg) is called in the default main loop (context) */
|
|
||||||
task = g_task_new (g_object_ref (object), NULL /* cancellable */, update_vg, data /* callback_data */);
|
|
@ -1,26 +0,0 @@
|
|||||||
From f24601b1d1302350fff15f326bfe3cfabde05f4c Mon Sep 17 00:00:00 2001
|
|
||||||
From: Tomas Bzatek <tbzatek@redhat.com>
|
|
||||||
Date: Fri, 19 May 2023 17:17:56 +0200
|
|
||||||
Subject: [PATCH] lvm2: Trigger uevent sync on block devices when creating new
|
|
||||||
VG
|
|
||||||
|
|
||||||
This will likely slow down processing with the hope that
|
|
||||||
more objects have their properties updated properly.
|
|
||||||
---
|
|
||||||
modules/lvm2/udiskslinuxmanagerlvm2.c | 3 ++-
|
|
||||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/modules/lvm2/udiskslinuxmanagerlvm2.c b/modules/lvm2/udiskslinuxmanagerlvm2.c
|
|
||||||
index b0c62fdcd6..5c06b921df 100644
|
|
||||||
--- a/modules/lvm2/udiskslinuxmanagerlvm2.c
|
|
||||||
+++ b/modules/lvm2/udiskslinuxmanagerlvm2.c
|
|
||||||
@@ -384,7 +384,8 @@ handle_volume_group_create (UDisksManagerLVM2 *_object,
|
|
||||||
UDisksObject *object_for_block;
|
|
||||||
object_for_block = udisks_daemon_util_dup_object (block, &error);
|
|
||||||
if (object_for_block != NULL)
|
|
||||||
- udisks_linux_block_object_trigger_uevent (UDISKS_LINUX_BLOCK_OBJECT (object_for_block));
|
|
||||||
+ udisks_linux_block_object_trigger_uevent_sync (UDISKS_LINUX_BLOCK_OBJECT (object_for_block),
|
|
||||||
+ UDISKS_DEFAULT_WAIT_TIMEOUT);
|
|
||||||
g_object_unref (object_for_block);
|
|
||||||
}
|
|
||||||
|
|
44
SOURCES/udisks-2.10.0-mdraid-g_source_attach.patch
Normal file
44
SOURCES/udisks-2.10.0-mdraid-g_source_attach.patch
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
From cd458666a93fe9d07f3718e88f3169f01a11a63e Mon Sep 17 00:00:00 2001
|
||||||
|
From: Tomas Bzatek <tbzatek@redhat.com>
|
||||||
|
Date: Fri, 16 Apr 2021 18:36:16 +0200
|
||||||
|
Subject: [PATCH 7/8] udiskslinuxmdraidobject: Handle source attach failure
|
||||||
|
gracefully
|
||||||
|
|
||||||
|
Only negligible theoretical chance to hit this, reported by Coverity.
|
||||||
|
---
|
||||||
|
src/udiskslinuxmdraidobject.c | 10 ++++++++--
|
||||||
|
1 file changed, 8 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/udiskslinuxmdraidobject.c b/src/udiskslinuxmdraidobject.c
|
||||||
|
index 20ca89c5..828c7058 100644
|
||||||
|
--- a/src/udiskslinuxmdraidobject.c
|
||||||
|
+++ b/src/udiskslinuxmdraidobject.c
|
||||||
|
@@ -468,7 +468,8 @@ watch_attr (UDisksLinuxDevice *device,
|
||||||
|
GError *error = NULL;
|
||||||
|
gchar *path = NULL;
|
||||||
|
GIOChannel *channel = NULL;
|
||||||
|
- GSource *ret = NULL;;
|
||||||
|
+ GSource *ret = NULL;
|
||||||
|
+ guint source_id;
|
||||||
|
|
||||||
|
g_return_val_if_fail (UDISKS_IS_LINUX_DEVICE (device), NULL);
|
||||||
|
|
||||||
|
@@ -478,9 +479,14 @@ watch_attr (UDisksLinuxDevice *device,
|
||||||
|
{
|
||||||
|
ret = g_io_create_watch (channel, G_IO_ERR);
|
||||||
|
g_source_set_callback (ret, callback, user_data, NULL);
|
||||||
|
- g_source_attach (ret, g_main_context_get_thread_default ());
|
||||||
|
+ source_id = g_source_attach (ret, g_main_context_get_thread_default ());
|
||||||
|
g_source_unref (ret);
|
||||||
|
g_io_channel_unref (channel); /* the keeps a reference to this object */
|
||||||
|
+ if (source_id == 0)
|
||||||
|
+ {
|
||||||
|
+ /* something bad happened while attaching the source */
|
||||||
|
+ ret = NULL;
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
--
|
||||||
|
2.30.2
|
||||||
|
|
47
SOURCES/udisks-2.10.0-mdraid-iochannel-data.patch
Normal file
47
SOURCES/udisks-2.10.0-mdraid-iochannel-data.patch
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
From 0353b5f2f9c586d872750423259b6ef6cc375625 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Tomas Bzatek <tbzatek@redhat.com>
|
||||||
|
Date: Fri, 16 Apr 2021 18:22:46 +0200
|
||||||
|
Subject: [PATCH 6/8] udiskslinuxmdraidobject: Optimize unused data out from
|
||||||
|
the g_io_channel_read_to_end() call
|
||||||
|
|
||||||
|
Looking into glib sources the g_io_channel_read_to_end() function
|
||||||
|
can handle NULL output pointers just fine and since the data is thrown
|
||||||
|
right away it's pointless to have them assigned.
|
||||||
|
---
|
||||||
|
src/udiskslinuxmdraidobject.c | 6 +-----
|
||||||
|
1 file changed, 1 insertion(+), 5 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/udiskslinuxmdraidobject.c b/src/udiskslinuxmdraidobject.c
|
||||||
|
index 759ff5f4..20ca89c5 100644
|
||||||
|
--- a/src/udiskslinuxmdraidobject.c
|
||||||
|
+++ b/src/udiskslinuxmdraidobject.c
|
||||||
|
@@ -503,8 +503,6 @@ attr_changed (GIOChannel *channel,
|
||||||
|
UDisksLinuxMDRaidObject *object = UDISKS_LINUX_MDRAID_OBJECT (user_data);
|
||||||
|
gboolean bail = FALSE;
|
||||||
|
GError *error = NULL;
|
||||||
|
- gchar *str = NULL;
|
||||||
|
- gsize len = 0;
|
||||||
|
|
||||||
|
if (cond & ~G_IO_ERR)
|
||||||
|
goto out;
|
||||||
|
@@ -518,7 +516,7 @@ attr_changed (GIOChannel *channel,
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (g_io_channel_read_to_end (channel, &str, &len, &error) != G_IO_STATUS_NORMAL)
|
||||||
|
+ if (g_io_channel_read_to_end (channel, NULL, NULL, &error) != G_IO_STATUS_NORMAL)
|
||||||
|
{
|
||||||
|
udisks_debug ("Error reading (uuid %s): %s (%s, %d)",
|
||||||
|
object->uuid, error->message, g_quark_to_string (error->domain), error->code);
|
||||||
|
@@ -527,8 +525,6 @@ attr_changed (GIOChannel *channel,
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
- g_free (str);
|
||||||
|
-
|
||||||
|
/* synthesize uevent */
|
||||||
|
if (object->raid_device != NULL)
|
||||||
|
udisks_linux_mdraid_object_uevent (object, "change", object->raid_device, FALSE);
|
||||||
|
--
|
||||||
|
2.30.2
|
||||||
|
|
136
SOURCES/udisks-2.10.0-module-names.patch
Normal file
136
SOURCES/udisks-2.10.0-module-names.patch
Normal file
@ -0,0 +1,136 @@
|
|||||||
|
commit e062c17e3829f3c04c25b5f6fc17ccc4491befa8
|
||||||
|
Author: Tomas Bzatek <tbzatek@redhat.com>
|
||||||
|
Date: Tue Mar 23 16:48:08 2021 +0100
|
||||||
|
|
||||||
|
modules: Limit module name to alphanumeric characters and -_ separators
|
||||||
|
|
||||||
|
A hardening feature as long as the module name is directly involved
|
||||||
|
in filename creation.
|
||||||
|
|
||||||
|
diff --git a/doc/udisks2-sections.txt.daemon.sections.in b/doc/udisks2-sections.txt.daemon.sections.in
|
||||||
|
index 16eaf74e..204ca897 100644
|
||||||
|
--- a/doc/udisks2-sections.txt.daemon.sections.in
|
||||||
|
+++ b/doc/udisks2-sections.txt.daemon.sections.in
|
||||||
|
@@ -312,6 +312,7 @@ udisks_daemon_util_get_free_mdraid_device
|
||||||
|
udisks_ata_identify_get_word
|
||||||
|
udisks_daemon_util_trigger_uevent
|
||||||
|
udisks_daemon_util_trigger_uevent_sync
|
||||||
|
+udisks_module_validate_name
|
||||||
|
</SECTION>
|
||||||
|
|
||||||
|
<SECTION>
|
||||||
|
diff --git a/src/udisksconfigmanager.c b/src/udisksconfigmanager.c
|
||||||
|
index 9558e276..5868e864 100644
|
||||||
|
--- a/src/udisksconfigmanager.c
|
||||||
|
+++ b/src/udisksconfigmanager.c
|
||||||
|
@@ -26,6 +26,7 @@
|
||||||
|
#include "udiskslogging.h"
|
||||||
|
#include "udisksdaemontypes.h"
|
||||||
|
#include "udisksconfigmanager.h"
|
||||||
|
+#include "udisksdaemonutil.h"
|
||||||
|
|
||||||
|
struct _UDisksConfigManager {
|
||||||
|
GObject parent_instance;
|
||||||
|
@@ -60,6 +61,8 @@ enum
|
||||||
|
#define DEFAULTS_GROUP_NAME "defaults"
|
||||||
|
#define DEFAULTS_ENCRYPTION_KEY "encryption"
|
||||||
|
|
||||||
|
+#define MODULES_ALL_ARG "*"
|
||||||
|
+
|
||||||
|
static void
|
||||||
|
udisks_config_manager_get_property (GObject *object,
|
||||||
|
guint property_id,
|
||||||
|
@@ -170,7 +173,16 @@ parse_config_file (UDisksConfigManager *manager,
|
||||||
|
{
|
||||||
|
modules_tmp = modules;
|
||||||
|
for (module_i = *modules_tmp; module_i; module_i = *++modules_tmp)
|
||||||
|
- *out_modules = g_list_append (*out_modules, g_strdup (g_strstrip (module_i)));
|
||||||
|
+ {
|
||||||
|
+ g_strstrip (module_i);
|
||||||
|
+ if (! udisks_module_validate_name (module_i) && !g_str_equal (module_i, MODULES_ALL_ARG))
|
||||||
|
+ {
|
||||||
|
+ g_warning ("Invalid module name '%s' specified in the %s config file.",
|
||||||
|
+ module_i, conf_filename);
|
||||||
|
+ continue;
|
||||||
|
+ }
|
||||||
|
+ *out_modules = g_list_append (*out_modules, g_strdup (module_i));
|
||||||
|
+ }
|
||||||
|
g_strfreev (modules);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -397,7 +409,7 @@ udisks_config_manager_get_modules_all (UDisksConfigManager *manager)
|
||||||
|
|
||||||
|
parse_config_file (manager, NULL, NULL, &modules);
|
||||||
|
|
||||||
|
- ret = !modules || (g_strcmp0 (modules->data, "*") == 0 && g_list_length (modules) == 1);
|
||||||
|
+ ret = !modules || (g_strcmp0 (modules->data, MODULES_ALL_ARG) == 0 && g_list_length (modules) == 1);
|
||||||
|
|
||||||
|
g_list_free_full (modules, (GDestroyNotify) g_free);
|
||||||
|
|
||||||
|
diff --git a/src/udisksdaemonutil.c b/src/udisksdaemonutil.c
|
||||||
|
index 60134765..1695b524 100644
|
||||||
|
--- a/src/udisksdaemonutil.c
|
||||||
|
+++ b/src/udisksdaemonutil.c
|
||||||
|
@@ -1880,3 +1880,29 @@ udisks_daemon_util_trigger_uevent_sync (UDisksDaemon *daemon,
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------------------------------------- */
|
||||||
|
+
|
||||||
|
+/**
|
||||||
|
+ * udisks_module_validate_name:
|
||||||
|
+ * @module_name: A udisks2 module name.
|
||||||
|
+ *
|
||||||
|
+ * Checks the string for a valid udisks2 module name. Only alphanumeric characters
|
||||||
|
+ * along with the '-' and '_' separators are permitted.
|
||||||
|
+ *
|
||||||
|
+ * Returns: %TRUE if the string is a valid udisks2 module name, %FALSE otherwise.
|
||||||
|
+ */
|
||||||
|
+gboolean
|
||||||
|
+udisks_module_validate_name (const gchar *module_name)
|
||||||
|
+{
|
||||||
|
+ int i;
|
||||||
|
+
|
||||||
|
+ for (i = 0; module_name[i] != '\0'; i++)
|
||||||
|
+ /* going ASCII, will disqualify any UTF-* string */
|
||||||
|
+ if (! g_ascii_isalnum (module_name[i]) &&
|
||||||
|
+ module_name[i] != '-' &&
|
||||||
|
+ module_name[i] != '_')
|
||||||
|
+ return FALSE;
|
||||||
|
+
|
||||||
|
+ return TRUE;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+/* ---------------------------------------------------------------------------------------------------- */
|
||||||
|
diff --git a/src/udisksdaemonutil.h b/src/udisksdaemonutil.h
|
||||||
|
index 2d7ac981..df584de4 100644
|
||||||
|
--- a/src/udisksdaemonutil.h
|
||||||
|
+++ b/src/udisksdaemonutil.h
|
||||||
|
@@ -129,6 +129,8 @@ gchar *udisks_daemon_util_get_free_mdraid_device (void);
|
||||||
|
|
||||||
|
guint16 udisks_ata_identify_get_word (const guchar *identify_data, guint word_number);
|
||||||
|
|
||||||
|
+gboolean udisks_module_validate_name (const gchar *module_name);
|
||||||
|
+
|
||||||
|
/* Utility macro for policy verification. */
|
||||||
|
#define UDISKS_DAEMON_CHECK_AUTHORIZATION(daemon, \
|
||||||
|
object, \
|
||||||
|
diff --git a/src/udiskslinuxmanager.c b/src/udiskslinuxmanager.c
|
||||||
|
index 8af65d97..26d8a5d7 100644
|
||||||
|
--- a/src/udiskslinuxmanager.c
|
||||||
|
+++ b/src/udiskslinuxmanager.c
|
||||||
|
@@ -956,6 +956,15 @@ handle_enable_module (UDisksManager *object,
|
||||||
|
UDisksLinuxManager *manager = UDISKS_LINUX_MANAGER (object);
|
||||||
|
EnableModulesData *data;
|
||||||
|
|
||||||
|
+ if (! udisks_module_validate_name (arg_name))
|
||||||
|
+ {
|
||||||
|
+ g_dbus_method_invocation_return_error (invocation,
|
||||||
|
+ G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,
|
||||||
|
+ "Requested module name '%s' is not a valid udisks2 module name.",
|
||||||
|
+ arg_name);
|
||||||
|
+ return TRUE;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
if (! arg_enable)
|
||||||
|
{
|
||||||
|
/* TODO: implement proper module unloading */
|
@ -43,7 +43,7 @@ index 3187367e..e91bd02f 100644
|
|||||||
'''Noninvasive tests for the Drive.Ata interface'''
|
'''Noninvasive tests for the Drive.Ata interface'''
|
||||||
|
|
||||||
def get_smart_setting(self, disk, attr, out_prefix):
|
def get_smart_setting(self, disk, attr, out_prefix):
|
||||||
@@ -102,6 +102,7 @@ class UdisksDriveAtaTest(UdisksTestCase)
|
@@ -102,6 +102,7 @@ class UdisksDriveAtaTest(UdisksTestCase):
|
||||||
intro_data = drive_intro.Introspect()
|
intro_data = drive_intro.Introspect()
|
||||||
self.assertNotIn('interface name="org.freedesktop.UDisks2.Drive.Ata"', intro_data)
|
self.assertNotIn('interface name="org.freedesktop.UDisks2.Drive.Ata"', intro_data)
|
||||||
|
|
||||||
@ -51,8 +51,8 @@ index 3187367e..e91bd02f 100644
|
|||||||
@unittest.skipUnless(smart_supported, "No disks supporting S.M.A.R.T. available")
|
@unittest.skipUnless(smart_supported, "No disks supporting S.M.A.R.T. available")
|
||||||
def test_properties(self):
|
def test_properties(self):
|
||||||
for disk in smart_supported:
|
for disk in smart_supported:
|
||||||
@@ -148,6 +149,7 @@ class UdisksDriveAtaTest(UdisksTestCase)
|
@@ -148,6 +149,7 @@ class UdisksDriveAtaTest(UdisksTestCase):
|
||||||
# nineth field is the raw value
|
# ninth field is the raw value
|
||||||
self.assertEqual(int(pwon_s.value / 3600), int(pwon_attr[8]))
|
self.assertEqual(int(pwon_s.value / 3600), int(pwon_attr[8]))
|
||||||
|
|
||||||
+ @udiskstestcase.tag_test(udiskstestcase.TestTags.UNSTABLE)
|
+ @udiskstestcase.tag_test(udiskstestcase.TestTags.UNSTABLE)
|
||||||
|
@ -1,30 +0,0 @@
|
|||||||
From 486778c778a4ddb24395408c6b267e702e19ae02 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Tomas Bzatek <tbzatek@redhat.com>
|
|
||||||
Date: Sat, 1 Jan 2022 22:01:49 +0100
|
|
||||||
Subject: [PATCH] udiskslinuxencrypted: Fix GError ownership
|
|
||||||
|
|
||||||
---
|
|
||||||
src/udiskslinuxencrypted.c | 3 +--
|
|
||||||
1 file changed, 1 insertion(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/udiskslinuxencrypted.c b/src/udiskslinuxencrypted.c
|
|
||||||
index c3a0821ac..3bc54e695 100644
|
|
||||||
--- a/src/udiskslinuxencrypted.c
|
|
||||||
+++ b/src/udiskslinuxencrypted.c
|
|
||||||
@@ -1040,7 +1040,7 @@ handle_resize (UDisksEncrypted *encrypted,
|
|
||||||
object = udisks_daemon_util_dup_object (encrypted, &error);
|
|
||||||
if (object == NULL)
|
|
||||||
{
|
|
||||||
- g_dbus_method_invocation_take_error (invocation, error);
|
|
||||||
+ g_dbus_method_invocation_return_gerror (invocation, error);
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1066,7 +1066,6 @@ handle_resize (UDisksEncrypted *encrypted,
|
|
||||||
if (!udisks_daemon_util_get_caller_uid_sync (daemon, invocation, NULL /* GCancellable */, &caller_uid, &error))
|
|
||||||
{
|
|
||||||
g_dbus_method_invocation_return_gerror (invocation, error);
|
|
||||||
- g_clear_error (&error);
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
@ -1,49 +0,0 @@
|
|||||||
From 223256777f6e269b8501d95a64c4c6095a7a8a3e Mon Sep 17 00:00:00 2001
|
|
||||||
From: Tomas Bzatek <tbzatek@redhat.com>
|
|
||||||
Date: Sat, 1 Jan 2022 22:02:17 +0100
|
|
||||||
Subject: [PATCH] udiskslinuxfilesystem: Fix GError ownership
|
|
||||||
|
|
||||||
---
|
|
||||||
src/udiskslinuxfilesystem.c | 8 ++++----
|
|
||||||
1 file changed, 4 insertions(+), 4 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/udiskslinuxfilesystem.c b/src/udiskslinuxfilesystem.c
|
|
||||||
index f7c99757a..a8390a044 100644
|
|
||||||
--- a/src/udiskslinuxfilesystem.c
|
|
||||||
+++ b/src/udiskslinuxfilesystem.c
|
|
||||||
@@ -1739,7 +1739,7 @@ handle_resize (UDisksFilesystem *filesystem,
|
|
||||||
object = udisks_daemon_util_dup_object (filesystem, &error);
|
|
||||||
if (object == NULL)
|
|
||||||
{
|
|
||||||
- g_dbus_method_invocation_take_error (invocation, error);
|
|
||||||
+ g_dbus_method_invocation_return_gerror (invocation, error);
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1921,7 +1921,7 @@ handle_repair (UDisksFilesystem *filesystem,
|
|
||||||
object = udisks_daemon_util_dup_object (filesystem, &error);
|
|
||||||
if (object == NULL)
|
|
||||||
{
|
|
||||||
- g_dbus_method_invocation_take_error (invocation, error);
|
|
||||||
+ g_dbus_method_invocation_return_gerror (invocation, error);
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -2089,7 +2089,7 @@ handle_check (UDisksFilesystem *filesystem,
|
|
||||||
object = udisks_daemon_util_dup_object (filesystem, &error);
|
|
||||||
if (object == NULL)
|
|
||||||
{
|
|
||||||
- g_dbus_method_invocation_take_error (invocation, error);
|
|
||||||
+ g_dbus_method_invocation_return_gerror (invocation, error);
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -2257,7 +2257,7 @@ handle_take_ownership (UDisksFilesystem *filesystem,
|
|
||||||
object = udisks_daemon_util_dup_object (filesystem, &error);
|
|
||||||
if (object == NULL)
|
|
||||||
{
|
|
||||||
- g_dbus_method_invocation_take_error (invocation, error);
|
|
||||||
+ g_dbus_method_invocation_return_gerror (invocation, error);
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
@ -1,70 +0,0 @@
|
|||||||
From 7c9933c0f80faaabbed607983fdf77f8c4562df6 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Tomas Bzatek <tbzatek@redhat.com>
|
|
||||||
Date: Sat, 1 Jan 2022 20:11:57 +0100
|
|
||||||
Subject: [PATCH] udiskslinuxpartition: Fix GError ownership
|
|
||||||
|
|
||||||
---
|
|
||||||
src/udiskslinuxpartition.c | 15 ++++++---------
|
|
||||||
1 file changed, 6 insertions(+), 9 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/udiskslinuxpartition.c b/src/udiskslinuxpartition.c
|
|
||||||
index 5461b3903..3d970768d 100644
|
|
||||||
--- a/src/udiskslinuxpartition.c
|
|
||||||
+++ b/src/udiskslinuxpartition.c
|
|
||||||
@@ -135,8 +135,7 @@ check_authorization (UDisksPartition *partition,
|
|
||||||
caller_uid,
|
|
||||||
&error))
|
|
||||||
{
|
|
||||||
- g_dbus_method_invocation_return_gerror (invocation, error);
|
|
||||||
- g_clear_error (&error);
|
|
||||||
+ g_dbus_method_invocation_take_error (invocation, error);
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -351,7 +350,7 @@ handle_set_flags (UDisksPartition *partition,
|
|
||||||
object = udisks_daemon_util_dup_object (partition, &error);
|
|
||||||
if (object == NULL)
|
|
||||||
{
|
|
||||||
- g_dbus_method_invocation_take_error (invocation, error);
|
|
||||||
+ g_dbus_method_invocation_return_gerror (invocation, error);
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -499,7 +498,7 @@ handle_set_name (UDisksPartition *partition,
|
|
||||||
object = udisks_daemon_util_dup_object (partition, &error);
|
|
||||||
if (object == NULL)
|
|
||||||
{
|
|
||||||
- g_dbus_method_invocation_take_error (invocation, error);
|
|
||||||
+ g_dbus_method_invocation_return_gerror (invocation, error);
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -873,7 +872,7 @@ handle_resize (UDisksPartition *partition,
|
|
||||||
object = udisks_daemon_util_dup_object (partition, &error);
|
|
||||||
if (object == NULL)
|
|
||||||
{
|
|
||||||
- g_dbus_method_invocation_take_error (invocation, error);
|
|
||||||
+ g_dbus_method_invocation_return_gerror (invocation, error);
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -994,7 +993,7 @@ handle_delete (UDisksPartition *partition,
|
|
||||||
object = udisks_daemon_util_dup_object (partition, &error);
|
|
||||||
if (object == NULL)
|
|
||||||
{
|
|
||||||
- g_dbus_method_invocation_take_error (invocation, error);
|
|
||||||
+ g_dbus_method_invocation_return_gerror (invocation, error);
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1012,9 +1011,7 @@ handle_delete (UDisksPartition *partition,
|
|
||||||
if (!udisks_linux_block_teardown (block, invocation, options, &error))
|
|
||||||
{
|
|
||||||
if (invocation != NULL)
|
|
||||||
- g_dbus_method_invocation_take_error (invocation, error);
|
|
||||||
- else
|
|
||||||
- g_clear_error (&error);
|
|
||||||
+ g_dbus_method_invocation_return_gerror (invocation, error);
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,73 +0,0 @@
|
|||||||
From f486a9fa22c2f9785a4a8fc58eb3be7b0cf934ce Mon Sep 17 00:00:00 2001
|
|
||||||
From: Tomas Bzatek <tbzatek@redhat.com>
|
|
||||||
Date: Sat, 1 Jan 2022 19:59:27 +0100
|
|
||||||
Subject: [PATCH] udiskslinuxpartitiontable: Fix GError ownership
|
|
||||||
|
|
||||||
---
|
|
||||||
src/udiskslinuxpartitiontable.c | 11 ++++-------
|
|
||||||
1 file changed, 4 insertions(+), 7 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/udiskslinuxpartitiontable.c b/src/udiskslinuxpartitiontable.c
|
|
||||||
index b4c301095..14a54c9c7 100644
|
|
||||||
--- a/src/udiskslinuxpartitiontable.c
|
|
||||||
+++ b/src/udiskslinuxpartitiontable.c
|
|
||||||
@@ -277,7 +277,7 @@ udisks_linux_partition_table_handle_create_partition (UDisksPartitionTable *ta
|
|
||||||
object = udisks_daemon_util_dup_object (table, &error);
|
|
||||||
if (object == NULL)
|
|
||||||
{
|
|
||||||
- g_dbus_method_invocation_take_error (invocation, error);
|
|
||||||
+ g_dbus_method_invocation_return_gerror (invocation, error);
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -293,7 +293,6 @@ udisks_linux_partition_table_handle_create_partition (UDisksPartitionTable *ta
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
- error = NULL;
|
|
||||||
if (!udisks_daemon_util_get_caller_uid_sync (daemon,
|
|
||||||
invocation,
|
|
||||||
NULL /* GCancellable */,
|
|
||||||
@@ -301,7 +300,6 @@ udisks_linux_partition_table_handle_create_partition (UDisksPartitionTable *ta
|
|
||||||
&error))
|
|
||||||
{
|
|
||||||
g_dbus_method_invocation_return_gerror (invocation, error);
|
|
||||||
- g_clear_error (&error);
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -464,7 +462,7 @@ udisks_linux_partition_table_handle_create_partition (UDisksPartitionTable *ta
|
|
||||||
if (!bd_part_set_part_name (device_name, part_spec->path, name, &error))
|
|
||||||
{
|
|
||||||
g_prefix_error (&error, "Error setting name for newly created partition: ");
|
|
||||||
- g_dbus_method_invocation_take_error (invocation, error);
|
|
||||||
+ g_dbus_method_invocation_return_gerror (invocation, error);
|
|
||||||
udisks_simple_job_complete (UDISKS_SIMPLE_JOB (job), FALSE, error->message);
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
@@ -483,7 +481,7 @@ udisks_linux_partition_table_handle_create_partition (UDisksPartitionTable *ta
|
|
||||||
if (!ret)
|
|
||||||
{
|
|
||||||
g_prefix_error (&error, "Error setting type for newly created partition: ");
|
|
||||||
- g_dbus_method_invocation_take_error (invocation, error);
|
|
||||||
+ g_dbus_method_invocation_return_gerror (invocation, error);
|
|
||||||
udisks_simple_job_complete (UDISKS_SIMPLE_JOB (job), FALSE, error->message);
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
@@ -520,7 +518,6 @@ udisks_linux_partition_table_handle_create_partition (UDisksPartitionTable *ta
|
|
||||||
/* sit and wait for the partition to show up */
|
|
||||||
g_warn_if_fail (wait_data->pos_to_wait_for > 0);
|
|
||||||
wait_data->partition_table_object = object;
|
|
||||||
- error = NULL;
|
|
||||||
partition_object = udisks_daemon_wait_for_object_sync (daemon,
|
|
||||||
wait_for_partition,
|
|
||||||
wait_data,
|
|
||||||
@@ -530,7 +527,7 @@ udisks_linux_partition_table_handle_create_partition (UDisksPartitionTable *ta
|
|
||||||
if (partition_object == NULL)
|
|
||||||
{
|
|
||||||
g_prefix_error (&error, "Error waiting for partition to appear: ");
|
|
||||||
- g_dbus_method_invocation_take_error (invocation, error);
|
|
||||||
+ g_dbus_method_invocation_return_gerror (invocation, error);
|
|
||||||
udisks_simple_job_complete (UDISKS_SIMPLE_JOB (job), FALSE, error->message);
|
|
||||||
goto out;
|
|
||||||
}
|
|
@ -1,25 +0,0 @@
|
|||||||
From 0edd6f5579c964323d86897aff9476c20d7901ba Mon Sep 17 00:00:00 2001
|
|
||||||
From: Vojtech Trefny <vtrefny@redhat.com>
|
|
||||||
Date: Mon, 22 Nov 2021 14:23:08 +0100
|
|
||||||
Subject: [PATCH] tests: Do not check that writeAmplificationRatio is bigger
|
|
||||||
than 0
|
|
||||||
|
|
||||||
Apparently the bios_in_write value is now 0 for newly created VDO
|
|
||||||
pools and because we use it for the writeAmplificationRatio
|
|
||||||
calculation we get zero too.
|
|
||||||
---
|
|
||||||
src/tests/dbus-tests/test_20_LVM.py | 1 -
|
|
||||||
1 file changed, 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/src/tests/dbus-tests/test_20_LVM.py b/src/tests/dbus-tests/test_20_LVM.py
|
|
||||||
index 7fbff0434..fde7c3f3f 100644
|
|
||||||
--- a/src/tests/dbus-tests/test_20_LVM.py
|
|
||||||
+++ b/src/tests/dbus-tests/test_20_LVM.py
|
|
||||||
@@ -508,7 +508,6 @@ def test_create(self):
|
|
||||||
# get statistics and do some simple sanity check
|
|
||||||
stats = lv.GetStatistics(self.no_options, dbus_interface=self.iface_prefix + '.VDOVolume')
|
|
||||||
self.assertIn("writeAmplificationRatio", stats.keys())
|
|
||||||
- self.assertGreater(float(stats["writeAmplificationRatio"]), 0)
|
|
||||||
|
|
||||||
def test_enable_disable_compression_deduplication(self):
|
|
||||||
vgname = 'udisks_test_vdo_vg'
|
|
@ -1,190 +0,0 @@
|
|||||||
From e039516b103eb9749a3e261c5ee1a9bc110676cf Mon Sep 17 00:00:00 2001
|
|
||||||
From: Tomas Bzatek <tbzatek@redhat.com>
|
|
||||||
Date: Fri, 26 Jun 2020 17:42:32 +0200
|
|
||||||
Subject: [PATCH 1/8] daemon: Always flush interface property changes
|
|
||||||
|
|
||||||
Setting properties on a GDBusInterfaceSkeleton from the main thread
|
|
||||||
as a result of uevent is somewhat racy to clients that are waiting
|
|
||||||
for a method call to return that is processed in a separate thread
|
|
||||||
by the daemon. Perhaps there's a race in the GDBus worker thread
|
|
||||||
that processes changes from both threads and send them out on the bus.
|
|
||||||
|
|
||||||
Explicit flush on GDBusInterfaceSkeleton interfaces seems to fix
|
|
||||||
the issue. Such approach was used before on some places, this change
|
|
||||||
adds explicit flushes at all places where properties may change.
|
|
||||||
---
|
|
||||||
src/udiskslinuxblock.c | 2 ++
|
|
||||||
src/udiskslinuxdrive.c | 1 +
|
|
||||||
src/udiskslinuxdriveata.c | 5 +++++
|
|
||||||
src/udiskslinuxencrypted.c | 5 +++++
|
|
||||||
src/udiskslinuxfilesystem.c | 3 +++
|
|
||||||
src/udiskslinuxloop.c | 1 +
|
|
||||||
src/udiskslinuxmdraid.c | 1 +
|
|
||||||
src/udiskslinuxpartition.c | 2 ++
|
|
||||||
src/udiskslinuxpartitiontable.c | 1 +
|
|
||||||
src/udiskslinuxswapspace.c | 1 +
|
|
||||||
10 files changed, 22 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/src/udiskslinuxblock.c b/src/udiskslinuxblock.c
|
|
||||||
index ddc7fe1f..34d73f0e 100644
|
|
||||||
--- a/src/udiskslinuxblock.c
|
|
||||||
+++ b/src/udiskslinuxblock.c
|
|
||||||
@@ -893,6 +893,7 @@ update_configuration (UDisksLinuxBlock *block,
|
|
||||||
configuration = g_variant_new ("a(sa{sv})", NULL);
|
|
||||||
}
|
|
||||||
udisks_block_set_configuration (UDISKS_BLOCK (block), configuration);
|
|
||||||
+ g_dbus_interface_skeleton_flush (G_DBUS_INTERFACE_SKELETON (block));
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef HAVE_LIBMOUNT_UTAB
|
|
||||||
@@ -1280,6 +1281,7 @@ udisks_linux_block_update (UDisksLinuxBlock *block,
|
|
||||||
update_mdraid (block, device, drive, object_manager);
|
|
||||||
|
|
||||||
out:
|
|
||||||
+ g_dbus_interface_skeleton_flush (G_DBUS_INTERFACE_SKELETON (block));
|
|
||||||
if (device != NULL)
|
|
||||||
g_object_unref (device);
|
|
||||||
if (drive != NULL)
|
|
||||||
diff --git a/src/udiskslinuxdrive.c b/src/udiskslinuxdrive.c
|
|
||||||
index e9dd7117..28a90ce9 100644
|
|
||||||
--- a/src/udiskslinuxdrive.c
|
|
||||||
+++ b/src/udiskslinuxdrive.c
|
|
||||||
@@ -950,6 +950,7 @@ udisks_linux_drive_update (UDisksLinuxDrive *drive,
|
|
||||||
ret = update_configuration (drive, object);
|
|
||||||
|
|
||||||
out:
|
|
||||||
+ g_dbus_interface_skeleton_flush (G_DBUS_INTERFACE_SKELETON (drive));
|
|
||||||
if (device != NULL)
|
|
||||||
g_clear_object (&device);
|
|
||||||
|
|
||||||
diff --git a/src/udiskslinuxdriveata.c b/src/udiskslinuxdriveata.c
|
|
||||||
index d65f3254..4ba66d09 100644
|
|
||||||
--- a/src/udiskslinuxdriveata.c
|
|
||||||
+++ b/src/udiskslinuxdriveata.c
|
|
||||||
@@ -339,6 +339,8 @@ udisks_linux_drive_ata_update (UDisksLinuxDriveAta *drive,
|
|
||||||
update_security (drive, device);
|
|
||||||
|
|
||||||
out:
|
|
||||||
+ /* ensure property changes are sent before the method return */
|
|
||||||
+ g_dbus_interface_skeleton_flush (G_DBUS_INTERFACE_SKELETON (drive));
|
|
||||||
if (device != NULL)
|
|
||||||
g_object_unref (device);
|
|
||||||
|
|
||||||
@@ -681,6 +683,9 @@ udisks_linux_drive_ata_refresh_smart_sync (UDisksLinuxDriveAta *drive,
|
|
||||||
/* update stats again to account for the IO we just did to read the SMART info */
|
|
||||||
update_io_stats (drive, device);
|
|
||||||
|
|
||||||
+ /* ensure property changes are sent before the method return */
|
|
||||||
+ g_dbus_interface_skeleton_flush (G_DBUS_INTERFACE_SKELETON (drive));
|
|
||||||
+
|
|
||||||
out:
|
|
||||||
g_clear_object (&device);
|
|
||||||
if (d != NULL)
|
|
||||||
diff --git a/src/udiskslinuxencrypted.c b/src/udiskslinuxencrypted.c
|
|
||||||
index 73c78873..8a230fda 100644
|
|
||||||
--- a/src/udiskslinuxencrypted.c
|
|
||||||
+++ b/src/udiskslinuxencrypted.c
|
|
||||||
@@ -237,6 +237,8 @@ udisks_linux_encrypted_update (UDisksLinuxEncrypted *encrypted,
|
|
||||||
update_metadata_size (encrypted, object);
|
|
||||||
|
|
||||||
udisks_linux_block_encrypted_unlock (block);
|
|
||||||
+
|
|
||||||
+ g_dbus_interface_skeleton_flush (G_DBUS_INTERFACE_SKELETON (encrypted));
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------------------------------------- */
|
|
||||||
@@ -630,6 +632,9 @@ handle_unlock (UDisksEncrypted *encrypted,
|
|
||||||
g_udev_device_get_sysfs_attr (cleartext_device->udev_device, "dm/uuid"),
|
|
||||||
caller_uid);
|
|
||||||
|
|
||||||
+ /* ensure property changes are sent before the method return */
|
|
||||||
+ g_dbus_interface_skeleton_flush (G_DBUS_INTERFACE_SKELETON (encrypted));
|
|
||||||
+
|
|
||||||
udisks_encrypted_complete_unlock (encrypted,
|
|
||||||
invocation,
|
|
||||||
g_dbus_object_get_object_path (G_DBUS_OBJECT (cleartext_object)));
|
|
||||||
diff --git a/src/udiskslinuxfilesystem.c b/src/udiskslinuxfilesystem.c
|
|
||||||
index 669fc40b..3ae11c32 100644
|
|
||||||
--- a/src/udiskslinuxfilesystem.c
|
|
||||||
+++ b/src/udiskslinuxfilesystem.c
|
|
||||||
@@ -277,6 +277,8 @@ udisks_linux_filesystem_update (UDisksLinuxFilesystem *filesystem,
|
|
||||||
if (! skip_fs_size)
|
|
||||||
udisks_filesystem_set_size (UDISKS_FILESYSTEM (filesystem), get_filesystem_size (object));
|
|
||||||
|
|
||||||
+ g_dbus_interface_skeleton_flush (G_DBUS_INTERFACE_SKELETON (filesystem));
|
|
||||||
+
|
|
||||||
g_object_unref (device);
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1865,6 +1867,7 @@ handle_resize (UDisksFilesystem *filesystem,
|
|
||||||
UDISKS_DEFAULT_WAIT_TIMEOUT);
|
|
||||||
|
|
||||||
udisks_filesystem_set_size (filesystem, get_filesystem_size (UDISKS_LINUX_BLOCK_OBJECT (object)));
|
|
||||||
+ g_dbus_interface_skeleton_flush (G_DBUS_INTERFACE_SKELETON (filesystem));
|
|
||||||
udisks_filesystem_complete_resize (filesystem, invocation);
|
|
||||||
udisks_simple_job_complete (UDISKS_SIMPLE_JOB (job), TRUE, NULL);
|
|
||||||
|
|
||||||
diff --git a/src/udiskslinuxloop.c b/src/udiskslinuxloop.c
|
|
||||||
index 6c8a4561..5d7e3553 100644
|
|
||||||
--- a/src/udiskslinuxloop.c
|
|
||||||
+++ b/src/udiskslinuxloop.c
|
|
||||||
@@ -187,6 +187,7 @@ udisks_linux_loop_update (UDisksLinuxLoop *loop,
|
|
||||||
}
|
|
||||||
udisks_loop_set_setup_by_uid (UDISKS_LOOP (loop), setup_by_uid);
|
|
||||||
|
|
||||||
+ g_dbus_interface_skeleton_flush (G_DBUS_INTERFACE_SKELETON (loop));
|
|
||||||
g_object_unref (device);
|
|
||||||
}
|
|
||||||
|
|
||||||
diff --git a/src/udiskslinuxmdraid.c b/src/udiskslinuxmdraid.c
|
|
||||||
index 85fc2a3b..7eca9764 100644
|
|
||||||
--- a/src/udiskslinuxmdraid.c
|
|
||||||
+++ b/src/udiskslinuxmdraid.c
|
|
||||||
@@ -512,6 +512,7 @@ udisks_linux_mdraid_update (UDisksLinuxMDRaid *mdraid,
|
|
||||||
uuid));
|
|
||||||
|
|
||||||
out:
|
|
||||||
+ g_dbus_interface_skeleton_flush (G_DBUS_INTERFACE_SKELETON (mdraid));
|
|
||||||
if (raid_data)
|
|
||||||
bd_md_examine_data_free (raid_data);
|
|
||||||
g_free (sync_completed);
|
|
||||||
diff --git a/src/udiskslinuxpartition.c b/src/udiskslinuxpartition.c
|
|
||||||
index 97ba02fe..ff0fdfc0 100644
|
|
||||||
--- a/src/udiskslinuxpartition.c
|
|
||||||
+++ b/src/udiskslinuxpartition.c
|
|
||||||
@@ -312,6 +312,8 @@ udisks_linux_partition_update (UDisksLinuxPartition *partition,
|
|
||||||
udisks_partition_set_is_container (UDISKS_PARTITION (partition), is_container);
|
|
||||||
udisks_partition_set_is_contained (UDISKS_PARTITION (partition), is_contained);
|
|
||||||
|
|
||||||
+ g_dbus_interface_skeleton_flush (G_DBUS_INTERFACE_SKELETON (partition));
|
|
||||||
+
|
|
||||||
g_free (name);
|
|
||||||
g_clear_object (&device);
|
|
||||||
g_clear_object (&disk_block_object);
|
|
||||||
diff --git a/src/udiskslinuxpartitiontable.c b/src/udiskslinuxpartitiontable.c
|
|
||||||
index b26849bc..e43a0708 100644
|
|
||||||
--- a/src/udiskslinuxpartitiontable.c
|
|
||||||
+++ b/src/udiskslinuxpartitiontable.c
|
|
||||||
@@ -146,6 +146,7 @@ udisks_linux_partition_table_update (UDisksLinuxPartitionTable *table,
|
|
||||||
|
|
||||||
udisks_partition_table_set_partitions (UDISKS_PARTITION_TABLE (table),
|
|
||||||
partition_object_paths);
|
|
||||||
+ g_dbus_interface_skeleton_flush (G_DBUS_INTERFACE_SKELETON (table));
|
|
||||||
|
|
||||||
|
|
||||||
g_free (partition_object_paths);
|
|
||||||
diff --git a/src/udiskslinuxswapspace.c b/src/udiskslinuxswapspace.c
|
|
||||||
index ee103528..bb47f3d4 100644
|
|
||||||
--- a/src/udiskslinuxswapspace.c
|
|
||||||
+++ b/src/udiskslinuxswapspace.c
|
|
||||||
@@ -127,6 +127,7 @@ udisks_linux_swapspace_update (UDisksLinuxSwapspace *swapspace,
|
|
||||||
active = TRUE;
|
|
||||||
udisks_swapspace_set_active (UDISKS_SWAPSPACE (swapspace), active);
|
|
||||||
|
|
||||||
+ g_dbus_interface_skeleton_flush (G_DBUS_INTERFACE_SKELETON (swapspace));
|
|
||||||
g_object_unref (device);
|
|
||||||
}
|
|
||||||
|
|
||||||
--
|
|
||||||
2.26.2
|
|
||||||
|
|
@ -1,39 +0,0 @@
|
|||||||
commit 214d65ae4d2b779fc1674420a042082ae029eb6b
|
|
||||||
Author: Vojtech Trefny <vtrefny@redhat.com>
|
|
||||||
Date: Mon Jul 13 16:16:47 2020 +0200
|
|
||||||
|
|
||||||
dbus_tests: Fix getting list of SATA drives for Drive.ATA test
|
|
||||||
|
|
||||||
Resolves: rhbz#1855785
|
|
||||||
|
|
||||||
diff --git a/src/tests/dbus-tests/test_drive_ata.py b/src/tests/dbus-tests/test_drive_ata.py
|
|
||||||
index ff6d01cc..df298a9c 100644
|
|
||||||
--- a/src/tests/dbus-tests/test_drive_ata.py
|
|
||||||
+++ b/src/tests/dbus-tests/test_drive_ata.py
|
|
||||||
@@ -14,8 +14,24 @@ SMART_ATA_CHECKSUM_FAIL = 1 << 2
|
|
||||||
smart_unsupported = set()
|
|
||||||
smart_supported = set()
|
|
||||||
|
|
||||||
-sata_disks = (dev for dev in os.listdir("/dev") if re.match(r'sd[a-z]+$', dev))
|
|
||||||
-for disk in sata_disks:
|
|
||||||
+
|
|
||||||
+DISK_PATH = "/dev/disk/by-path/"
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+def _get_sata_disks():
|
|
||||||
+ sata_disks = []
|
|
||||||
+ by_path = os.listdir(DISK_PATH)
|
|
||||||
+ for dev in by_path:
|
|
||||||
+ if "ata" in dev and "part" not in dev:
|
|
||||||
+ path = os.path.realpath(os.path.join(DISK_PATH, dev))
|
|
||||||
+ name = os.path.basename(path)
|
|
||||||
+ if name.startswith("sd"):
|
|
||||||
+ # ignore devices like CD drives etc.
|
|
||||||
+ sata_disks.append(name)
|
|
||||||
+ return sata_disks
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+for disk in _get_sata_disks():
|
|
||||||
ret, out = UdisksTestCase.run_command("smartctl -a /dev/%s" % disk)
|
|
||||||
|
|
||||||
# Only the following bits in the exit status mean the device failed to
|
|
@ -1,25 +0,0 @@
|
|||||||
From 195f3b030de32f5993da736c75e6a9bd76e6a7c7 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Tomas Bzatek <tbzatek@redhat.com>
|
|
||||||
Date: Fri, 26 Jun 2020 17:56:39 +0200
|
|
||||||
Subject: [PATCH 5/8] iscsi: Always flush interface property changes
|
|
||||||
|
|
||||||
---
|
|
||||||
modules/iscsi/udiskslinuxiscsisessionobject.c | 2 ++
|
|
||||||
1 file changed, 2 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/modules/iscsi/udiskslinuxiscsisessionobject.c b/modules/iscsi/udiskslinuxiscsisessionobject.c
|
|
||||||
index 9e525e3f..a43cecd1 100644
|
|
||||||
--- a/modules/iscsi/udiskslinuxiscsisessionobject.c
|
|
||||||
+++ b/modules/iscsi/udiskslinuxiscsisessionobject.c
|
|
||||||
@@ -355,6 +355,8 @@ udisks_linux_iscsi_session_object_update_iface (UDisksLinuxISCSISessionObject *s
|
|
||||||
udisks_iscsi_session_set_lu_reset_timeout (iface, session_info.tmo.lu_reset_tmo);
|
|
||||||
udisks_iscsi_session_set_recovery_timeout (iface, session_info.tmo.recovery_tmo);
|
|
||||||
udisks_iscsi_session_set_tgt_reset_timeout (iface, session_info.tmo.tgt_reset_tmo);
|
|
||||||
+
|
|
||||||
+ g_dbus_interface_skeleton_flush (G_DBUS_INTERFACE_SKELETON (iface));
|
|
||||||
}
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
--
|
|
||||||
2.26.2
|
|
||||||
|
|
@ -1,25 +0,0 @@
|
|||||||
From 861a0d8721536e2d210b79c845bb4f5b266b037f Mon Sep 17 00:00:00 2001
|
|
||||||
From: Tomas Bzatek <tbzatek@redhat.com>
|
|
||||||
Date: Fri, 26 Jun 2020 17:57:01 +0200
|
|
||||||
Subject: [PATCH 6/8] lsm: Always flush interface property changes
|
|
||||||
|
|
||||||
---
|
|
||||||
modules/lsm/lsm_linux_drive.c | 2 ++
|
|
||||||
1 file changed, 2 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/modules/lsm/lsm_linux_drive.c b/modules/lsm/lsm_linux_drive.c
|
|
||||||
index 19e68c2f..6433c308 100644
|
|
||||||
--- a/modules/lsm/lsm_linux_drive.c
|
|
||||||
+++ b/modules/lsm/lsm_linux_drive.c
|
|
||||||
@@ -220,6 +220,8 @@ _fill_drive_lsm (UDisksLinuxDriveLSM *drive_lsm,
|
|
||||||
udisks_drive_lsm_set_min_io_size (std_drv_lsm, lsm_vol_data->min_io_size);
|
|
||||||
udisks_drive_lsm_set_opt_io_size (std_drv_lsm, lsm_vol_data->opt_io_size);
|
|
||||||
udisks_drive_lsm_set_raid_disk_count (std_drv_lsm, lsm_vol_data->raid_disk_count);
|
|
||||||
+
|
|
||||||
+ g_dbus_interface_skeleton_flush (G_DBUS_INTERFACE_SKELETON (std_drv_lsm));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
--
|
|
||||||
2.26.2
|
|
||||||
|
|
@ -1,110 +0,0 @@
|
|||||||
From 39d13907f712269bb9debd0fd8a0852347c98136 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Tomas Bzatek <tbzatek@redhat.com>
|
|
||||||
Date: Fri, 26 Jun 2020 17:55:53 +0200
|
|
||||||
Subject: [PATCH 2/8] lvm2: Always flush interface property changes
|
|
||||||
|
|
||||||
---
|
|
||||||
modules/lvm2/udiskslinuxlogicalvolume.c | 3 +++
|
|
||||||
modules/lvm2/udiskslinuxphysicalvolume.c | 2 ++
|
|
||||||
modules/lvm2/udiskslinuxvdovolume.c | 2 ++
|
|
||||||
modules/lvm2/udiskslinuxvolumegroup.c | 3 +++
|
|
||||||
modules/lvm2/udiskslinuxvolumegroupobject.c | 3 +++
|
|
||||||
5 files changed, 13 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/modules/lvm2/udiskslinuxlogicalvolume.c b/modules/lvm2/udiskslinuxlogicalvolume.c
|
|
||||||
index 373cee2e..c0f074d8 100644
|
|
||||||
--- a/modules/lvm2/udiskslinuxlogicalvolume.c
|
|
||||||
+++ b/modules/lvm2/udiskslinuxlogicalvolume.c
|
|
||||||
@@ -229,6 +229,8 @@ udisks_linux_logical_volume_update (UDisksLinuxLogicalVolume *logical_volume
|
|
||||||
logical_volume->needs_udev_hack = FALSE;
|
|
||||||
g_free (dev_file);
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+ g_dbus_interface_skeleton_flush (G_DBUS_INTERFACE_SKELETON (iface));
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
@@ -248,6 +250,7 @@ udisks_linux_logical_volume_update_etctabs (UDisksLinuxLogicalVolume *logica
|
|
||||||
udisks_logical_volume_set_child_configuration (iface,
|
|
||||||
udisks_linux_find_child_configuration (daemon,
|
|
||||||
uuid));
|
|
||||||
+ g_dbus_interface_skeleton_flush (G_DBUS_INTERFACE_SKELETON (iface));
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------------------------------------- */
|
|
||||||
diff --git a/modules/lvm2/udiskslinuxphysicalvolume.c b/modules/lvm2/udiskslinuxphysicalvolume.c
|
|
||||||
index 27043030..36e7c322 100644
|
|
||||||
--- a/modules/lvm2/udiskslinuxphysicalvolume.c
|
|
||||||
+++ b/modules/lvm2/udiskslinuxphysicalvolume.c
|
|
||||||
@@ -143,6 +143,8 @@ udisks_linux_physical_volume_update (UDisksLinuxPhysicalVolume *physical_vo
|
|
||||||
udisks_physical_volume_set_size (iface, pv_info->pv_size);
|
|
||||||
udisks_physical_volume_set_free_size (iface, pv_info->pv_free);
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+ g_dbus_interface_skeleton_flush (G_DBUS_INTERFACE_SKELETON (iface));
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------------------------------------- */
|
|
||||||
diff --git a/modules/lvm2/udiskslinuxvdovolume.c b/modules/lvm2/udiskslinuxvdovolume.c
|
|
||||||
index 317eddc2..430e2814 100644
|
|
||||||
--- a/modules/lvm2/udiskslinuxvdovolume.c
|
|
||||||
+++ b/modules/lvm2/udiskslinuxvdovolume.c
|
|
||||||
@@ -177,6 +177,8 @@ udisks_linux_vdo_volume_update (UDisksLinuxVDOVolume *vdo_volume,
|
|
||||||
|
|
||||||
udisks_vdo_volume_set_compression (iface, vdo_info->compression);
|
|
||||||
udisks_vdo_volume_set_deduplication (iface, vdo_info->deduplication);
|
|
||||||
+
|
|
||||||
+ g_dbus_interface_skeleton_flush (G_DBUS_INTERFACE_SKELETON (iface));
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------------------------------------- */
|
|
||||||
diff --git a/modules/lvm2/udiskslinuxvolumegroup.c b/modules/lvm2/udiskslinuxvolumegroup.c
|
|
||||||
index aad2193e..3fbf6f02 100644
|
|
||||||
--- a/modules/lvm2/udiskslinuxvolumegroup.c
|
|
||||||
+++ b/modules/lvm2/udiskslinuxvolumegroup.c
|
|
||||||
@@ -136,11 +136,14 @@ udisks_linux_volume_group_update (UDisksLinuxVolumeGroup *volume_group,
|
|
||||||
gboolean *needs_polling_ret)
|
|
||||||
{
|
|
||||||
UDisksVolumeGroup *iface = UDISKS_VOLUME_GROUP (volume_group);
|
|
||||||
+
|
|
||||||
udisks_volume_group_set_name (iface, vg_info->name);
|
|
||||||
udisks_volume_group_set_uuid (iface, vg_info->uuid);
|
|
||||||
udisks_volume_group_set_size (iface, vg_info->size);
|
|
||||||
udisks_volume_group_set_free_size (iface, vg_info->free);
|
|
||||||
udisks_volume_group_set_extent_size (iface, vg_info->extent_size);
|
|
||||||
+
|
|
||||||
+ g_dbus_interface_skeleton_flush (G_DBUS_INTERFACE_SKELETON (iface));
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------------------------------------- */
|
|
||||||
diff --git a/modules/lvm2/udiskslinuxvolumegroupobject.c b/modules/lvm2/udiskslinuxvolumegroupobject.c
|
|
||||||
index 50e9c640..e3bc8dfc 100644
|
|
||||||
--- a/modules/lvm2/udiskslinuxvolumegroupobject.c
|
|
||||||
+++ b/modules/lvm2/udiskslinuxvolumegroupobject.c
|
|
||||||
@@ -442,6 +442,7 @@ block_object_update_lvm_iface (UDisksLinuxBlockObject *object,
|
|
||||||
|
|
||||||
udisks_linux_block_lvm2_update (UDISKS_LINUX_BLOCK_LVM2 (iface_block_lvm2), object);
|
|
||||||
udisks_block_lvm2_set_logical_volume (iface_block_lvm2, lv_obj_path);
|
|
||||||
+ g_dbus_interface_skeleton_flush (G_DBUS_INTERFACE_SKELETON (iface_block_lvm2));
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
@@ -456,6 +457,7 @@ lv_object_update_block_path (UDisksLinuxBlockObject *block_object,
|
|
||||||
{
|
|
||||||
block_objpath = g_dbus_object_get_object_path (G_DBUS_OBJECT (block_object));
|
|
||||||
udisks_logical_volume_set_block_device (UDISKS_LOGICAL_VOLUME (lv), block_objpath);
|
|
||||||
+ g_dbus_interface_skeleton_flush (G_DBUS_INTERFACE_SKELETON (lv));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -695,6 +697,7 @@ update_vg (GObject *source_obj,
|
|
||||||
bd_lvm_vgdata_free (vg_info);
|
|
||||||
lv_list_free (lvs);
|
|
||||||
|
|
||||||
+ g_dbus_interface_skeleton_flush (G_DBUS_INTERFACE_SKELETON (object->iface_volume_group));
|
|
||||||
g_object_unref (object);
|
|
||||||
}
|
|
||||||
|
|
||||||
--
|
|
||||||
2.26.2
|
|
||||||
|
|
@ -1,34 +0,0 @@
|
|||||||
From 890a0f3ca8cb5894d1764752c98b90dcb6274d6d Mon Sep 17 00:00:00 2001
|
|
||||||
From: Vojtech Trefny <vtrefny@redhat.com>
|
|
||||||
Date: Tue, 9 Jun 2020 11:16:15 +0200
|
|
||||||
Subject: [PATCH] dbus-tests: Fix UdisksLVMVDOTest.test_resize_physical
|
|
||||||
|
|
||||||
1 GiB suddenly isn't enough for physical size grow, lets hope
|
|
||||||
2 GiB will be enough for everyone.
|
|
||||||
|
|
||||||
Resolves: rhzb#1845435
|
|
||||||
---
|
|
||||||
src/tests/dbus-tests/test_20_LVM.py | 3 ++-
|
|
||||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/src/tests/dbus-tests/test_20_LVM.py b/src/tests/dbus-tests/test_20_LVM.py
|
|
||||||
index e238879a3..1073a2f90 100644
|
|
||||||
--- a/src/tests/dbus-tests/test_20_LVM.py
|
|
||||||
+++ b/src/tests/dbus-tests/test_20_LVM.py
|
|
||||||
@@ -576,6 +576,7 @@ def test_resize_logical(self):
|
|
||||||
dbus_size = self.get_property(lv, '.LogicalVolume', 'Size')
|
|
||||||
dbus_size.assertEqual(vsize * 5)
|
|
||||||
|
|
||||||
+ @udiskstestcase.tag_test(udiskstestcase.TestTags.UNSTABLE)
|
|
||||||
def test_resize_physical(self):
|
|
||||||
vgname = 'udisks_test_vdo_vg'
|
|
||||||
|
|
||||||
@@ -586,7 +587,7 @@ def test_resize_physical(self):
|
|
||||||
vg_free = self.get_property(vg, '.VolumeGroup', 'FreeSize')
|
|
||||||
lv_name = 'udisks_test_vdovlv'
|
|
||||||
pool_name = 'udisks_test_vdopool'
|
|
||||||
- psize = vg_free.value - 1 * 1024**3
|
|
||||||
+ psize = vg_free.value - 2 * 1024**3
|
|
||||||
vsize = psize * 5
|
|
||||||
lv_path = vg.CreateVDOVolume(lv_name, pool_name, dbus.UInt64(psize), dbus.UInt64(vsize),
|
|
||||||
dbus.UInt64(0), True, True, "auto", self.no_options,
|
|
@ -1,29 +0,0 @@
|
|||||||
From fdf6b233df960e6903c62b86735d86c59d967d12 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Tomas Bzatek <tbzatek@redhat.com>
|
|
||||||
Date: Fri, 19 Jun 2020 19:12:07 +0200
|
|
||||||
Subject: [PATCH] udiskslinuxblock: Fix fstab records matching by needle
|
|
||||||
|
|
||||||
Apparently mnt_fs_match_options() is not suitable for this use case.
|
|
||||||
---
|
|
||||||
src/udiskslinuxblock.c | 5 ++++-
|
|
||||||
1 file changed, 4 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/src/udiskslinuxblock.c b/src/udiskslinuxblock.c
|
|
||||||
index 888ec634..d5be8e4c 100644
|
|
||||||
--- a/src/udiskslinuxblock.c
|
|
||||||
+++ b/src/udiskslinuxblock.c
|
|
||||||
@@ -575,7 +575,10 @@ find_fstab_entries (UDisksDaemon *daemon,
|
|
||||||
}
|
|
||||||
else if (needle != NULL)
|
|
||||||
{
|
|
||||||
- if (mnt_fs_match_options (fs, needle) == 0)
|
|
||||||
+ const char *opts;
|
|
||||||
+
|
|
||||||
+ opts = mnt_fs_get_options (fs);
|
|
||||||
+ if (! opts || g_strstr_len (opts, -1, needle) == NULL)
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
--
|
|
||||||
2.26.2
|
|
||||||
|
|
@ -1,24 +0,0 @@
|
|||||||
From 724ff8679e0ae0fd4d84f4e6c1b36007e648e8ca Mon Sep 17 00:00:00 2001
|
|
||||||
From: Tomas Bzatek <tbzatek@redhat.com>
|
|
||||||
Date: Fri, 26 Jun 2020 17:57:12 +0200
|
|
||||||
Subject: [PATCH 7/8] zram: Always flush interface property changes
|
|
||||||
|
|
||||||
---
|
|
||||||
modules/zram/udiskslinuxblockzram.c | 1 +
|
|
||||||
1 file changed, 1 insertion(+)
|
|
||||||
|
|
||||||
diff --git a/modules/zram/udiskslinuxblockzram.c b/modules/zram/udiskslinuxblockzram.c
|
|
||||||
index 132d4174..1bae3686 100644
|
|
||||||
--- a/modules/zram/udiskslinuxblockzram.c
|
|
||||||
+++ b/modules/zram/udiskslinuxblockzram.c
|
|
||||||
@@ -277,6 +277,7 @@ udisks_linux_block_zram_update (UDisksLinuxBlockZRAM *zramblock,
|
|
||||||
|
|
||||||
udisks_block_zram_set_active (iface, bd_swap_swapstatus (dev_file, &error));
|
|
||||||
out:
|
|
||||||
+ g_dbus_interface_skeleton_flush (G_DBUS_INTERFACE_SKELETON (iface));
|
|
||||||
if (zram_info)
|
|
||||||
bd_kbd_zram_stats_free (zram_info);
|
|
||||||
if (error)
|
|
||||||
--
|
|
||||||
2.26.2
|
|
||||||
|
|
@ -1,528 +0,0 @@
|
|||||||
From 8d5c90a1f4bbe548a1ae361f8d69970669d6e72e Mon Sep 17 00:00:00 2001
|
|
||||||
From: Tomas Bzatek <tbzatek@redhat.com>
|
|
||||||
Date: Fri, 13 Nov 2020 16:52:11 +0100
|
|
||||||
Subject: [PATCH 1/2] udisksdaemonutil: Refactor
|
|
||||||
udisks_daemon_util_trigger_uevent() out of UDisksLinuxBlockObject
|
|
||||||
|
|
||||||
This decouples uevent triggering from UDisksLinuxBlockObject as sometimes
|
|
||||||
we don't have a block object yet or it's outdated.
|
|
||||||
---
|
|
||||||
doc/udisks2-sections.txt.daemon.sections.in | 2 +
|
|
||||||
src/udisksdaemonutil.c | 230 ++++++++++++++++++++
|
|
||||||
src/udisksdaemonutil.h | 7 +
|
|
||||||
src/udiskslinuxblockobject.c | 180 ++-------------
|
|
||||||
4 files changed, 253 insertions(+), 166 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/doc/udisks2-sections.txt.daemon.sections.in b/doc/udisks2-sections.txt.daemon.sections.in
|
|
||||||
index 26c3c2cd..3030fa95 100644
|
|
||||||
--- a/doc/udisks2-sections.txt.daemon.sections.in
|
|
||||||
+++ b/doc/udisks2-sections.txt.daemon.sections.in
|
|
||||||
@@ -307,6 +307,8 @@ udisks_daemon_util_file_set_contents
|
|
||||||
udisks_daemon_util_on_user_seat
|
|
||||||
udisks_daemon_util_get_free_mdraid_device
|
|
||||||
udisks_ata_identify_get_word
|
|
||||||
+udisks_daemon_util_trigger_uevent
|
|
||||||
+udisks_daemon_util_trigger_uevent_sync
|
|
||||||
</SECTION>
|
|
||||||
|
|
||||||
<SECTION>
|
|
||||||
diff --git a/src/udisksdaemonutil.c b/src/udisksdaemonutil.c
|
|
||||||
index 75b877a0..d16c0766 100644
|
|
||||||
--- a/src/udisksdaemonutil.c
|
|
||||||
+++ b/src/udisksdaemonutil.c
|
|
||||||
@@ -34,10 +34,14 @@
|
|
||||||
#include <limits.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
+#include <blockdev/blockdev.h>
|
|
||||||
+
|
|
||||||
#include "udisksdaemon.h"
|
|
||||||
#include "udisksdaemonutil.h"
|
|
||||||
#include "udisksstate.h"
|
|
||||||
#include "udiskslogging.h"
|
|
||||||
+#include "udiskslinuxdevice.h"
|
|
||||||
+#include "udiskslinuxprovider.h"
|
|
||||||
#include "udiskslinuxblockobject.h"
|
|
||||||
#include "udiskslinuxdriveobject.h"
|
|
||||||
|
|
||||||
@@ -1626,3 +1630,229 @@ udisks_ata_identify_get_word (const guchar *identify_data, guint word_number)
|
|
||||||
out:
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+/* ---------------------------------------------------------------------------------------------------- */
|
|
||||||
+
|
|
||||||
+static volatile guint uevent_serial = 0;
|
|
||||||
+
|
|
||||||
+static gboolean
|
|
||||||
+trigger_uevent (const gchar *path, const gchar *str)
|
|
||||||
+{
|
|
||||||
+ gint fd;
|
|
||||||
+
|
|
||||||
+ fd = open (path, O_WRONLY);
|
|
||||||
+ if (fd < 0)
|
|
||||||
+ {
|
|
||||||
+ udisks_warning ("Error opening %s while triggering uevent: %m", path);
|
|
||||||
+ return FALSE;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (write (fd, str, strlen (str)) != (ssize_t) strlen (str))
|
|
||||||
+ {
|
|
||||||
+ udisks_warning ("Error writing '%s' to file %s: %m", str, path);
|
|
||||||
+ close (fd);
|
|
||||||
+ return FALSE;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ close (fd);
|
|
||||||
+ return TRUE;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+typedef struct
|
|
||||||
+{
|
|
||||||
+ UDisksDaemon *daemon;
|
|
||||||
+ GMainLoop *main_loop;
|
|
||||||
+ guint serial;
|
|
||||||
+ gchar *uevent_path;
|
|
||||||
+ gboolean success;
|
|
||||||
+} SynthUeventData;
|
|
||||||
+
|
|
||||||
+static gboolean
|
|
||||||
+trigger_uevent_idle_cb (gpointer user_data)
|
|
||||||
+{
|
|
||||||
+ SynthUeventData *data = user_data;
|
|
||||||
+ gchar *str;
|
|
||||||
+
|
|
||||||
+ str = g_strdup_printf ("change %s UDISKSSERIAL=%u", udisks_daemon_get_uuid (data->daemon), data->serial);
|
|
||||||
+
|
|
||||||
+ if (! trigger_uevent (data->uevent_path, str))
|
|
||||||
+ {
|
|
||||||
+ /* kernel refused our string, try simple "change" but don't wait for it */
|
|
||||||
+ trigger_uevent (data->uevent_path, "change");
|
|
||||||
+ data->success = FALSE;
|
|
||||||
+ g_main_loop_quit (data->main_loop);
|
|
||||||
+ }
|
|
||||||
+ g_free (str);
|
|
||||||
+
|
|
||||||
+ /* remove the source */
|
|
||||||
+ return FALSE;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static gboolean
|
|
||||||
+uevent_wait_timeout_cb (gpointer user_data)
|
|
||||||
+{
|
|
||||||
+ SynthUeventData *data = user_data;
|
|
||||||
+
|
|
||||||
+ data->success = FALSE;
|
|
||||||
+ g_main_loop_quit (data->main_loop);
|
|
||||||
+
|
|
||||||
+ /* remove the source */
|
|
||||||
+ return FALSE;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static void
|
|
||||||
+uevent_probed_cb (UDisksLinuxProvider *provider,
|
|
||||||
+ const gchar *action,
|
|
||||||
+ UDisksLinuxDevice *device,
|
|
||||||
+ gpointer user_data)
|
|
||||||
+{
|
|
||||||
+ SynthUeventData *data = user_data;
|
|
||||||
+ const gchar *received_serial_str;
|
|
||||||
+ gint64 received_serial;
|
|
||||||
+ gchar *endptr;
|
|
||||||
+
|
|
||||||
+ received_serial_str = g_udev_device_get_property (device->udev_device, "SYNTH_ARG_UDISKSSERIAL");
|
|
||||||
+ if (received_serial_str != NULL)
|
|
||||||
+ {
|
|
||||||
+ endptr = (gchar *) received_serial_str;
|
|
||||||
+ received_serial = g_ascii_strtoll (received_serial_str, &endptr, 0);
|
|
||||||
+ if (endptr != received_serial_str && received_serial == data->serial)
|
|
||||||
+ {
|
|
||||||
+ data->success = TRUE;
|
|
||||||
+ g_main_loop_quit (data->main_loop);
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+/**
|
|
||||||
+ * udisks_daemon_util_trigger_uevent:
|
|
||||||
+ * @daemon: A #UDisksDaemon.
|
|
||||||
+ * @device_path: Block device path.
|
|
||||||
+ *
|
|
||||||
+ * Triggers a 'change' uevent in the kernel.
|
|
||||||
+ *
|
|
||||||
+ * The triggered event will bubble up from the kernel through the udev
|
|
||||||
+ * stack and will eventually be received by the udisks daemon process
|
|
||||||
+ * itself. This method does not wait for the event to be received.
|
|
||||||
+ */
|
|
||||||
+void
|
|
||||||
+udisks_daemon_util_trigger_uevent (UDisksDaemon *daemon,
|
|
||||||
+ const gchar *device_path)
|
|
||||||
+{
|
|
||||||
+ GUdevClient *gudev_client;
|
|
||||||
+ GUdevDevice *gudev_device;
|
|
||||||
+ gchar *path;
|
|
||||||
+
|
|
||||||
+ g_return_if_fail (UDISKS_IS_DAEMON (daemon));
|
|
||||||
+ g_return_if_fail (device_path != NULL);
|
|
||||||
+
|
|
||||||
+ gudev_client = udisks_linux_provider_get_udev_client (udisks_daemon_get_linux_provider (daemon));
|
|
||||||
+ gudev_device = g_udev_client_query_by_device_file (gudev_client, device_path);
|
|
||||||
+ if (gudev_device == NULL)
|
|
||||||
+ {
|
|
||||||
+ udisks_critical ("Device %s not found in udev database, skipping uevent trigger", device_path);
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ path = g_build_filename (g_udev_device_get_sysfs_path (gudev_device), "uevent", NULL);
|
|
||||||
+ trigger_uevent (path, "change");
|
|
||||||
+ g_free (path);
|
|
||||||
+
|
|
||||||
+ g_object_unref (gudev_device);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+/**
|
|
||||||
+ * udisks_daemon_util_trigger_uevent_sync:
|
|
||||||
+ * @daemon: A #UDisksDaemon.
|
|
||||||
+ * @device_path: Block device path.
|
|
||||||
+ * @timeout_seconds: Maximum time to wait for the uevent (in seconds).
|
|
||||||
+ *
|
|
||||||
+ * Triggers a 'change' uevent in the kernel and waits until it's received and
|
|
||||||
+ * processed by udisks.
|
|
||||||
+ *
|
|
||||||
+ * Unlike udisks_daemon_util_trigger_uevent() that just triggers
|
|
||||||
+ * a synthetic uevent to the kernel, this call will actually block and wait until
|
|
||||||
+ * the #UDisksLinuxProvider receives the uevent, performs probing and processes
|
|
||||||
+ * the uevent further down the UDisks object stack. Upon returning from this
|
|
||||||
+ * function call the caller may assume the event has been fully processed, all
|
|
||||||
+ * D-Bus objects are updated and settled. Typically used in busy wait for
|
|
||||||
+ * a particular D-Bus interface.
|
|
||||||
+ *
|
|
||||||
+ * Note that this uses synthetic uevent tagging and only works on linux kernel
|
|
||||||
+ * 4.13 and higher. In case an older kernel is detected this acts like the classic
|
|
||||||
+ * udisks_daemon_util_trigger_uevent() call and %FALSE is returned.
|
|
||||||
+ *
|
|
||||||
+ * Returns: %TRUE if the uevent has been successfully received, %FALSE otherwise
|
|
||||||
+ * or when the kernel version is too old.
|
|
||||||
+ */
|
|
||||||
+gboolean
|
|
||||||
+udisks_daemon_util_trigger_uevent_sync (UDisksDaemon *daemon,
|
|
||||||
+ const gchar *device_path,
|
|
||||||
+ guint timeout_seconds)
|
|
||||||
+{
|
|
||||||
+ UDisksLinuxProvider *provider;
|
|
||||||
+ GUdevClient *gudev_client;
|
|
||||||
+ GUdevDevice *gudev_device;
|
|
||||||
+ SynthUeventData data;
|
|
||||||
+ GMainContext *main_context;
|
|
||||||
+ GSource *idle_source;
|
|
||||||
+ GSource *timeout_source;
|
|
||||||
+
|
|
||||||
+ g_return_val_if_fail (UDISKS_IS_DAEMON (daemon), FALSE);
|
|
||||||
+ g_return_val_if_fail (device_path != NULL, FALSE);
|
|
||||||
+
|
|
||||||
+ if (bd_utils_check_linux_version (4, 13, 0) < 0)
|
|
||||||
+ {
|
|
||||||
+ udisks_daemon_util_trigger_uevent (daemon, device_path);
|
|
||||||
+ return FALSE;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ provider = udisks_daemon_get_linux_provider (daemon);
|
|
||||||
+ gudev_client = udisks_linux_provider_get_udev_client (provider);
|
|
||||||
+ gudev_device = g_udev_client_query_by_device_file (gudev_client, device_path);
|
|
||||||
+ if (gudev_device == NULL)
|
|
||||||
+ {
|
|
||||||
+ udisks_critical ("Device %s not found in udev database, skipping uevent trigger", device_path);
|
|
||||||
+ return FALSE;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ data.daemon = daemon;
|
|
||||||
+ data.uevent_path = g_build_filename (g_udev_device_get_sysfs_path (gudev_device), "uevent", NULL);
|
|
||||||
+ data.serial = g_atomic_int_add (&uevent_serial, 1);
|
|
||||||
+
|
|
||||||
+ main_context = g_main_context_new ();
|
|
||||||
+ g_main_context_push_thread_default (main_context);
|
|
||||||
+ data.main_loop = g_main_loop_new (main_context, FALSE);
|
|
||||||
+
|
|
||||||
+ /* queue the actual trigger in the loop */
|
|
||||||
+ idle_source = g_idle_source_new ();
|
|
||||||
+ g_source_set_callback (idle_source, (GSourceFunc) trigger_uevent_idle_cb, &data, NULL);
|
|
||||||
+ g_source_attach (idle_source, main_context);
|
|
||||||
+ g_source_unref (idle_source);
|
|
||||||
+
|
|
||||||
+ /* add timeout as a fallback */
|
|
||||||
+ timeout_source = g_timeout_source_new_seconds (timeout_seconds);
|
|
||||||
+ g_source_set_callback (timeout_source, (GSourceFunc) uevent_wait_timeout_cb, &data, NULL);
|
|
||||||
+ g_source_attach (timeout_source, main_context);
|
|
||||||
+ g_source_unref (timeout_source);
|
|
||||||
+
|
|
||||||
+ /* catch incoming uevents */
|
|
||||||
+ g_signal_connect (provider, "uevent-probed", G_CALLBACK (uevent_probed_cb), &data);
|
|
||||||
+
|
|
||||||
+ data.success = FALSE;
|
|
||||||
+ g_main_loop_run (data.main_loop);
|
|
||||||
+
|
|
||||||
+ g_signal_handlers_disconnect_by_func (provider, uevent_probed_cb, &data);
|
|
||||||
+ g_main_context_pop_thread_default (main_context);
|
|
||||||
+
|
|
||||||
+ g_main_loop_unref (data.main_loop);
|
|
||||||
+ g_main_context_unref (main_context);
|
|
||||||
+
|
|
||||||
+ g_free (data.uevent_path);
|
|
||||||
+ g_object_unref (gudev_device);
|
|
||||||
+
|
|
||||||
+ return data.success;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+/* ---------------------------------------------------------------------------------------------------- */
|
|
||||||
diff --git a/src/udisksdaemonutil.h b/src/udisksdaemonutil.h
|
|
||||||
index 4fe36214..2edf2122 100644
|
|
||||||
--- a/src/udisksdaemonutil.h
|
|
||||||
+++ b/src/udisksdaemonutil.h
|
|
||||||
@@ -51,6 +51,13 @@ guint64 udisks_daemon_util_block_get_size (GUdevDevice *device,
|
|
||||||
gboolean *out_media_available,
|
|
||||||
gboolean *out_media_change_detected);
|
|
||||||
|
|
||||||
+void udisks_daemon_util_trigger_uevent (UDisksDaemon *daemon,
|
|
||||||
+ const gchar *device_path);
|
|
||||||
+
|
|
||||||
+gboolean udisks_daemon_util_trigger_uevent_sync (UDisksDaemon *daemon,
|
|
||||||
+ const gchar *device_path,
|
|
||||||
+ guint timeout_seconds);
|
|
||||||
+
|
|
||||||
gchar *udisks_daemon_util_resolve_link (const gchar *path,
|
|
||||||
const gchar *name);
|
|
||||||
|
|
||||||
diff --git a/src/udiskslinuxblockobject.c b/src/udiskslinuxblockobject.c
|
|
||||||
index 42ab17d7..5a68c84b 100644
|
|
||||||
--- a/src/udiskslinuxblockobject.c
|
|
||||||
+++ b/src/udiskslinuxblockobject.c
|
|
||||||
@@ -38,8 +38,6 @@
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <glib/gstdio.h>
|
|
||||||
|
|
||||||
-#include <blockdev/blockdev.h>
|
|
||||||
-
|
|
||||||
#include "udiskslogging.h"
|
|
||||||
#include "udisksdaemon.h"
|
|
||||||
#include "udisksdaemonutil.h"
|
|
||||||
@@ -959,122 +957,24 @@ on_mount_monitor_mount_removed (UDisksMountMonitor *monitor,
|
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------------------------------------- */
|
|
||||||
|
|
||||||
-static volatile guint uevent_serial = 0;
|
|
||||||
-
|
|
||||||
-static gboolean
|
|
||||||
-trigger_uevent (const gchar *path, const gchar *str)
|
|
||||||
-{
|
|
||||||
- gint fd;
|
|
||||||
-
|
|
||||||
- fd = open (path, O_WRONLY);
|
|
||||||
- if (fd < 0)
|
|
||||||
- {
|
|
||||||
- udisks_warning ("Error opening %s while triggering uevent: %m", path);
|
|
||||||
- return FALSE;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- if (write (fd, str, strlen (str)) != (ssize_t) strlen (str))
|
|
||||||
- {
|
|
||||||
- udisks_warning ("Error writing '%s' to file %s: %m", str, path);
|
|
||||||
- close (fd);
|
|
||||||
- return FALSE;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- close (fd);
|
|
||||||
- return TRUE;
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
-typedef struct
|
|
||||||
-{
|
|
||||||
- UDisksLinuxBlockObject *object;
|
|
||||||
- GMainLoop *main_loop;
|
|
||||||
- guint serial;
|
|
||||||
- gchar *uevent_path;
|
|
||||||
- gboolean success;
|
|
||||||
-} SynthUeventData;
|
|
||||||
-
|
|
||||||
-static gboolean
|
|
||||||
-trigger_uevent_idle_cb (gpointer user_data)
|
|
||||||
-{
|
|
||||||
- SynthUeventData *data = user_data;
|
|
||||||
- gchar *str;
|
|
||||||
-
|
|
||||||
- str = g_strdup_printf ("change %s UDISKSSERIAL=%u", udisks_daemon_get_uuid (data->object->daemon), data->serial);
|
|
||||||
-
|
|
||||||
- if (! trigger_uevent (data->uevent_path, str))
|
|
||||||
- {
|
|
||||||
- /* kernel refused our string, try simple "change" but don't wait for it */
|
|
||||||
- trigger_uevent (data->uevent_path, "change");
|
|
||||||
- data->success = FALSE;
|
|
||||||
- g_main_loop_quit (data->main_loop);
|
|
||||||
- }
|
|
||||||
- g_free (str);
|
|
||||||
-
|
|
||||||
- /* remove the source */
|
|
||||||
- return FALSE;
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
-static gboolean
|
|
||||||
-uevent_wait_timeout_cb (gpointer user_data)
|
|
||||||
-{
|
|
||||||
- SynthUeventData *data = user_data;
|
|
||||||
-
|
|
||||||
- data->success = FALSE;
|
|
||||||
- g_main_loop_quit (data->main_loop);
|
|
||||||
-
|
|
||||||
- /* remove the source */
|
|
||||||
- return FALSE;
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
-static void
|
|
||||||
-uevent_probed_cb (UDisksLinuxProvider *provider,
|
|
||||||
- const gchar *action,
|
|
||||||
- UDisksLinuxDevice *device,
|
|
||||||
- gpointer user_data)
|
|
||||||
-{
|
|
||||||
- SynthUeventData *data = user_data;
|
|
||||||
- const gchar *received_serial_str;
|
|
||||||
- gint64 received_serial;
|
|
||||||
- gchar *endptr;
|
|
||||||
-
|
|
||||||
- received_serial_str = g_udev_device_get_property (device->udev_device, "SYNTH_ARG_UDISKSSERIAL");
|
|
||||||
- if (received_serial_str != NULL)
|
|
||||||
- {
|
|
||||||
- endptr = (gchar *) received_serial_str;
|
|
||||||
- received_serial = g_ascii_strtoll (received_serial_str, &endptr, 0);
|
|
||||||
- if (endptr != received_serial_str && received_serial == data->serial)
|
|
||||||
- {
|
|
||||||
- data->success = TRUE;
|
|
||||||
- g_main_loop_quit (data->main_loop);
|
|
||||||
- }
|
|
||||||
- }
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
/**
|
|
||||||
* udisks_linux_block_object_trigger_uevent:
|
|
||||||
* @object: A #UDisksLinuxBlockObject.
|
|
||||||
*
|
|
||||||
* Triggers a 'change' uevent in the kernel.
|
|
||||||
*
|
|
||||||
- * The triggered event will bubble up from the kernel through the udev
|
|
||||||
- * stack and will eventually be received by the udisks daemon process
|
|
||||||
- * itself. This method does not wait for the event to be received.
|
|
||||||
+ * Refer to udisks_daemon_util_trigger_uevent() for detailed description.
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
udisks_linux_block_object_trigger_uevent (UDisksLinuxBlockObject *object)
|
|
||||||
{
|
|
||||||
- UDisksLinuxDevice *device;
|
|
||||||
- gchar *path;
|
|
||||||
+ gchar *device_file;
|
|
||||||
|
|
||||||
g_return_if_fail (UDISKS_IS_LINUX_BLOCK_OBJECT (object));
|
|
||||||
|
|
||||||
- device = udisks_linux_block_object_get_device (object);
|
|
||||||
- path = g_strconcat (g_udev_device_get_sysfs_path (device->udev_device), "/uevent", NULL);
|
|
||||||
-
|
|
||||||
- trigger_uevent (path, "change");
|
|
||||||
-
|
|
||||||
- g_free (path);
|
|
||||||
- g_object_unref (device);
|
|
||||||
+ device_file = udisks_linux_block_object_get_device_file (object);
|
|
||||||
+ udisks_daemon_util_trigger_uevent (object->daemon, device_file);
|
|
||||||
+ g_free (device_file);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
@@ -1083,19 +983,10 @@ udisks_linux_block_object_trigger_uevent (UDisksLinuxBlockObject *object)
|
|
||||||
* @timeout_seconds: Maximum time to wait for the uevent (in seconds).
|
|
||||||
*
|
|
||||||
* Triggers a 'change' uevent in the kernel and waits until it's received and
|
|
||||||
- * processed by udisks.
|
|
||||||
- *
|
|
||||||
- * Unlike udisks_linux_block_object_trigger_uevent() that just triggers
|
|
||||||
- * a synthetic uevent to the kernel, this call will actually block and wait until
|
|
||||||
- * the #UDisksLinuxProvider receives the uevent, performs probing and processes
|
|
||||||
- * the uevent further down the UDisks object stack. Upon returning from this
|
|
||||||
- * function call the caller may assume the event has been fully processed, all
|
|
||||||
- * D-Bus objects are updated and settled. Typically used in busy wait for
|
|
||||||
- * a particular D-Bus interface.
|
|
||||||
+ * processed through the uevent queue.
|
|
||||||
*
|
|
||||||
- * Note that this uses synthetic uevent tagging and only works on linux kernel
|
|
||||||
- * 4.13 and higher. In case an older kernel is detected this acts like the classic
|
|
||||||
- * udisks_linux_block_object_trigger_uevent() call and %FALSE is returned.
|
|
||||||
+ * This is a convenient wrapper around udisks_daemon_util_trigger_uevent_sync().
|
|
||||||
+ * Refer to this function for detailed documentation.
|
|
||||||
*
|
|
||||||
* Returns: %TRUE if the uevent has been successfully received, %FALSE otherwise
|
|
||||||
* or when the kernel version is too old.
|
|
||||||
@@ -1104,59 +995,16 @@ gboolean
|
|
||||||
udisks_linux_block_object_trigger_uevent_sync (UDisksLinuxBlockObject *object,
|
|
||||||
guint timeout_seconds)
|
|
||||||
{
|
|
||||||
- UDisksLinuxDevice *device;
|
|
||||||
- UDisksLinuxProvider *provider;
|
|
||||||
- SynthUeventData data;
|
|
||||||
- GMainContext *main_context;
|
|
||||||
- GSource *idle_source;
|
|
||||||
- GSource *timeout_source;
|
|
||||||
+ gchar *device_file;
|
|
||||||
+ gboolean ret;
|
|
||||||
|
|
||||||
g_return_val_if_fail (UDISKS_IS_LINUX_BLOCK_OBJECT (object), FALSE);
|
|
||||||
|
|
||||||
- if (bd_utils_check_linux_version (4, 13, 0) < 0)
|
|
||||||
- {
|
|
||||||
- udisks_linux_block_object_trigger_uevent (object);
|
|
||||||
- return FALSE;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- data.object = object;
|
|
||||||
- device = udisks_linux_block_object_get_device (object);
|
|
||||||
- data.uevent_path = g_strconcat (g_udev_device_get_sysfs_path (device->udev_device), "/uevent", NULL);
|
|
||||||
- data.serial = g_atomic_int_add (&uevent_serial, 1);
|
|
||||||
-
|
|
||||||
- main_context = g_main_context_new ();
|
|
||||||
- g_main_context_push_thread_default (main_context);
|
|
||||||
- data.main_loop = g_main_loop_new (main_context, FALSE);
|
|
||||||
-
|
|
||||||
- /* queue the actual trigger in the loop */
|
|
||||||
- idle_source = g_idle_source_new ();
|
|
||||||
- g_source_set_callback (idle_source, (GSourceFunc) trigger_uevent_idle_cb, &data, NULL);
|
|
||||||
- g_source_attach (idle_source, main_context);
|
|
||||||
- g_source_unref (idle_source);
|
|
||||||
+ device_file = udisks_linux_block_object_get_device_file (object);
|
|
||||||
+ ret = udisks_daemon_util_trigger_uevent_sync (object->daemon, device_file, timeout_seconds);
|
|
||||||
+ g_free (device_file);
|
|
||||||
|
|
||||||
- /* add timeout as a fallback */
|
|
||||||
- timeout_source = g_timeout_source_new_seconds (timeout_seconds);
|
|
||||||
- g_source_set_callback (timeout_source, (GSourceFunc) uevent_wait_timeout_cb, &data, NULL);
|
|
||||||
- g_source_attach (timeout_source, main_context);
|
|
||||||
- g_source_unref (timeout_source);
|
|
||||||
-
|
|
||||||
- /* catch incoming uevents */
|
|
||||||
- provider = udisks_daemon_get_linux_provider (object->daemon);
|
|
||||||
- g_signal_connect (provider, "uevent-probed", G_CALLBACK (uevent_probed_cb), &data);
|
|
||||||
-
|
|
||||||
- data.success = FALSE;
|
|
||||||
- g_main_loop_run (data.main_loop);
|
|
||||||
-
|
|
||||||
- g_signal_handlers_disconnect_by_func (provider, uevent_probed_cb, &data);
|
|
||||||
- g_main_context_pop_thread_default (main_context);
|
|
||||||
-
|
|
||||||
- g_main_loop_unref (data.main_loop);
|
|
||||||
- g_main_context_unref (main_context);
|
|
||||||
-
|
|
||||||
- g_free (data.uevent_path);
|
|
||||||
- g_object_unref (device);
|
|
||||||
-
|
|
||||||
- return data.success;
|
|
||||||
+ return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------------------------------------- */
|
|
||||||
--
|
|
||||||
2.26.2
|
|
||||||
|
|
@ -1,27 +0,0 @@
|
|||||||
From 7fe04e70dc5a5ccf621a0beacc6d4b9e904037df Mon Sep 17 00:00:00 2001
|
|
||||||
From: Tomas Bzatek <tbzatek@redhat.com>
|
|
||||||
Date: Fri, 13 Nov 2020 16:57:24 +0100
|
|
||||||
Subject: [PATCH 2/2] udiskslinuxmanager: Trigger uevent after loop device
|
|
||||||
setup
|
|
||||||
|
|
||||||
---
|
|
||||||
src/udiskslinuxmanager.c | 3 +++
|
|
||||||
1 file changed, 3 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/src/udiskslinuxmanager.c b/src/udiskslinuxmanager.c
|
|
||||||
index 1bbf980a..e0a83a80 100644
|
|
||||||
--- a/src/udiskslinuxmanager.c
|
|
||||||
+++ b/src/udiskslinuxmanager.c
|
|
||||||
@@ -430,6 +430,9 @@ handle_loop_setup (UDisksManager *object,
|
|
||||||
error = NULL;
|
|
||||||
wait_data.loop_device = loop_device;
|
|
||||||
wait_data.path = path;
|
|
||||||
+ udisks_daemon_util_trigger_uevent_sync (manager->daemon,
|
|
||||||
+ loop_device,
|
|
||||||
+ UDISKS_DEFAULT_WAIT_TIMEOUT);
|
|
||||||
loop_object = udisks_daemon_wait_for_object_sync (manager->daemon,
|
|
||||||
wait_for_loop_object,
|
|
||||||
&wait_data,
|
|
||||||
--
|
|
||||||
2.26.2
|
|
||||||
|
|
@ -1,405 +0,0 @@
|
|||||||
diff -up udisks-2.9.0/src/tests/dbus-tests/test_50_block.py.bak udisks-2.9.0/src/tests/dbus-tests/test_50_block.py
|
|
||||||
--- udisks-2.9.0/src/tests/dbus-tests/test_50_block.py.bak 2020-05-26 14:59:20.000000000 +0200
|
|
||||||
+++ udisks-2.9.0/src/tests/dbus-tests/test_50_block.py 2023-06-02 17:08:45.203845819 +0200
|
|
||||||
@@ -11,6 +11,8 @@ import udiskstestcase
|
|
||||||
class UdisksBlockTest(udiskstestcase.UdisksTestCase):
|
|
||||||
'''This is a basic block device test suite'''
|
|
||||||
|
|
||||||
+ LUKS_PASSPHRASE = 'shouldnotseeme'
|
|
||||||
+
|
|
||||||
def _close_luks(self, disk):
|
|
||||||
disk.Lock(self.no_options, dbus_interface=self.iface_prefix + '.Encrypted')
|
|
||||||
|
|
||||||
@@ -201,7 +203,7 @@ class UdisksBlockTest(udiskstestcase.Udi
|
|
||||||
|
|
||||||
# format the disk
|
|
||||||
disk = self.get_object('/block_devices/' + os.path.basename(self.vdevs[0]))
|
|
||||||
- disk.Format('xfs', {'encrypt.passphrase': 'test'}, dbus_interface=self.iface_prefix + '.Block')
|
|
||||||
+ disk.Format('xfs', {'encrypt.passphrase': self.LUKS_PASSPHRASE}, dbus_interface=self.iface_prefix + '.Block')
|
|
||||||
|
|
||||||
# cleanup -- close the luks and remove format
|
|
||||||
self.addCleanup(self.wipe_fs, self.vdevs[0])
|
|
||||||
@@ -209,7 +211,7 @@ class UdisksBlockTest(udiskstestcase.Udi
|
|
||||||
|
|
||||||
# configuration items as arrays of dbus.Byte
|
|
||||||
opts = self.str_to_ay('verify')
|
|
||||||
- passwd = self.str_to_ay('test')
|
|
||||||
+ passwd = self.str_to_ay(self.LUKS_PASSPHRASE)
|
|
||||||
|
|
||||||
# set the new configuration
|
|
||||||
conf = dbus.Dictionary({'passphrase-contents': passwd,
|
|
||||||
@@ -254,7 +256,7 @@ class UdisksBlockTest(udiskstestcase.Udi
|
|
||||||
|
|
||||||
# format the disk
|
|
||||||
disk = self.get_object('/block_devices/' + os.path.basename(self.vdevs[0]))
|
|
||||||
- disk.Format('xfs', {'encrypt.passphrase': 'test'}, dbus_interface=self.iface_prefix + '.Block')
|
|
||||||
+ disk.Format('xfs', {'encrypt.passphrase': self.LUKS_PASSPHRASE}, dbus_interface=self.iface_prefix + '.Block')
|
|
||||||
|
|
||||||
# cleanup -- close the luks and remove format
|
|
||||||
self.addCleanup(self.wipe_fs, self.vdevs[0])
|
|
||||||
diff -up udisks-2.9.0/src/tests/dbus-tests/test_70_encrypted.py.bak udisks-2.9.0/src/tests/dbus-tests/test_70_encrypted.py
|
|
||||||
--- udisks-2.9.0/src/tests/dbus-tests/test_70_encrypted.py.bak 2020-05-26 14:59:20.000000000 +0200
|
|
||||||
+++ udisks-2.9.0/src/tests/dbus-tests/test_70_encrypted.py 2023-06-02 17:07:33.828531988 +0200
|
|
||||||
@@ -40,6 +40,9 @@ def _get_blkid_version():
|
|
||||||
class UdisksEncryptedTest(udiskstestcase.UdisksTestCase):
|
|
||||||
'''This is an encrypted device test suite'''
|
|
||||||
|
|
||||||
+ PASSPHRASE = 'shouldnotseeme'
|
|
||||||
+ LUKS_NAME = 'myshinylittleluks'
|
|
||||||
+
|
|
||||||
def _create_luks(self, device, passphrase, binary=False):
|
|
||||||
raise NotImplementedError()
|
|
||||||
|
|
||||||
@@ -60,7 +63,7 @@ class UdisksEncryptedTest(udiskstestcase
|
|
||||||
disk_name = os.path.basename(self.vdevs[0])
|
|
||||||
disk = self.get_object('/block_devices/' + disk_name)
|
|
||||||
|
|
||||||
- self._create_luks(disk, 'test')
|
|
||||||
+ self._create_luks(disk, self.PASSPHRASE)
|
|
||||||
self.addCleanup(self._remove_luks, disk)
|
|
||||||
self.udev_settle()
|
|
||||||
|
|
||||||
@@ -124,7 +127,7 @@ class UdisksEncryptedTest(udiskstestcase
|
|
||||||
disk_name = os.path.basename(self.vdevs[0])
|
|
||||||
disk = self.get_object('/block_devices/' + disk_name)
|
|
||||||
|
|
||||||
- self._create_luks(disk, 'test')
|
|
||||||
+ self._create_luks(disk, self.PASSPHRASE)
|
|
||||||
self.addCleanup(self._remove_luks, disk)
|
|
||||||
self.udev_settle()
|
|
||||||
|
|
||||||
@@ -160,11 +163,11 @@ class UdisksEncryptedTest(udiskstestcase
|
|
||||||
# wrong password
|
|
||||||
msg = 'org.freedesktop.UDisks2.Error.Failed: Error unlocking %s *' % self.vdevs[0]
|
|
||||||
with six.assertRaisesRegex(self, dbus.exceptions.DBusException, msg):
|
|
||||||
- disk.Unlock('shbdkjaf', self.no_options,
|
|
||||||
+ disk.Unlock('abcdefghijklmn', self.no_options,
|
|
||||||
dbus_interface=self.iface_prefix + '.Encrypted')
|
|
||||||
|
|
||||||
# right password
|
|
||||||
- luks = disk.Unlock('test', self.no_options,
|
|
||||||
+ luks = disk.Unlock(self.PASSPHRASE, self.no_options,
|
|
||||||
dbus_interface=self.iface_prefix + '.Encrypted')
|
|
||||||
self.assertIsNotNone(luks)
|
|
||||||
self.assertTrue(os.path.exists('/dev/disk/by-uuid/%s' % luks_uuid))
|
|
||||||
@@ -180,7 +183,7 @@ class UdisksEncryptedTest(udiskstestcase
|
|
||||||
|
|
||||||
# read-only
|
|
||||||
ro_opts = dbus.Dictionary({'read-only': dbus.Boolean(True)}, signature=dbus.Signature('sv'))
|
|
||||||
- luks = disk.Unlock('test', ro_opts,
|
|
||||||
+ luks = disk.Unlock(self.PASSPHRASE, ro_opts,
|
|
||||||
dbus_interface=self.iface_prefix + '.Encrypted')
|
|
||||||
self.assertIsNotNone(luks)
|
|
||||||
self.assertTrue(os.path.exists('/dev/disk/by-uuid/%s' % luks_uuid))
|
|
||||||
@@ -196,13 +199,10 @@ class UdisksEncryptedTest(udiskstestcase
|
|
||||||
crypttab = self.read_file('/etc/crypttab')
|
|
||||||
self.addCleanup(self.write_file, '/etc/crypttab', crypttab)
|
|
||||||
|
|
||||||
- passwd = 'test'
|
|
||||||
- luks_name = 'myshinylittleluks'
|
|
||||||
-
|
|
||||||
disk_name = os.path.basename(self.vdevs[0])
|
|
||||||
disk = self.get_object('/block_devices/' + disk_name)
|
|
||||||
|
|
||||||
- self._create_luks(disk, passwd)
|
|
||||||
+ self._create_luks(disk, self.PASSPHRASE)
|
|
||||||
self.addCleanup(self._remove_luks, disk)
|
|
||||||
self.udev_settle()
|
|
||||||
|
|
||||||
@@ -212,22 +212,22 @@ class UdisksEncryptedTest(udiskstestcase
|
|
||||||
disk.Lock(self.no_options, dbus_interface=self.iface_prefix + '.Encrypted')
|
|
||||||
|
|
||||||
# add new entry to the crypttab
|
|
||||||
- new_crypttab = crypttab + '%s UUID=%s none\n' % (luks_name, disk_uuid)
|
|
||||||
+ new_crypttab = crypttab + '%s UUID=%s none\n' % (self.LUKS_NAME, disk_uuid)
|
|
||||||
self.write_file('/etc/crypttab', new_crypttab)
|
|
||||||
|
|
||||||
# give udisks time to react to change of the file
|
|
||||||
time.sleep(5)
|
|
||||||
dbus_conf = disk.GetSecretConfiguration(self.no_options, dbus_interface=self.iface_prefix + '.Block')
|
|
||||||
self.assertIsNotNone(dbus_conf)
|
|
||||||
- self.assertEqual(self.ay_to_str(dbus_conf[0][1]['name']), luks_name)
|
|
||||||
+ self.assertEqual(self.ay_to_str(dbus_conf[0][1]['name']), self.LUKS_NAME)
|
|
||||||
|
|
||||||
# unlock the device
|
|
||||||
- luks = disk.Unlock(passwd, self.no_options,
|
|
||||||
+ luks = disk.Unlock(self.PASSPHRASE, self.no_options,
|
|
||||||
dbus_interface=self.iface_prefix + '.Encrypted')
|
|
||||||
self.assertIsNotNone(luks)
|
|
||||||
|
|
||||||
# unlock should use name from crypttab for the /dev/mapper device
|
|
||||||
- dm_path = '/dev/mapper/%s' % luks_name
|
|
||||||
+ dm_path = '/dev/mapper/%s' % self.LUKS_NAME
|
|
||||||
self.assertTrue(os.path.exists(dm_path))
|
|
||||||
|
|
||||||
# preferred 'device' should be /dev/mapper/name too
|
|
||||||
@@ -242,8 +242,7 @@ class UdisksEncryptedTest(udiskstestcase
|
|
||||||
crypttab = self.read_file('/etc/crypttab')
|
|
||||||
self.addCleanup(self.write_file, '/etc/crypttab', crypttab)
|
|
||||||
|
|
||||||
- passwd = b'test\0test'
|
|
||||||
- luks_name = 'myshinylittleluks'
|
|
||||||
+ passwd = b'testtesttest\0testtesttest'
|
|
||||||
|
|
||||||
# create key file
|
|
||||||
_fd, key_file = tempfile.mkstemp()
|
|
||||||
@@ -264,14 +263,14 @@ class UdisksEncryptedTest(udiskstestcase
|
|
||||||
disk.Lock(self.no_options, dbus_interface=self.iface_prefix + '.Encrypted')
|
|
||||||
|
|
||||||
# add new entry to the crypttab
|
|
||||||
- new_crypttab = crypttab + '%s UUID=%s %s\n' % (luks_name, disk_uuid, key_file)
|
|
||||||
+ new_crypttab = crypttab + '%s UUID=%s %s\n' % (self.LUKS_NAME, disk_uuid, key_file)
|
|
||||||
self.write_file('/etc/crypttab', new_crypttab)
|
|
||||||
|
|
||||||
# give udisks time to react to change of the file
|
|
||||||
time.sleep(5)
|
|
||||||
dbus_conf = disk.GetSecretConfiguration(self.no_options, dbus_interface=self.iface_prefix + '.Block')
|
|
||||||
self.assertIsNotNone(dbus_conf)
|
|
||||||
- self.assertEqual(self.ay_to_str(dbus_conf[0][1]['name']), luks_name)
|
|
||||||
+ self.assertEqual(self.ay_to_str(dbus_conf[0][1]['name']), self.LUKS_NAME)
|
|
||||||
self.assertEqual(self.ay_to_str(dbus_conf[0][1]['passphrase-path']), key_file)
|
|
||||||
|
|
||||||
# unlock the device using empty passphrase (should use the key file)
|
|
||||||
@@ -280,7 +279,7 @@ class UdisksEncryptedTest(udiskstestcase
|
|
||||||
self.assertIsNotNone(luks)
|
|
||||||
|
|
||||||
# unlock should use name from crypttab for the /dev/mapper device
|
|
||||||
- dm_path = '/dev/mapper/%s' % luks_name
|
|
||||||
+ dm_path = '/dev/mapper/%s' % self.LUKS_NAME
|
|
||||||
self.assertTrue(os.path.exists(dm_path))
|
|
||||||
|
|
||||||
# preferred 'device' should be /dev/mapper/name too
|
|
||||||
@@ -293,7 +292,7 @@ class UdisksEncryptedTest(udiskstestcase
|
|
||||||
disk_name = os.path.basename(self.vdevs[0])
|
|
||||||
disk = self.get_object('/block_devices/' + disk_name)
|
|
||||||
|
|
||||||
- self._create_luks(disk, 'test')
|
|
||||||
+ self._create_luks(disk, self.PASSPHRASE)
|
|
||||||
self.addCleanup(self._remove_luks, disk)
|
|
||||||
self.udev_settle()
|
|
||||||
|
|
||||||
@@ -320,11 +319,11 @@ class UdisksEncryptedTest(udiskstestcase
|
|
||||||
disk_name = os.path.basename(self.vdevs[0])
|
|
||||||
disk = self.get_object('/block_devices/' + disk_name)
|
|
||||||
|
|
||||||
- self._create_luks(disk, 'test')
|
|
||||||
+ self._create_luks(disk, self.PASSPHRASE)
|
|
||||||
self.addCleanup(self._remove_luks, disk)
|
|
||||||
self.udev_settle()
|
|
||||||
|
|
||||||
- disk.ChangePassphrase('test', 'password', self.no_options,
|
|
||||||
+ disk.ChangePassphrase(self.PASSPHRASE, self.PASSPHRASE + '222', self.no_options,
|
|
||||||
dbus_interface=self.iface_prefix + '.Encrypted')
|
|
||||||
|
|
||||||
disk.Lock(self.no_options, dbus_interface=self.iface_prefix + '.Encrypted')
|
|
||||||
@@ -332,11 +331,11 @@ class UdisksEncryptedTest(udiskstestcase
|
|
||||||
# old password, should fail
|
|
||||||
msg = 'org.freedesktop.UDisks2.Error.Failed: Error unlocking %s *' % self.vdevs[0]
|
|
||||||
with six.assertRaisesRegex(self, dbus.exceptions.DBusException, msg):
|
|
||||||
- disk.Unlock('test', self.no_options,
|
|
||||||
+ disk.Unlock(self.PASSPHRASE, self.no_options,
|
|
||||||
dbus_interface=self.iface_prefix + '.Encrypted')
|
|
||||||
|
|
||||||
# new password
|
|
||||||
- luks = disk.Unlock('password', self.no_options,
|
|
||||||
+ luks = disk.Unlock(self.PASSPHRASE + '222', self.no_options,
|
|
||||||
dbus_interface=self.iface_prefix + '.Encrypted')
|
|
||||||
self.assertIsNotNone(luks)
|
|
||||||
|
|
||||||
@@ -347,7 +346,7 @@ class UdisksEncryptedTest(udiskstestcase
|
|
||||||
|
|
||||||
def test_resize(self):
|
|
||||||
device = self.get_device(self.vdevs[0])
|
|
||||||
- self._create_luks(device, 'test')
|
|
||||||
+ self._create_luks(device, self.PASSPHRASE)
|
|
||||||
self.addCleanup(self._remove_luks, device)
|
|
||||||
self.udev_settle()
|
|
||||||
|
|
||||||
@@ -376,8 +375,6 @@ class UdisksEncryptedTest(udiskstestcase
|
|
||||||
fstab = self.read_file('/etc/fstab')
|
|
||||||
self.addCleanup(self.write_file, '/etc/fstab', fstab)
|
|
||||||
|
|
||||||
- passphrase = 'test'
|
|
||||||
-
|
|
||||||
disk_name = os.path.basename(self.vdevs[0])
|
|
||||||
disk = self.get_object('/block_devices/' + disk_name)
|
|
||||||
|
|
||||||
@@ -388,7 +385,7 @@ class UdisksEncryptedTest(udiskstestcase
|
|
||||||
self.assertIsNotNone(part)
|
|
||||||
|
|
||||||
# create LUKS on the partition and add it to crypttab
|
|
||||||
- self._create_luks(part, passphrase)
|
|
||||||
+ self._create_luks(part, self.PASSPHRASE)
|
|
||||||
self.udev_settle()
|
|
||||||
|
|
||||||
conf = dbus.Dictionary({'name': self.str_to_ay('udisks_luks_test'),
|
|
||||||
@@ -525,10 +522,8 @@ class UdisksEncryptedTestLUKS2(UdisksEnc
|
|
||||||
super(UdisksEncryptedTestLUKS2, self).setUp()
|
|
||||||
|
|
||||||
def test_resize(self):
|
|
||||||
- passwd = 'test'
|
|
||||||
-
|
|
||||||
device = self.get_device(self.vdevs[0])
|
|
||||||
- self._create_luks(device, passwd)
|
|
||||||
+ self._create_luks(device, self.PASSPHRASE)
|
|
||||||
self.addCleanup(self._remove_luks, device)
|
|
||||||
self.udev_settle()
|
|
||||||
|
|
||||||
@@ -554,7 +549,7 @@ class UdisksEncryptedTestLUKS2(UdisksEnc
|
|
||||||
|
|
||||||
# right passphrase
|
|
||||||
d = dbus.Dictionary(signature='sv')
|
|
||||||
- d['passphrase'] = passwd
|
|
||||||
+ d['passphrase'] = self.PASSPHRASE
|
|
||||||
device.Resize(dbus.UInt64(100*1024*1024), d,
|
|
||||||
dbus_interface=self.iface_prefix + '.Encrypted')
|
|
||||||
|
|
||||||
@@ -563,7 +558,7 @@ class UdisksEncryptedTestLUKS2(UdisksEnc
|
|
||||||
|
|
||||||
# resize back to the original size (using binary passphrase)
|
|
||||||
d = dbus.Dictionary(signature='sv')
|
|
||||||
- d['keyfile_contents'] = self.str_to_ay(passwd, False)
|
|
||||||
+ d['keyfile_contents'] = self.str_to_ay(self.PASSPHRASE, False)
|
|
||||||
device.Resize(dbus.UInt64(clear_size), d,
|
|
||||||
dbus_interface=self.iface_prefix + '.Encrypted')
|
|
||||||
|
|
||||||
@@ -581,7 +576,7 @@ class UdisksEncryptedTestLUKS2(UdisksEnc
|
|
||||||
|
|
||||||
# create LUKS without specifying version
|
|
||||||
options = dbus.Dictionary(signature='sv')
|
|
||||||
- options['encrypt.passphrase'] = 'test'
|
|
||||||
+ options['encrypt.passphrase'] = self.PASSPHRASE
|
|
||||||
|
|
||||||
disk.Format('xfs', options,
|
|
||||||
dbus_interface=self.iface_prefix + '.Block')
|
|
||||||
@@ -617,14 +612,12 @@ class UdisksEncryptedTestLUKS2(UdisksEnc
|
|
||||||
|
|
||||||
@udiskstestcase.tag_test(udiskstestcase.TestTags.UNSTABLE)
|
|
||||||
def test_integrity(self):
|
|
||||||
- passwd = 'test'
|
|
||||||
-
|
|
||||||
cryptsetup_version = _get_cryptsetup_version()
|
|
||||||
if cryptsetup_version < LooseVersion('2.2.0'):
|
|
||||||
self.skipTest('Integrity devices are not marked as internal in cryptsetup < 2.2.0')
|
|
||||||
|
|
||||||
device = self.get_device(self.vdevs[0])
|
|
||||||
- self._create_luks_integrity(self.vdevs[0], passwd)
|
|
||||||
+ self._create_luks_integrity(self.vdevs[0], self.PASSPHRASE)
|
|
||||||
|
|
||||||
self.addCleanup(self._remove_luks, device)
|
|
||||||
self.udev_settle()
|
|
||||||
@@ -634,7 +627,7 @@ class UdisksEncryptedTestLUKS2(UdisksEnc
|
|
||||||
# the device is not opened, we need to read the UUID from LUKS metadata
|
|
||||||
luks_uuid = BlockDev.crypto_luks_uuid(self.vdevs[0])
|
|
||||||
|
|
||||||
- luks_path = device.Unlock('test', self.no_options,
|
|
||||||
+ luks_path = device.Unlock(self.PASSPHRASE, self.no_options,
|
|
||||||
dbus_interface=self.iface_prefix + '.Encrypted')
|
|
||||||
self.assertIsNotNone(luks_path)
|
|
||||||
self.assertTrue(os.path.exists('/dev/disk/by-uuid/%s' % luks_uuid))
|
|
||||||
diff -up udisks-2.9.0/src/tests/integration-test.bak udisks-2.9.0/src/tests/integration-test
|
|
||||||
--- udisks-2.9.0/src/tests/integration-test.bak 2020-05-26 14:59:20.000000000 +0200
|
|
||||||
+++ udisks-2.9.0/src/tests/integration-test 2023-06-02 16:59:52.841963720 +0200
|
|
||||||
@@ -1321,7 +1321,7 @@ class Luks(UDisksTestCase):
|
|
||||||
|
|
||||||
def setup_crypto_device(self):
|
|
||||||
self.fs_create(None, 'ext4', GLib.Variant('a{sv}', {
|
|
||||||
- 'encrypt.passphrase': GLib.Variant('s', 's3kr1t'),
|
|
||||||
+ 'encrypt.passphrase': GLib.Variant('s', 's3kr1ts3kr1t'),
|
|
||||||
'label': GLib.Variant('s', 'treasure')}))
|
|
||||||
self.client.settle()
|
|
||||||
crypt_obj = self.client.get_object(self.udisks_block().get_object_path())
|
|
||||||
@@ -1332,7 +1332,7 @@ class Luks(UDisksTestCase):
|
|
||||||
@staticmethod
|
|
||||||
def unlock_crypto_device(encrypted):
|
|
||||||
return encrypted.call_unlock_sync(
|
|
||||||
- 's3kr1t', no_options, None)
|
|
||||||
+ 's3kr1ts3kr1t', no_options, None)
|
|
||||||
|
|
||||||
def tearDown(self):
|
|
||||||
"""clean up behind failed test cases"""
|
|
||||||
@@ -1400,7 +1400,7 @@ class Luks(UDisksTestCase):
|
|
||||||
udev_dump = subprocess.Popen(['udevadm', 'info', '--export-db'],
|
|
||||||
stdout=subprocess.PIPE)
|
|
||||||
out = udev_dump.communicate()[0]
|
|
||||||
- self.assertFalse(b's3kr1t' in out, 'password in udev properties')
|
|
||||||
+ self.assertFalse(b's3kr1ts3kr1t' in out, 'password in udev properties')
|
|
||||||
self.assertFalse(b'essiv:sha' in out, 'key information in udev properties')
|
|
||||||
|
|
||||||
finally:
|
|
||||||
@@ -1510,18 +1510,18 @@ class Luks(UDisksTestCase):
|
|
||||||
encrypted = self.setup_crypto_device()
|
|
||||||
# wrong password, has bytes after a trailing '\0'
|
|
||||||
self.assertRaises(GLib.GError, encrypted.call_unlock_sync,
|
|
||||||
- '', Luks.keyfile_options(b's3kr1t\0X'), None)
|
|
||||||
+ '', Luks.keyfile_options(b's3kr1ts3kr1t\0X'), None)
|
|
||||||
self.assertRaises(GLib.GError, encrypted.call_unlock_sync,
|
|
||||||
- '', Luks.keyfile_options(b's3kr1t\n'), None)
|
|
||||||
+ '', Luks.keyfile_options(b's3kr1ts3kr1t\n'), None)
|
|
||||||
# correct password, specified as keyfile
|
|
||||||
- encrypted.call_unlock_sync('', Luks.keyfile_options(b's3kr1t'), None)
|
|
||||||
+ encrypted.call_unlock_sync('', Luks.keyfile_options(b's3kr1ts3kr1t'), None)
|
|
||||||
encrypted.call_lock_sync(no_options, None)
|
|
||||||
|
|
||||||
def test_plaintext_keyfile(self):
|
|
||||||
"""Setup a device using a plaintext keyfile."""
|
|
||||||
# Using a plaintext keyfile should be equivalent to passphrase
|
|
||||||
self.fs_create(None, 'ext4', GLib.Variant('a{sv}', {
|
|
||||||
- 'encrypt.passphrase': GLib.Variant('ay', _bytes_to_ay(b's3kr1t')),
|
|
||||||
+ 'encrypt.passphrase': GLib.Variant('ay', _bytes_to_ay(b's3kr1ts3kr1t')),
|
|
||||||
'label': GLib.Variant('s', 'treasure')}))
|
|
||||||
|
|
||||||
crypt_obj = self.client.get_object(self.udisks_block().get_object_path())
|
|
||||||
@@ -1532,16 +1532,16 @@ class Luks(UDisksTestCase):
|
|
||||||
self.assertRaises(GLib.GError, encrypted.call_unlock_sync,
|
|
||||||
'h4ckpassword', no_options, None)
|
|
||||||
self.assertRaises(GLib.GError, encrypted.call_unlock_sync,
|
|
||||||
- '', Luks.keyfile_options(b's3kr1t\0X'), None)
|
|
||||||
+ '', Luks.keyfile_options(b's3kr1ts3kr1t\0X'), None)
|
|
||||||
self.assertRaises(GLib.GError, encrypted.call_unlock_sync,
|
|
||||||
- '', Luks.keyfile_options(b's3kr1t\n'), None)
|
|
||||||
+ '', Luks.keyfile_options(b's3kr1ts3kr1t\n'), None)
|
|
||||||
|
|
||||||
# correct password
|
|
||||||
- encrypted.call_unlock_sync('', Luks.keyfile_options(b's3kr1t'), None)
|
|
||||||
+ encrypted.call_unlock_sync('', Luks.keyfile_options(b's3kr1ts3kr1t'), None)
|
|
||||||
encrypted.call_lock_sync(no_options, None)
|
|
||||||
|
|
||||||
# correct password, specified as passphrase
|
|
||||||
- encrypted.call_unlock_sync('s3kr1t', no_options, None)
|
|
||||||
+ encrypted.call_unlock_sync('s3kr1ts3kr1t', no_options, None)
|
|
||||||
encrypted.call_lock_sync(no_options, None)
|
|
||||||
|
|
||||||
def test_binary_keyfile(self):
|
|
||||||
@@ -1607,11 +1607,11 @@ class Luks(UDisksTestCase):
|
|
||||||
encrypted = self.setup_crypto_device()
|
|
||||||
|
|
||||||
# change: passphrase -> passphrase
|
|
||||||
- encrypted.call_change_passphrase_sync('s3kr1t', 'passphrase', no_options, None)
|
|
||||||
+ encrypted.call_change_passphrase_sync('s3kr1ts3kr1t', 'passphrase', no_options, None)
|
|
||||||
|
|
||||||
# verify new password:
|
|
||||||
self.assertRaises(GLib.GError, encrypted.call_unlock_sync,
|
|
||||||
- 's3kr1t', no_options, None)
|
|
||||||
+ 's3kr1ts3kr1t', no_options, None)
|
|
||||||
encrypted.call_unlock_sync('passphrase', no_options, None)
|
|
||||||
encrypted.call_lock_sync(no_options, None)
|
|
||||||
|
|
||||||
@@ -1644,7 +1644,7 @@ class Luks(UDisksTestCase):
|
|
||||||
|
|
||||||
# change: keyfile -> passphrase
|
|
||||||
encrypted.call_change_passphrase_sync(
|
|
||||||
- '', 's3kr1t', GLib.Variant('a{sv}', {
|
|
||||||
+ '', 's3kr1ts3kr1t', GLib.Variant('a{sv}', {
|
|
||||||
'old_keyfile_contents': GLib.Variant('ay', _bytes_to_ay(key_file_1)),
|
|
||||||
}),
|
|
||||||
None)
|
|
||||||
@@ -1652,7 +1652,7 @@ class Luks(UDisksTestCase):
|
|
||||||
# verify new password:
|
|
||||||
self.assertRaises(GLib.GError, encrypted.call_unlock_sync,
|
|
||||||
'', Luks.keyfile_options(key_file_1), None)
|
|
||||||
- encrypted.call_unlock_sync('s3kr1t', no_options, None)
|
|
||||||
+ encrypted.call_unlock_sync('s3kr1ts3kr1t', no_options, None)
|
|
||||||
encrypted.call_lock_sync(no_options, None)
|
|
||||||
|
|
||||||
|
|
@ -1,54 +0,0 @@
|
|||||||
From 2d5d2b7570b0f44c14b34b5dc831f174205c10f2 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Tomas Bzatek <tbzatek@redhat.com>
|
|
||||||
Date: Wed, 15 Sep 2021 14:34:49 +0200
|
|
||||||
Subject: [PATCH] mount options: Always use errors=remount-ro for ext
|
|
||||||
filesystems
|
|
||||||
|
|
||||||
Default mount options are focused primarily on data safety, mounting
|
|
||||||
damaged ext2/3/4 filesystem as readonly would indicate something's wrong.
|
|
||||||
---
|
|
||||||
data/builtin_mount_options.conf | 9 +++++++++
|
|
||||||
src/tests/dbus-tests/test_80_filesystem.py | 6 ++++++
|
|
||||||
2 files changed, 15 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/data/builtin_mount_options.conf b/data/builtin_mount_options.conf
|
|
||||||
index 37715cfa4..e0bd0ee1f 100644
|
|
||||||
--- a/data/builtin_mount_options.conf
|
|
||||||
+++ b/data/builtin_mount_options.conf
|
|
||||||
@@ -27,3 +27,12 @@ f2fs_allow=discard,nodiscard,compress_algorithm,compress_log_size,compress_exten
|
|
||||||
btrfs_allow=compress,compress-force,datacow,nodatacow,datasum,nodatasum,degraded,device,discard,nodiscard,subvol,subvolid,space_cache
|
|
||||||
|
|
||||||
f2fs_allow=discard,nodiscard,compress_algorithm,compress_log_size,compress_extension,alloc_mode
|
|
||||||
+
|
|
||||||
+ext2_defaults=errors=remount-ro
|
|
||||||
+ext2_allow=errors=remount-ro
|
|
||||||
+
|
|
||||||
+ext3_defaults=errors=remount-ro
|
|
||||||
+ext3_allow=errors=remount-ro
|
|
||||||
+
|
|
||||||
+ext4_defaults=errors=remount-ro
|
|
||||||
+ext4_allow=errors=remount-ro
|
|
||||||
diff --git a/src/tests/dbus-tests/test_80_filesystem.py b/src/tests/dbus-tests/test_80_filesystem.py
|
|
||||||
index 019880f57..2d1933240 100644
|
|
||||||
--- a/src/tests/dbus-tests/test_80_filesystem.py
|
|
||||||
+++ b/src/tests/dbus-tests/test_80_filesystem.py
|
|
||||||
@@ -321,6 +321,8 @@ def test_mount_auto(self):
|
|
||||||
_ret, out = self.run_command('mount | grep %s' % block_fs_dev)
|
|
||||||
self.assertIn(mnt_path, out)
|
|
||||||
self.assertIn('ro', out)
|
|
||||||
+ if self._fs_name.startswith('ext'):
|
|
||||||
+ self.assertIn('errors=remount-ro', out)
|
|
||||||
|
|
||||||
# dbus mountpoint
|
|
||||||
dbus_mounts = self.get_property(block_fs, '.Filesystem', 'MountPoints')
|
|
||||||
@@ -478,6 +480,10 @@ def test_custom_option(self, should_fail, dbus_option, should_be_present, config
|
|
||||||
if self._fs_name == "udf":
|
|
||||||
test_custom_option(self, False, None, False, "[defaults]\ndefaults=\nallow=exec,noexec,nodev,nosuid,atime,noatime,nodiratime,ro,rw,sync,dirsync,noload,uid=ignore,uid=forget\n")
|
|
||||||
test_custom_option(self, True, "uid=notallowed", True, "[defaults]\nallow=exec,noexec,nodev,nosuid,atime,noatime,nodiratime,ro,rw,sync,dirsync,noload,uid=ignore\n")
|
|
||||||
+ if self._fs_name.startswith("ext"):
|
|
||||||
+ test_custom_option(self, False, "errors=remount-ro", True, "", match_mount_option="errors=remount-ro")
|
|
||||||
+ test_custom_option(self, True, "errors=panic", False, "")
|
|
||||||
+ test_custom_option(self, True, "errors=continue", False, "")
|
|
||||||
|
|
||||||
# udev rules overrides
|
|
||||||
test_readonly(self, False, "", udev_rules_content = { "UDISKS_MOUNT_OPTIONS_DEFAULTS": "rw" })
|
|
@ -1,15 +1,14 @@
|
|||||||
%global glib2_version 2.36
|
%global glib2_version 2.50
|
||||||
%global gobject_introspection_version 1.30.0
|
%global gobject_introspection_version 1.30.0
|
||||||
%global polkit_version 0.102
|
%global polkit_version 0.102
|
||||||
%global systemd_version 208
|
%global systemd_version 208
|
||||||
%global libatasmart_version 0.17
|
%global libatasmart_version 0.17
|
||||||
%global dbus_version 1.4.0
|
%global dbus_version 1.4.0
|
||||||
%global with_gtk_doc 1
|
%global with_gtk_doc 1
|
||||||
%global libblockdev_version 2.24
|
%global libblockdev_version 2.25
|
||||||
|
|
||||||
%define with_bcache 1
|
%define with_bcache 1
|
||||||
%define with_btrfs 1
|
%define with_btrfs 1
|
||||||
%define with_vdo 0
|
|
||||||
%define with_lsm 1
|
%define with_lsm 1
|
||||||
%define with_zram 1
|
%define with_zram 1
|
||||||
%define with_lvmcache 1
|
%define with_lvmcache 1
|
||||||
@ -18,6 +17,9 @@
|
|||||||
%define default_luks_encryption luks1
|
%define default_luks_encryption luks1
|
||||||
|
|
||||||
%define is_fedora 0%{?rhel} == 0
|
%define is_fedora 0%{?rhel} == 0
|
||||||
|
%define is_git %(git show > /dev/null 2>&1 && echo 1 || echo 0)
|
||||||
|
%define git_hash %(git log -1 --pretty=format:"%h" || true)
|
||||||
|
%define build_date %(date '+%Y%m%d')
|
||||||
|
|
||||||
|
|
||||||
# bcache and zram are not available on RHEL
|
# bcache and zram are not available on RHEL
|
||||||
@ -27,20 +29,10 @@
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
# btrfs is not available on RHEL > 7
|
# btrfs is not available on RHEL > 7
|
||||||
%if 0%{?rhel} > 7 || %{with_btrfs} == 0
|
%if 0%{?rhel} > 7
|
||||||
%define with_btrfs 0
|
%define with_btrfs 0
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
# vdo is not available on Fedora
|
|
||||||
%if (0%{?fedora}) || %{with_vdo} == 0
|
|
||||||
%define with_vdo 0
|
|
||||||
%endif
|
|
||||||
|
|
||||||
# vdo is not available on i686
|
|
||||||
%ifnarch x86_64 aarch64 ppc64le s390x
|
|
||||||
%define with_vdo 0
|
|
||||||
%endif
|
|
||||||
|
|
||||||
# feature parity with existing RHEL 7 packages
|
# feature parity with existing RHEL 7 packages
|
||||||
%if (0%{?rhel}) && (0%{?rhel} <= 7)
|
%if (0%{?rhel}) && (0%{?rhel} <= 7)
|
||||||
%define with_lsm 0
|
%define with_lsm 0
|
||||||
@ -55,57 +47,25 @@
|
|||||||
|
|
||||||
Name: udisks2
|
Name: udisks2
|
||||||
Summary: Disk Manager
|
Summary: Disk Manager
|
||||||
Version: 2.9.0
|
Version: 2.9.2
|
||||||
Release: 16%{?dist}
|
Release: 6%{?dist}
|
||||||
License: GPLv2+
|
License: GPLv2+
|
||||||
Group: System Environment/Libraries
|
|
||||||
URL: https://github.com/storaged-project/udisks
|
URL: https://github.com/storaged-project/udisks
|
||||||
Source0: https://github.com/storaged-project/udisks/releases/download/udisks-%{version}/udisks-%{version}.tar.bz2
|
Source0: https://github.com/storaged-project/udisks/releases/download/udisks-%{version}/udisks-%{version}.tar.bz2
|
||||||
Patch0: udisks-2.9.1-teardown-needle-match.patch
|
Patch0: udisks-2.10.0-dosfstools_4.2.patch
|
||||||
Patch1: udisks-2.9.1-lvm_vdo-test_resize_physical-size.patch
|
Patch1: udisks-2.10.0-dosfstools_4.2-reread_part.patch
|
||||||
# https://bugzilla.redhat.com/show_bug.cgi?id=1855785
|
Patch2: udisks-2.10.0-module-names.patch
|
||||||
Patch2: udisks-2.9.1-drive_ata_tests.patch
|
Patch3: udisks-2.10.0-ata_conf_apply_GTask.patch
|
||||||
# https://bugzilla.redhat.com/show_bug.cgi?id=2120697
|
# https://github.com/storaged-project/udisks/pull/847
|
||||||
Patch3: udisks-2.10.0-block_format_ata_secure_erase.patch
|
Patch4: ignore-apple-boot-part.patch
|
||||||
# https://bugzilla.redhat.com/show_bug.cgi?id=2135773
|
Patch5: udisks-2.10.0-g_mkdtemp-leak.patch
|
||||||
Patch4: udisks-2.10.0-iscsi-auth-info.patch
|
Patch6: udisks-2.10.0-mdraid-iochannel-data.patch
|
||||||
# https://bugzilla.redhat.com/show_bug.cgi?id=1845973
|
Patch7: udisks-2.10.0-mdraid-g_source_attach.patch
|
||||||
Patch10: udisks-2.9.1-daemon-Always-flush-interface-property-changes.patch
|
Patch8: udisks-2.10.0-Ignore-Extended-Boot-Loader-GPT-partition.patch
|
||||||
Patch11: udisks-2.9.1-lvm2-Always-flush-interface-property-changes.patch
|
Patch9: udisks-2.10.0-tests-drive_ata-apm.patch
|
||||||
Patch12: udisks-2.9.1-lsm-Always-flush-interface-property-changes.patch
|
Patch10: udisks-2.10.0-tests-no-dev_disk-by-path.patch
|
||||||
Patch13: udisks-2.9.1-iscsi-Always-flush-interface-property-changes.patch
|
|
||||||
Patch14: udisks-2.9.1-zram-Always-flush-interface-property-changes.patch
|
|
||||||
Patch15: udisks-2.9.2-udisksdaemonutil-Refactor-udisks_daemon_util_trigger.patch
|
|
||||||
Patch16: udisks-2.9.2-udiskslinuxmanager-Trigger-uevent-after-loop-device-setup.patch
|
|
||||||
# https://bugzilla.redhat.com/show_bug.cgi?id=2004422
|
|
||||||
Patch17: udisks-2.9.4-ext-mount-options.patch
|
|
||||||
# https://bugzilla.redhat.com/show_bug.cgi?id=2213715
|
|
||||||
Patch18: udisks-2.10.0-iscsi_timeout.patch
|
|
||||||
Patch20: udisks-2.10.0-tests-drive_ata-apm.patch
|
|
||||||
Patch21: udisks-2.10.0-tests-no-dev_disk-by-path.patch
|
|
||||||
Patch22: tests-disable-zram.patch
|
|
||||||
# https://bugzilla.redhat.com/show_bug.cgi?id=2023880
|
|
||||||
# https://bugzilla.redhat.com/show_bug.cgi?id=2025483
|
|
||||||
Patch23: udisks-2.10.0-vdo_test_writeAmplificationRatio.patch
|
|
||||||
# https://bugzilla.redhat.com/show_bug.cgi?id=1999149
|
|
||||||
Patch24: udisks-2.10.0-udiskslinuxencrypted_GError.patch
|
|
||||||
Patch25: udisks-2.10.0-udiskslinuxpartition_GError.patch
|
|
||||||
Patch26: udisks-2.10.0-udiskslinuxpartitiontable_GError.patch
|
|
||||||
Patch27: udisks-2.10.0-udiskslinuxfilesystem_GError.patch
|
|
||||||
# https://bugzilla.redhat.com/show_bug.cgi?id=1966460
|
|
||||||
Patch28: udisks-2.10.0-iscsi_test_01_badauth.patch
|
|
||||||
Patch29: udisks-2.10.0-iscsi_test_02_lio_target_conf.patch
|
|
||||||
Patch31: udisks-2.10.0-iscsi_test_04_fix_test_login_chap_auth.patch
|
|
||||||
Patch32: udisks-2.10.0-iscsi_test_05_restart_iscsid.patch
|
|
||||||
# https://bugzilla.redhat.com/show_bug.cgi?id=2188991
|
|
||||||
Patch33: udisks-2.10.0-iscsi-CHAP-auth-algs.patch
|
|
||||||
Patch34: udisks-2.9.4-FIPS_LUKS_fixes-2.patch
|
|
||||||
# https://bugzilla.redhat.com/show_bug.cgi?id=2039772
|
|
||||||
Patch35: udisks-2.10.0-lvm2_update_epoch.patch
|
|
||||||
Patch36: udisks-2.10.0-lvm2_vgcreate_uevent_sync.patch
|
|
||||||
# https://bugzilla.redhat.com/show_bug.cgi?id=2213193
|
|
||||||
Patch37: udisks-2.10.0-iscsi-ibft-chap-auth.patch
|
|
||||||
|
|
||||||
|
BuildRequires: make
|
||||||
BuildRequires: glib2-devel >= %{glib2_version}
|
BuildRequires: glib2-devel >= %{glib2_version}
|
||||||
BuildRequires: gobject-introspection-devel >= %{gobject_introspection_version}
|
BuildRequires: gobject-introspection-devel >= %{gobject_introspection_version}
|
||||||
BuildRequires: libgudev1-devel >= %{systemd_version}
|
BuildRequires: libgudev1-devel >= %{systemd_version}
|
||||||
@ -160,6 +120,12 @@ Requires: eject
|
|||||||
# For utab monitor
|
# For utab monitor
|
||||||
Requires: libmount
|
Requires: libmount
|
||||||
|
|
||||||
|
%if ! (0%{?rhel} && 0%{?rhel} < 8)
|
||||||
|
# Not really needed but doesn't make much sense to use UDisks without polkit
|
||||||
|
# (weak deps don't work on older versions of RHEL)
|
||||||
|
Recommends: polkit
|
||||||
|
%endif
|
||||||
|
|
||||||
Requires: lib%{name}%{?_isa} = %{version}-%{release}
|
Requires: lib%{name}%{?_isa} = %{version}-%{release}
|
||||||
|
|
||||||
# For mkntfs (not available on rhel or on ppc/ppc64)
|
# For mkntfs (not available on rhel or on ppc/ppc64)
|
||||||
@ -181,7 +147,6 @@ manipulate disks, storage devices and technologies.
|
|||||||
|
|
||||||
%package -n lib%{name}
|
%package -n lib%{name}
|
||||||
Summary: Dynamic library to access the udisksd daemon
|
Summary: Dynamic library to access the udisksd daemon
|
||||||
Group: System Environment/Libraries
|
|
||||||
License: LGPLv2+
|
License: LGPLv2+
|
||||||
Provides: libstoraged = %{version}-%{release}
|
Provides: libstoraged = %{version}-%{release}
|
||||||
Obsoletes: libstoraged
|
Obsoletes: libstoraged
|
||||||
@ -192,7 +157,6 @@ access to the udisksd daemon.
|
|||||||
|
|
||||||
%package -n %{name}-iscsi
|
%package -n %{name}-iscsi
|
||||||
Summary: Module for iSCSI
|
Summary: Module for iSCSI
|
||||||
Group: System Environment/Libraries
|
|
||||||
Requires: %{name}%{?_isa} = %{version}-%{release}
|
Requires: %{name}%{?_isa} = %{version}-%{release}
|
||||||
License: LGPLv2+
|
License: LGPLv2+
|
||||||
Requires: iscsi-initiator-utils
|
Requires: iscsi-initiator-utils
|
||||||
@ -205,7 +169,6 @@ This package contains module for iSCSI configuration.
|
|||||||
|
|
||||||
%package -n %{name}-lvm2
|
%package -n %{name}-lvm2
|
||||||
Summary: Module for LVM2
|
Summary: Module for LVM2
|
||||||
Group: System Environment/Libraries
|
|
||||||
Requires: %{name}%{?_isa} = %{version}-%{release}
|
Requires: %{name}%{?_isa} = %{version}-%{release}
|
||||||
License: LGPLv2+
|
License: LGPLv2+
|
||||||
Requires: lvm2
|
Requires: lvm2
|
||||||
@ -220,7 +183,6 @@ This package contains module for LVM2 configuration.
|
|||||||
|
|
||||||
%package -n lib%{name}-devel
|
%package -n lib%{name}-devel
|
||||||
Summary: Development files for lib%{name}
|
Summary: Development files for lib%{name}
|
||||||
Group: Development/Libraries
|
|
||||||
Requires: lib%{name}%{?_isa} = %{version}-%{release}
|
Requires: lib%{name}%{?_isa} = %{version}-%{release}
|
||||||
License: LGPLv2+
|
License: LGPLv2+
|
||||||
Provides: libstoraged-devel = %{version}-%{release}
|
Provides: libstoraged-devel = %{version}-%{release}
|
||||||
@ -233,7 +195,6 @@ dynamic library, which provides access to the udisksd daemon.
|
|||||||
%if 0%{?with_bcache}
|
%if 0%{?with_bcache}
|
||||||
%package -n %{name}-bcache
|
%package -n %{name}-bcache
|
||||||
Summary: Module for Bcache
|
Summary: Module for Bcache
|
||||||
Group: System Environment/Libraries
|
|
||||||
Requires: %{name}%{?_isa} = %{version}-%{release}
|
Requires: %{name}%{?_isa} = %{version}-%{release}
|
||||||
License: LGPLv2+
|
License: LGPLv2+
|
||||||
Requires: libblockdev-kbd >= %{libblockdev_version}
|
Requires: libblockdev-kbd >= %{libblockdev_version}
|
||||||
@ -248,7 +209,6 @@ This package contains module for Bcache configuration.
|
|||||||
%if 0%{?with_btrfs}
|
%if 0%{?with_btrfs}
|
||||||
%package -n %{name}-btrfs
|
%package -n %{name}-btrfs
|
||||||
Summary: Module for BTRFS
|
Summary: Module for BTRFS
|
||||||
Group: System Environment/Libraries
|
|
||||||
Requires: %{name}%{?_isa} = %{version}-%{release}
|
Requires: %{name}%{?_isa} = %{version}-%{release}
|
||||||
License: LGPLv2+
|
License: LGPLv2+
|
||||||
Requires: libblockdev-btrfs >= %{libblockdev_version}
|
Requires: libblockdev-btrfs >= %{libblockdev_version}
|
||||||
@ -263,7 +223,6 @@ This package contains module for BTRFS configuration.
|
|||||||
%if 0%{?with_lsm}
|
%if 0%{?with_lsm}
|
||||||
%package -n %{name}-lsm
|
%package -n %{name}-lsm
|
||||||
Summary: Module for LSM
|
Summary: Module for LSM
|
||||||
Group: System Environment/Libraries
|
|
||||||
Requires: %{name}%{?_isa} = %{version}-%{release}
|
Requires: %{name}%{?_isa} = %{version}-%{release}
|
||||||
License: LGPLv2+
|
License: LGPLv2+
|
||||||
Requires: libstoragemgmt
|
Requires: libstoragemgmt
|
||||||
@ -279,7 +238,6 @@ This package contains module for LSM configuration.
|
|||||||
%if 0%{?with_zram}
|
%if 0%{?with_zram}
|
||||||
%package -n %{name}-zram
|
%package -n %{name}-zram
|
||||||
Summary: Module for ZRAM
|
Summary: Module for ZRAM
|
||||||
Group: System Environment/Libraries
|
|
||||||
Requires: %{name}%{?_isa} = %{version}-%{release}
|
Requires: %{name}%{?_isa} = %{version}-%{release}
|
||||||
License: LGPLv2+
|
License: LGPLv2+
|
||||||
Requires: libblockdev-kbd >= %{libblockdev_version}
|
Requires: libblockdev-kbd >= %{libblockdev_version}
|
||||||
@ -293,60 +251,15 @@ Obsoletes: storaged-zram
|
|||||||
This package contains module for ZRAM configuration.
|
This package contains module for ZRAM configuration.
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
%if 0%{?with_vdo}
|
|
||||||
%package -n %{name}-vdo
|
|
||||||
Summary: Module for VDO
|
|
||||||
Group: System Environment/Libraries
|
|
||||||
Requires: %{name}%{?_isa} = %{version}-%{release}
|
|
||||||
License: LGPLv2+
|
|
||||||
Requires: vdo
|
|
||||||
Requires: libblockdev-vdo >= %{libblockdev_version}
|
|
||||||
BuildRequires: libblockdev-vdo-devel >= %{libblockdev_version}
|
|
||||||
|
|
||||||
%description -n %{name}-vdo
|
|
||||||
This package contains module for VDO management.
|
|
||||||
%endif
|
|
||||||
|
|
||||||
%prep
|
%prep
|
||||||
%setup -q -n udisks-%{version}
|
%autosetup -p1 -n udisks-%{version}
|
||||||
%patch0 -p1
|
|
||||||
%patch1 -p1
|
|
||||||
%patch2 -p1
|
|
||||||
%patch3 -p1
|
|
||||||
%patch4 -p1
|
|
||||||
%patch10 -p1
|
|
||||||
%patch11 -p1
|
|
||||||
%patch12 -p1
|
|
||||||
%patch13 -p1
|
|
||||||
%patch14 -p1
|
|
||||||
%patch15 -p1
|
|
||||||
%patch16 -p1
|
|
||||||
%patch17 -p1
|
|
||||||
%patch18 -p1
|
|
||||||
%patch20 -p1
|
|
||||||
%patch21 -p1
|
|
||||||
%patch22 -p1
|
|
||||||
%patch23 -p1
|
|
||||||
%patch24 -p1
|
|
||||||
%patch25 -p1
|
|
||||||
%patch26 -p1
|
|
||||||
%patch27 -p1
|
|
||||||
%patch28 -p1
|
|
||||||
%patch29 -p1
|
|
||||||
%patch31 -p1
|
|
||||||
%patch32 -p1
|
|
||||||
%patch33 -p1
|
|
||||||
%patch34 -p1
|
|
||||||
%patch35 -p1
|
|
||||||
%patch36 -p1
|
|
||||||
%patch37 -p1
|
|
||||||
sed -i udisks/udisks2.conf.in -e "s/encryption=luks1/encryption=%{default_luks_encryption}/"
|
sed -i udisks/udisks2.conf.in -e "s/encryption=luks1/encryption=%{default_luks_encryption}/"
|
||||||
|
rm -f src/tests/dbus-tests/config_h.py
|
||||||
|
|
||||||
%build
|
%build
|
||||||
autoreconf -ivf
|
autoreconf -ivf
|
||||||
# modules need to be explicitly enabled
|
# modules need to be explicitly enabled
|
||||||
%configure \
|
%configure \
|
||||||
--sysconfdir=/etc \
|
|
||||||
%if %{with_gtk_doc}
|
%if %{with_gtk_doc}
|
||||||
--enable-gtk-doc \
|
--enable-gtk-doc \
|
||||||
%else
|
%else
|
||||||
@ -358,9 +271,7 @@ autoreconf -ivf
|
|||||||
%if 0%{?with_btrfs}
|
%if 0%{?with_btrfs}
|
||||||
--enable-btrfs \
|
--enable-btrfs \
|
||||||
%endif
|
%endif
|
||||||
%if 0%{?with_vdo}
|
--disable-vdo \
|
||||||
--enable-vdo \
|
|
||||||
%endif
|
|
||||||
%if 0%{?with_zram}
|
%if 0%{?with_zram}
|
||||||
--enable-zram \
|
--enable-zram \
|
||||||
%endif
|
%endif
|
||||||
@ -407,13 +318,17 @@ fi
|
|||||||
|
|
||||||
%if 0%{?with_zram}
|
%if 0%{?with_zram}
|
||||||
%post -n %{name}-zram
|
%post -n %{name}-zram
|
||||||
%systemd_post zram-setup@.service
|
%systemd_post udisks2-zram-setup@.service
|
||||||
|
if [ -S /run/udev/control ]; then
|
||||||
|
udevadm control --reload
|
||||||
|
udevadm trigger
|
||||||
|
fi
|
||||||
|
|
||||||
%preun -n %{name}-zram
|
%preun -n %{name}-zram
|
||||||
%systemd_preun zram-setup@.service
|
%systemd_preun udisks2-zram-setup@.service
|
||||||
|
|
||||||
%postun -n %{name}-zram
|
%postun -n %{name}-zram
|
||||||
%systemd_postun zram-setup@.service
|
%systemd_postun udisks2-zram-setup@.service
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
%files -f udisks2.lang
|
%files -f udisks2.lang
|
||||||
@ -492,9 +407,6 @@ fi
|
|||||||
%if 0%{?with_zram}
|
%if 0%{?with_zram}
|
||||||
%{_libdir}/pkgconfig/udisks2-zram.pc
|
%{_libdir}/pkgconfig/udisks2-zram.pc
|
||||||
%endif
|
%endif
|
||||||
%if 0%{?with_vdo}
|
|
||||||
%{_libdir}/pkgconfig/udisks2-vdo.pc
|
|
||||||
%endif
|
|
||||||
|
|
||||||
%if 0%{?with_bcache}
|
%if 0%{?with_bcache}
|
||||||
%files -n %{name}-bcache
|
%files -n %{name}-bcache
|
||||||
@ -522,85 +434,79 @@ fi
|
|||||||
%dir %{_sysconfdir}/udisks2/modules.conf.d
|
%dir %{_sysconfdir}/udisks2/modules.conf.d
|
||||||
%{_libdir}/udisks2/modules/libudisks2_zram.so
|
%{_libdir}/udisks2/modules/libudisks2_zram.so
|
||||||
%{_datadir}/polkit-1/actions/org.freedesktop.UDisks2.zram.policy
|
%{_datadir}/polkit-1/actions/org.freedesktop.UDisks2.zram.policy
|
||||||
%{_unitdir}/zram-setup@.service
|
%{_unitdir}/udisks2-zram-setup@.service
|
||||||
%endif
|
%{_udevrulesdir}/90-udisks2-zram.rules
|
||||||
|
|
||||||
%if 0%{?with_vdo}
|
|
||||||
%files -n %{name}-vdo
|
|
||||||
%{_libdir}/udisks2/modules/libudisks2_vdo.so
|
|
||||||
%{_datadir}/polkit-1/actions/org.freedesktop.UDisks2.vdo.policy
|
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
* Thu Aug 03 2023 Tomas Bzatek <tbzatek@redhat.com> - 2.9.0-16
|
* Tue Aug 10 2021 Mohan Boddu <mboddu@redhat.com> - 2.9.2-6
|
||||||
- iscsi: Fix login on firmware-discovered nodes (#2213193)
|
- Rebuilt for IMA sigs, glibc 2.34, aarch64 flags
|
||||||
- tests: Extend iscsi method call timeouts (#2213715)
|
Related: rhbz#1991688
|
||||||
|
|
||||||
* Tue Jun 06 2023 Tomas Bzatek <tbzatek@redhat.com> - 2.9.0-15
|
* Thu Apr 22 2021 Tomas Bzatek <tbzatek@redhat.com> - 2.9.2-5
|
||||||
- Reimport gating tests
|
- Fix Drive.ATA test failures
|
||||||
|
|
||||||
* Fri Jun 02 2023 Tomas Bzatek <tbzatek@redhat.com> - 2.9.0-14
|
* Tue Apr 20 2021 Tomas Bzatek <tbzatek@redhat.com> - 2.9.2-4
|
||||||
- iscsi: CHAP auth algorithm selection fixes (#2188991)
|
- Fix a couple of issues found by Coverity (#1938890)
|
||||||
- tests: Use stronger passphrases for LUKS tests
|
- Ignore systemd "Extended Boot Loader" GPT partition
|
||||||
- lvm2: Improve uevent processing (#2039772)
|
|
||||||
|
|
||||||
* Tue Nov 01 2022 Tomas Bzatek <tbzatek@redhat.com> - 2.9.0-13
|
* Fri Apr 16 2021 Mohan Boddu <mboddu@redhat.com> - 2.9.2-3
|
||||||
- Fix iscsi test auth failures (#1966460)
|
- Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937
|
||||||
|
|
||||||
* Wed Oct 19 2022 Tomas Bzatek <tbzatek@redhat.com> - 2.9.0-12
|
* Fri Mar 26 2021 Tomas Bzatek <tbzatek@redhat.com> - 2.9.2-2
|
||||||
- Fix iscsi authentication info override (#2135773)
|
- Fix FAT mkfs with dosfstools >= 4.2
|
||||||
|
- udiskslinuxdriveata: Use GTask to apply configuration in a thread
|
||||||
|
- Limit allowed module names
|
||||||
|
- 80-udisks2.rules: Ignore Apple boot partition from livecd-tools
|
||||||
|
|
||||||
* Fri Sep 16 2022 Tomas Bzatek <tbzatek@redhat.com> - 2.9.0-11
|
* Thu Feb 04 2021 Tomas Bzatek <tbzatek@redhat.com> - 2.9.2-1
|
||||||
- Fix the patch list
|
- Version 2.9.2
|
||||||
|
|
||||||
* Fri Sep 16 2022 Tomas Bzatek <tbzatek@redhat.com> - 2.9.0-10
|
* Wed Jan 27 2021 Fedora Release Engineering <releng@fedoraproject.org> - 2.9.1-3
|
||||||
- Restrict ATA Secure Erase Format() options (#2120697)
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
|
||||||
|
|
||||||
* Tue Feb 01 2022 Tomas Bzatek <tbzatek@redhat.com> - 2.9.0-9
|
* Mon Sep 07 2020 Neal Gompa <ngompa13@gmail.com> - 2.9.1-2
|
||||||
- Fix LVM-VDO statistics tests (#2023880,#2025483)
|
- Fix conditional around polkit Recommends for building on EL7
|
||||||
- Fix GError ownership (#1999149)
|
|
||||||
|
|
||||||
* Mon Oct 25 2021 Tomas Bzatek <tbzatek@redhat.com> - 2.9.0-8
|
* Wed Aug 12 2020 Tomas Bzatek <tbzatek@redhat.com> - 2.9.1-1
|
||||||
- CVE-2021-3802: Harden the default mount options for ext filesystems (#2004422)
|
- Version 2.9.1
|
||||||
|
- Renamed zram-setup@.service to udisks2-zram-setup@.service
|
||||||
|
|
||||||
* Fri Apr 23 2021 Tomas Bzatek <tbzatek@redhat.com> - 2.9.0-7
|
* Wed Jul 29 2020 Fedora Release Engineering <releng@fedoraproject.org> - 2.9.0-2
|
||||||
- Do not build udisks2-zram (#1923078)
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
|
||||||
- Fix Drive.ATA test failures (#1926827)
|
|
||||||
|
|
||||||
* Tue Jan 26 2021 Tomas Bzatek <tbzatek@redhat.com> - 2.9.0-6
|
|
||||||
- Rebuilt for new docbook-style-xsl (#1853153)
|
|
||||||
|
|
||||||
* Mon Nov 16 2020 Tomas Bzatek <tbzatek@redhat.com> - 2.9.0-5
|
|
||||||
- Fix loop device setup
|
|
||||||
|
|
||||||
* Tue Nov 10 2020 Tomas Bzatek <tbzatek@redhat.com> - 2.9.0-4
|
|
||||||
- Fix Drive.Ata tests with system SAS drives (#1855785)
|
|
||||||
- Force D-Bus interfaces flush (#1845973)
|
|
||||||
|
|
||||||
* Mon Jun 22 2020 Tomas Bzatek <tbzatek@redhat.com> - 2.9.0-3
|
|
||||||
- Fix the UdisksLVMVDOTest.test_resize_physical test (#1845435)
|
|
||||||
|
|
||||||
* Mon Jun 22 2020 Tomas Bzatek <tbzatek@redhat.com> - 2.9.0-2
|
|
||||||
- Fix block tear-down functionality (#1843454)
|
|
||||||
- Fix libblockdev requires
|
|
||||||
|
|
||||||
* Tue May 26 2020 Tomas Bzatek <tbzatek@redhat.com> - 2.9.0-1
|
* Tue May 26 2020 Tomas Bzatek <tbzatek@redhat.com> - 2.9.0-1
|
||||||
- Rebase to 2.9.0 (#1824147)
|
- Version 2.9.0
|
||||||
|
|
||||||
* Fri Jun 14 2019 Tomas Bzatek <tbzatek@redhat.com> - 2.8.3-2
|
* Fri Jan 31 2020 Fedora Release Engineering <releng@fedoraproject.org> - 2.8.4-4
|
||||||
- Minor test fixes
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
|
||||||
- Fix potential NULL dereference in UDisksLinuxPartition
|
|
||||||
|
* Tue Oct 01 2019 Jonathan Lebon <jonathan@jlebon.com> - 2.8.4-3
|
||||||
|
- Don't trigger udev if socket is not accessible
|
||||||
|
|
||||||
|
* Sat Jul 27 2019 Fedora Release Engineering <releng@fedoraproject.org> - 2.8.4-2
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
|
||||||
|
|
||||||
|
* Mon Jul 22 2019 Tomas Bzatek <tbzatek@redhat.com> - 2.8.4-1
|
||||||
|
- Version 2.8.4
|
||||||
|
|
||||||
* Thu Jun 13 2019 Tomas Bzatek <tbzatek@redhat.com> - 2.8.3-1
|
* Thu Jun 13 2019 Tomas Bzatek <tbzatek@redhat.com> - 2.8.3-1
|
||||||
- Rebased to upstream 2.8.3 release (#1685210)
|
- Version 2.8.3
|
||||||
- Fix leaking filedescriptors (#1614774)
|
|
||||||
- Fix udisksctl pager scrolling (#1662336)
|
|
||||||
- Fix LVM2 plugin CreateSnapshot() error (#1668291)
|
|
||||||
- Add ISCSI plugin GetInitiatorNameRaw() method (#1710257)
|
|
||||||
|
|
||||||
* Mon Oct 08 2018 Vojtech Trefny <vtrefny@redhat.com> - 2.8.0-2
|
* Fri Mar 15 2019 Debarshi Ray <rishi@fedoraproject.org> - 2.8.2-2
|
||||||
- Fix string format vulnerability
|
- Update for tmpfiles.d snippet
|
||||||
Resolves: rhbz#1632831
|
|
||||||
|
* Mon Mar 04 2019 Tomas Bzatek <tbzatek@redhat.com> - 2.8.2-1
|
||||||
|
- Version 2.8.2
|
||||||
|
|
||||||
|
* Sun Feb 03 2019 Fedora Release Engineering <releng@fedoraproject.org> - 2.8.1-2
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
|
||||||
|
|
||||||
|
* Wed Sep 26 2018 Vojtech Trefny <vtrefny@redhat.com> - 2.8.1-1
|
||||||
|
- Version 2.8.1
|
||||||
|
|
||||||
|
* Fri Sep 14 2018 Adam Williamson <awilliam@redhat.com> - 2.8.0-2
|
||||||
|
- Backport PR #576 to fix udev multipath device check (see RHBZ#1628192)
|
||||||
|
|
||||||
* Mon Aug 13 2018 Tomas Bzatek <tbzatek@redhat.com> - 2.8.0-1
|
* Mon Aug 13 2018 Tomas Bzatek <tbzatek@redhat.com> - 2.8.0-1
|
||||||
- Version 2.8.0
|
- Version 2.8.0
|
||||||
|
Loading…
Reference in New Issue
Block a user