diff --git a/Fix-segfault-when-trying-to-reuse-an-invalid-GtkTreeIter.patch b/Fix-segfault-when-trying-to-reuse-an-invalid-GtkTreeIter.patch new file mode 100644 index 0000000000000000000000000000000000000000..35b33ae6aab9acb25f55f2a82274d2b24d8c73f7 --- /dev/null +++ b/Fix-segfault-when-trying-to-reuse-an-invalid-GtkTreeIter.patch @@ -0,0 +1,23 @@ +From c68cfeb790476f71dd27ab7bfc13dcfac49f715c Mon Sep 17 00:00:00 2001 +From: Vojtech Trefny +Date: Wed, 30 Aug 2023 15:52:15 +0200 +Subject: [PATCH] Fix segfault when trying to reuse an invalid GtkTreeIter + +Resolves: rhbz#2234466 +--- + blivetgui/list_devices.py | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/blivetgui/list_devices.py b/blivetgui/list_devices.py +index 9a55be07..2fd4a795 100644 +--- a/blivetgui/list_devices.py ++++ b/blivetgui/list_devices.py +@@ -162,6 +162,8 @@ def on_disk_selection_changed(self, selection): + selection.handler_block(self.selection_signal) + selection.unselect_iter(treeiter) + selection.handler_unblock(self.selection_signal) ++ if not model.iter_is_valid(self.last_iter): ++ self.last_iter = model.get_iter(1) + selection.select_iter(self.last_iter) + treeiter = self.last_iter + diff --git a/Merge-pull-request-#411-from-vojtechtrefny-main_keep-above.patch b/Merge-pull-request-#411-from-vojtechtrefny-main_keep-above.patch new file mode 100644 index 0000000000000000000000000000000000000000..673171581cad9cee097f6369f64d0ef211142a9c --- /dev/null +++ b/Merge-pull-request-#411-from-vojtechtrefny-main_keep-above.patch @@ -0,0 +1,91 @@ +From b5842c910d6bdf14d12ca1817e061336ed0744a6 Mon Sep 17 00:00:00 2001 +From: Vojtech Trefny +Date: Tue, 12 Sep 2023 10:09:20 +0200 +Subject: [PATCH 1/2] Add cmdline option to force blivet-gui to keep above + other apps + +Related: rhbz#2238282 +--- + blivet-gui | 4 +++- + blivetgui/blivetgui.py | 4 +++- + man/blivet-gui.1 | 3 +++ + 3 files changed, 9 insertions(+), 2 deletions(-) + +diff --git a/blivet-gui b/blivet-gui +index 09cbd534..7ac513ae 100755 +--- a/blivet-gui ++++ b/blivet-gui +@@ -73,6 +73,8 @@ def parse_options(): + parser = argparse.ArgumentParser(description="blivet-gui") + parser.add_argument("-v", "--version", action="store_true", dest="version", default=False, + help=_("show version information")) ++ parser.add_argument("--keep-above", action="store_true", dest="keep_above", default=False, ++ help=_("keep blivet-gui window above other windows")) + parser.add_argument("disks", metavar="disk", type=str, nargs="*", + help="run blivet-gui only on specified disk(s) (optional)") + +@@ -106,7 +108,7 @@ def main(): + sockfile = output.split()[0] + + client = BlivetGUIClient(server_socket=sockfile) +- BlivetGUI(client, exclusive_disks=options.disks) ++ BlivetGUI(client, exclusive_disks=options.disks, keep_above=options.keep_above) + + + if __name__ == '__main__': +diff --git a/blivetgui/blivetgui.py b/blivetgui/blivetgui.py +index 5e611868..9322398b 100644 +--- a/blivetgui/blivetgui.py ++++ b/blivetgui/blivetgui.py +@@ -67,7 +67,7 @@ class BlivetGUI(object): + + installer_mode = False + +- def __init__(self, client, exclusive_disks=None): ++ def __init__(self, client, exclusive_disks=None, keep_above=False): + + self.client = client + +@@ -103,6 +103,8 @@ def __init__(self, client, exclusive_disks=None): + # MainWindow + self.main_window = self.builder.get_object("main_window") + self.main_window.connect("delete-event", self.quit) ++ if keep_above: ++ self.main_window.set_keep_above(True) + + # Exception handling + self.exc = BlivetGUIExceptionHandler(self.main_window, sys.excepthook) +diff --git a/man/blivet-gui.1 b/man/blivet-gui.1 +index 043a0f89..245afe1e 100644 +--- a/man/blivet-gui.1 ++++ b/man/blivet-gui.1 +@@ -16,6 +16,9 @@ show this help information and exit + .TP + .BR \-v ", " \-\-version + show version information and exit ++.TP ++.BR \-\-keep\-above ++keep the blivet-gui window above other windows + + .SH EXAMPLES + You can run blivet-gui from a command line and specify one or more disks. + +From bfaeac7b9b553756665bc97b41b26a3e7ad79bb5 Mon Sep 17 00:00:00 2001 +From: Vojtech Trefny +Date: Tue, 12 Sep 2023 10:10:45 +0200 +Subject: [PATCH 2/2] man: Update copyright year + +--- + man/blivet-gui.1 | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/man/blivet-gui.1 b/man/blivet-gui.1 +index 245afe1e..d24886c0 100644 +--- a/man/blivet-gui.1 ++++ b/man/blivet-gui.1 +@@ -31,4 +31,4 @@ blivet-gui /dev/sda /dev/sdb + Vojtech Trefny + + .SH COPYRIGHT +-2020, Red Hat, Licensed under GPLv2+ ++2023, Red Hat, Licensed under GPLv2+ diff --git a/Merge-pull-request-#412-from-vojtechtrefny-main_flags-auto-dev-updates.patch b/Merge-pull-request-#412-from-vojtechtrefny-main_flags-auto-dev-updates.patch new file mode 100644 index 0000000000000000000000000000000000000000..8713127982fbfd19e6b6b3200205b6cba22bebff --- /dev/null +++ b/Merge-pull-request-#412-from-vojtechtrefny-main_flags-auto-dev-updates.patch @@ -0,0 +1,116 @@ +From 428b33cf7184416c5a0d07d23b279bb0b919e458 Mon Sep 17 00:00:00 2001 +From: Vojtech Trefny +Date: Tue, 12 Sep 2023 13:49:55 +0200 +Subject: [PATCH] Add a cmdline option to enabled blivet's auto_dev_updates + flag + +Resolves: rhbz#2238292 +--- + blivet-gui | 5 ++++- + blivetgui/blivet_utils.py | 11 ++++++++++- + blivetgui/blivetgui.py | 8 ++++++-- + man/blivet-gui.1 | 3 +++ + 4 files changed, 23 insertions(+), 4 deletions(-) + +diff --git a/blivet-gui b/blivet-gui +index 7ac513a..db5e3d8 100755 +--- a/blivet-gui ++++ b/blivet-gui +@@ -75,6 +75,9 @@ def parse_options(): + help=_("show version information")) + parser.add_argument("--keep-above", action="store_true", dest="keep_above", default=False, + help=_("keep blivet-gui window above other windows")) ++ parser.add_argument("--auto-dev-updates", action="store_true", dest="auto_dev_updates", default=False, ++ help="gather all information about devices even if it requires potentially dangerous operation \ ++ like mounting or filesystem check") + parser.add_argument("disks", metavar="disk", type=str, nargs="*", + help="run blivet-gui only on specified disk(s) (optional)") + +@@ -108,7 +111,7 @@ def main(): + sockfile = output.split()[0] + + client = BlivetGUIClient(server_socket=sockfile) +- BlivetGUI(client, exclusive_disks=options.disks, keep_above=options.keep_above) ++ BlivetGUI(client, exclusive_disks=options.disks, keep_above=options.keep_above, auto_dev_updates=options.auto_dev_updates) + + + if __name__ == '__main__': +diff --git a/blivetgui/blivet_utils.py b/blivetgui/blivet_utils.py +index 3c08384..e2f0a08 100644 +--- a/blivetgui/blivet_utils.py ++++ b/blivetgui/blivet_utils.py +@@ -138,7 +138,7 @@ class BlivetUtils(object): + + installer_mode = False + +- def __init__(self, ignored_disks=None, exclusive_disks=None): ++ def __init__(self, ignored_disks=None, exclusive_disks=None, flags=None): + + self.ignored_disks = ignored_disks + self.exclusive_disks = exclusive_disks +@@ -164,9 +164,18 @@ def __init__(self, ignored_disks=None, exclusive_disks=None): + # ignore zram devices + blivet.udev.ignored_device_names.append(r"^zram") + ++ # set blivet flags ++ if flags: ++ self._set_blivet_flags(flags) ++ + self.blivet_reset() + self._update_min_sizes_info() + ++ def _set_blivet_flags(self, flags): ++ for flag, value in flags.items(): ++ self.log.info("setting blivet flag '%s' to '%s'", flag, value) ++ setattr(blivet.flags.flags, flag, value) ++ + @property + def resizable_filesystems(self): + if self._resizable_filesystems is None: +diff --git a/blivetgui/blivetgui.py b/blivetgui/blivetgui.py +index 9322398..0a6749e 100644 +--- a/blivetgui/blivetgui.py ++++ b/blivetgui/blivetgui.py +@@ -67,7 +67,7 @@ class BlivetGUI(object): + + installer_mode = False + +- def __init__(self, client, exclusive_disks=None, keep_above=False): ++ def __init__(self, client, exclusive_disks=None, keep_above=False, auto_dev_updates=False): + + self.client = client + +@@ -93,6 +93,10 @@ def __init__(self, client, exclusive_disks=None, keep_above=False): + # supported filesystems + self._supported_filesystems = [] + ++ self.flags = dict() ++ if auto_dev_updates: ++ self.flags["auto_dev_updates"] = True ++ + # CSS styles + css_provider = Gtk.CssProvider() + css_provider.load_from_path(locate_css_file("rectangle.css")) +@@ -789,7 +793,7 @@ def _blivet_init_already_running(self): + + def blivet_init(self): + loading_window = LoadingWindow(self.main_window) +- ret = self._run_thread(loading_window, self.client.remote_control, ("init", self.ignored_disks, self.exclusive_disks)) ++ ret = self._run_thread(loading_window, self.client.remote_control, ("init", self.ignored_disks, self.exclusive_disks, self.flags)) + + if not ret.success: # pylint: disable=maybe-no-member + # blivet-gui is already running --> quit +diff --git a/man/blivet-gui.1 b/man/blivet-gui.1 +index d24886c..be65bd4 100644 +--- a/man/blivet-gui.1 ++++ b/man/blivet-gui.1 +@@ -19,6 +19,9 @@ show version information and exit + .TP + .BR \-\-keep\-above + keep the blivet-gui window above other windows ++.TP ++.BR \-\-auto\-dev\-updates ++gather all information about devices even if it requires potentially dangerous operation like mounting or filesystem check + + .SH EXAMPLES + You can run blivet-gui from a command line and specify one or more disks. diff --git a/Merge-pull-request-#414-from-vojtechtrefny-main_dialog-response-fix.patch b/Merge-pull-request-#414-from-vojtechtrefny-main_dialog-response-fix.patch new file mode 100644 index 0000000000000000000000000000000000000000..d67bd92be176dfef9f88e0e159f865aad55638f8 --- /dev/null +++ b/Merge-pull-request-#414-from-vojtechtrefny-main_dialog-response-fix.patch @@ -0,0 +1,132 @@ +From 6b1c391d630f107c9ac20d440ed88dc80df1700e Mon Sep 17 00:00:00 2001 +From: Vojtech Trefny +Date: Thu, 5 Oct 2023 10:59:16 +0200 +Subject: [PATCH] Fix logic when checking for dialog response + +The dialog can be closed with a different action than REJECT (like +DELETE_EVENT when closing the dialog with Esc) so we need to +explicitly check for the ACCEPT response instead the other way +around. + +Resolves: rhbz#2241761 +--- + blivetgui/dialogs/edit_dialog.py | 44 ++++++++++++++++---------------- + 1 file changed, 22 insertions(+), 22 deletions(-) + +diff --git a/blivetgui/dialogs/edit_dialog.py b/blivetgui/dialogs/edit_dialog.py +index c8c5663d..5813dfa0 100644 +--- a/blivetgui/dialogs/edit_dialog.py ++++ b/blivetgui/dialogs/edit_dialog.py +@@ -110,10 +110,7 @@ def _add_resize_info(self): + def run(self): + response = self.dialog.run() + +- if response == Gtk.ResponseType.REJECT: +- self.dialog.destroy() +- return ProxyDataContainer(edit_device=self.resize_device, resize=False, size=None) +- else: ++ if response == Gtk.ResponseType.ACCEPT: + # size_chooser is None --> resizing is not allowed and error was displayed + if self.size_chooser is None: + self.dialog.destroy() +@@ -123,6 +120,9 @@ def run(self): + resize = selected_size != self.resize_device.size + self.dialog.destroy() + return ProxyDataContainer(edit_device=self.resize_device, resize=resize, size=selected_size) ++ else: ++ self.dialog.destroy() ++ return ProxyDataContainer(edit_device=self.resize_device, resize=False, size=None) + + def _on_cancel_button(self, _button): + self.dialog.response(Gtk.ResponseType.REJECT) +@@ -246,11 +246,7 @@ def validate_user_input(self): + def run(self): + response = self.dialog.run() + +- if response == Gtk.ResponseType.REJECT: +- self.dialog.destroy() +- return ProxyDataContainer(edit_device=self.edit_device, format=False, +- filesystem=None, label=None, mountpoint=None) +- else: ++ if response == Gtk.ResponseType.ACCEPT: + if not self.validate_user_input(): + return self.run() + +@@ -259,6 +255,10 @@ def run(self): + return ProxyDataContainer(edit_device=self.edit_device, format=True, + filesystem=selected_fs, label=selected_label, + mountpoint=selected_mnt) ++ else: ++ self.dialog.destroy() ++ return ProxyDataContainer(edit_device=self.edit_device, format=False, ++ filesystem=None, label=None, mountpoint=None) + + def _allow_format_size(self, fs): + if fs.max_size and self.edit_device.size > fs.max_size: +@@ -351,11 +351,7 @@ def validate_user_input(self): + def run(self): + response = self.dialog.run() + +- if response == Gtk.ResponseType.REJECT: +- self.dialog.destroy() +- return ProxyDataContainer(edit_device=self.edit_device, do_set=False, +- mountpoint=None) +- else: ++ if response == Gtk.ResponseType.ACCEPT: + if not self.validate_user_input(): + return self.run() + +@@ -363,6 +359,10 @@ def run(self): + self.dialog.destroy() + return ProxyDataContainer(edit_device=self.edit_device, do_set=True, + mountpoint=selected_mnt) ++ else: ++ self.dialog.destroy() ++ return ProxyDataContainer(edit_device=self.edit_device, do_set=False, ++ mountpoint=None) + + def _on_cancel_button(self, _button): + self.dialog.response(Gtk.ResponseType.REJECT) +@@ -414,16 +414,16 @@ def _validate_user_input(self, label): + def run(self): + response = self.dialog.run() + +- if response == Gtk.ResponseType.REJECT: +- self.dialog.destroy() +- return ProxyDataContainer(edit_device=self.edit_device, relabel=False, label=None) +- else: ++ if response == Gtk.ResponseType.ACCEPT: + new_label = self.entry_label.get_text() + if not self._validate_user_input(new_label): + return self.run() + else: + self.dialog.destroy() + return ProxyDataContainer(edit_device=self.edit_device, relabel=True, label=new_label) ++ else: ++ self.dialog.destroy() ++ return ProxyDataContainer(edit_device=self.edit_device, relabel=False, label=None) + + def _on_cancel_button(self, _button): + self.dialog.response(Gtk.ResponseType.REJECT) +@@ -471,10 +471,7 @@ def set_decorated(self, decorated): + def run(self): + response = self.dialog.run() + +- if response == Gtk.ResponseType.REJECT: +- self.dialog.destroy() +- return ProxyDataContainer(edit_device=self.edit_device, unmount=False, mountpoints=[]) +- else: ++ if response == Gtk.ResponseType.ACCEPT: + mountpoints = [] + for row in self.mountpoints_store: + if row[0]: +@@ -482,6 +479,9 @@ def run(self): + + self.dialog.destroy() + return ProxyDataContainer(edit_device=self.edit_device, unmount=True, mountpoints=mountpoints) ++ else: ++ self.dialog.destroy() ++ return ProxyDataContainer(edit_device=self.edit_device, unmount=False, mountpoints=[]) + + def _on_unmount_toggled(self, _toggle, path): + self.mountpoints_store[path][0] = not self.mountpoints_store[path][0] diff --git a/blivet-gui.spec b/blivet-gui.spec index 72880d765017e0e6d8c5b515c4f96aac9d29f38d..627602a02d2efe6fee7e936cda88861a43b9e074 100644 --- a/blivet-gui.spec +++ b/blivet-gui.spec @@ -1,6 +1,6 @@ Name: blivet-gui Version: 2.4.2 -Release: 1 +Release: 2 Summary: Tool for data storage configuration License: GPL-2.0-or-later URL: https://github.com/storaged-project/blivet-gui @@ -8,6 +8,11 @@ Source0: https://github.com/storaged-project/blivet-gui/releases/downloa Source1: blivet-gui_event.conf Patch0: skip-brtfs-raid-test-if-no-support.patch +Patch1: Fix-segfault-when-trying-to-reuse-an-invalid-GtkTreeIter.patch +Patch2: Merge-pull-request-#411-from-vojtechtrefny-main_keep-above.patch +Patch3: Merge-pull-request-#412-from-vojtechtrefny-main_flags-auto-dev-updates.patch +Patch4: pylint-Use-exit-instead-of-do_exit-for-pylint-lint-Run.patch +Patch5: Merge-pull-request-#414-from-vojtechtrefny-main_dialog-response-fix.patch BuildArch: noarch BuildRequires: desktop-file-utils libappstream-glib python3-devel gettext >= 0.18.3 python3-setuptools make @@ -64,6 +69,17 @@ make test %{_mandir}/man1/blivet-gui.1* %changelog +* Fri Aug 9 2024 zhangxingrong - 2.4.2-2 +- Type:requirements +- CVE:NA +- SUG:NA +- DESC:Fix segfault when trying to reuse an invalid GtkTreeIter + Merge pull request #411 from vojtechtrefny/main_keep-above + Merge pull request #412 from vojtechtrefny/main_flags-auto-dev-updates + pylint: Use 'exit' instead of 'do_exit' for pylint.lint.Run + Merge pull request #414 from vojtechtrefny/main_dialog-response-fix + + * Mon Dec 18 2023 zhouyihang - 2.4.2-1 - Type:requirements - CVE:NA diff --git a/pylint-Use-exit-instead-of-do_exit-for-pylint-lint-Run.patch b/pylint-Use-exit-instead-of-do_exit-for-pylint-lint-Run.patch new file mode 100644 index 0000000000000000000000000000000000000000..b4a7aaafc1b28ee621c226f533f6d3e0371ff3ec --- /dev/null +++ b/pylint-Use-exit-instead-of-do_exit-for-pylint-lint-Run.patch @@ -0,0 +1,24 @@ +From b9ce1980a9906fd0d3b933171f1a0ba011b19234 Mon Sep 17 00:00:00 2001 +From: Vojtech Trefny +Date: Tue, 3 Oct 2023 12:05:40 +0200 +Subject: [PATCH] pylint: Use 'exit' instead of 'do_exit' for pylint.lint.Run + +The 'do_exit' keyword argument has been deprecated for a while +and finally removed in pylinr 3.0. +--- + tests/pylint/censorship.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/tests/pylint/censorship.py b/tests/pylint/censorship.py +index 30b0d4da..33ed42dc 100755 +--- a/tests/pylint/censorship.py ++++ b/tests/pylint/censorship.py +@@ -109,7 +109,7 @@ def run(self): + + pylint.lint.Run(args, + reporter=TextReporter(self._stdout), +- do_exit=False) ++ exit=False) + + return self._process_output() +