From d2b71fddd80f5957bde2d9499fc8dad8f781ae4e Mon Sep 17 00:00:00 2001 From: Petr Lautrbach Date: Thu, 18 Apr 2024 12:43:35 +0200 Subject: [PATCH] SETools 4.5.0 - Add graphical results for information flow analysis and domain transition analysis, available in apol, sedta, and seinfoflow. - Add tooltips, What's This?, and detail popups in apol to help cross-referencing query and analysis results along with context-sensitive help. Resolves: RHEL-29967 --- .gitignore | 1 + 0001-Use-PyQt6.patch | 1121 ------------------------------------------ setools.spec | 8 +- sources | 2 +- 4 files changed, 7 insertions(+), 1125 deletions(-) delete mode 100644 0001-Use-PyQt6.patch diff --git a/.gitignore b/.gitignore index a5afd44..66ea469 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,4 @@ setools-3.3.8-f1e5b20.tar.bz2 /4.4.2.tar.gz /4.4.3.tar.gz /4.4.4.tar.gz +/4.5.0.tar.gz diff --git a/0001-Use-PyQt6.patch b/0001-Use-PyQt6.patch deleted file mode 100644 index 8b0285c..0000000 --- a/0001-Use-PyQt6.patch +++ /dev/null @@ -1,1121 +0,0 @@ -From a9a062004e9974e06880e57ddb2c9699de2696f0 Mon Sep 17 00:00:00 2001 -From: Petr Lautrbach -Date: Mon, 4 Sep 2023 16:12:59 +0200 -Subject: [PATCH] Use PyQt6 -Content-type: text/plain - -Signed-off-by: Petr Lautrbach ---- - .mypy.ini | 2 +- - README.md | 6 +++--- - apol | 4 ++-- - setoolsgui/apol/analysistab.py | 4 ++-- - setoolsgui/apol/boolquery.py | 6 +++--- - setoolsgui/apol/boundsquery.py | 6 +++--- - setoolsgui/apol/categoryquery.py | 6 +++--- - setoolsgui/apol/chooseanalysis.py | 4 ++-- - setoolsgui/apol/commonquery.py | 6 +++--- - setoolsgui/apol/constraintquery.py | 6 +++--- - setoolsgui/apol/defaultquery.py | 6 +++--- - setoolsgui/apol/dta.py | 6 +++--- - setoolsgui/apol/excludetypes.py | 4 ++-- - setoolsgui/apol/fsusequery.py | 6 +++--- - setoolsgui/apol/genfsconquery.py | 6 +++--- - setoolsgui/apol/ibendportconquery.py | 6 +++--- - setoolsgui/apol/ibpkeyconquery.py | 6 +++--- - setoolsgui/apol/infoflow.py | 6 +++--- - setoolsgui/apol/initsidquery.py | 6 +++--- - setoolsgui/apol/mainwindow.py | 8 ++++---- - setoolsgui/apol/mlsrulequery.py | 6 +++--- - setoolsgui/apol/netifconquery.py | 6 +++--- - setoolsgui/apol/nodeconquery.py | 6 +++--- - setoolsgui/apol/objclassquery.py | 6 +++--- - setoolsgui/apol/permmapedit.py | 6 +++--- - setoolsgui/apol/portconquery.py | 6 +++--- - setoolsgui/apol/queryupdater.py | 2 +- - setoolsgui/apol/rbacrulequery.py | 6 +++--- - setoolsgui/apol/rolequery.py | 6 +++--- - setoolsgui/apol/sensitivityquery.py | 6 +++--- - setoolsgui/apol/summary.py | 6 +++--- - setoolsgui/apol/terulequery.py | 6 +++--- - setoolsgui/apol/typeattrquery.py | 6 +++--- - setoolsgui/apol/typequery.py | 6 +++--- - setoolsgui/apol/userquery.py | 6 +++--- - setoolsgui/apol/workspace.py | 2 +- - setoolsgui/boolmodel.py | 4 ++-- - setoolsgui/boundsmodel.py | 2 +- - setoolsgui/commonmodel.py | 4 ++-- - setoolsgui/constraintmodel.py | 2 +- - setoolsgui/defaultmodel.py | 2 +- - setoolsgui/details.py | 4 ++-- - setoolsgui/fsusemodel.py | 2 +- - setoolsgui/genfsconmodel.py | 2 +- - setoolsgui/getdetailslist.py | 4 ++-- - setoolsgui/ibendportconmodel.py | 2 +- - setoolsgui/ibpkeyconmodel.py | 2 +- - setoolsgui/initsidmodel.py | 2 +- - setoolsgui/listview.py | 6 +++--- - setoolsgui/logtosignal.py | 2 +- - setoolsgui/mlsmodel.py | 4 ++-- - setoolsgui/mlsrulemodel.py | 2 +- - setoolsgui/models.py | 2 +- - setoolsgui/netifconmodel.py | 2 +- - setoolsgui/nodeconmodel.py | 2 +- - setoolsgui/objclassmodel.py | 4 ++-- - setoolsgui/portconmodel.py | 2 +- - setoolsgui/rbacrulemodel.py | 2 +- - setoolsgui/rolemodel.py | 4 ++-- - setoolsgui/tableview.py | 6 +++--- - setoolsgui/terulemodel.py | 2 +- - setoolsgui/treeview.py | 6 +++--- - setoolsgui/typeattrmodel.py | 4 ++-- - setoolsgui/typemodel.py | 4 ++-- - setoolsgui/usermodel.py | 2 +- - setoolsgui/widget.py | 2 +- - 66 files changed, 144 insertions(+), 144 deletions(-) - -diff --git a/.mypy.ini b/.mypy.ini -index b45560b7d8d0..7d3aef848b4a 100644 ---- a/.mypy.ini -+++ b/.mypy.ini -@@ -9,7 +9,7 @@ ignore_missing_imports = True - [mypy-networkx.*] - ignore_missing_imports = True - --[mypy-PyQt5.*] -+[mypy-PyQt6.*] - ignore_missing_imports = True - - [mypy-sip] -diff --git a/README.md b/README.md -index b5a05c9376c3..d291e0d5693d 100644 ---- a/README.md -+++ b/README.md -@@ -20,8 +20,8 @@ To run SETools command line tools, the following packages are required: - * libsepol 3.2+ - - To run SETools graphical tools, the following packages are also required: --* PyQt5 --* qt5-assistant -+* PyQt6 -+* qt6-assistant - * qt-devel (only if rebuilding the help file) - - To build SETools, the following development packages are required, in -@@ -73,7 +73,7 @@ the tools can be ran from the current directory (e.g. ```./seinfo```). - ### Rebuilding the Apol Help File - - For convenience, a prebuilt copy of the apol help data file is included. --To rebuild this file, the Qt5 development tools are required -+To rebuild this file, the Qt6 development tools are required - (particularly, the ```qcollectiongenerator``` tool). At the root - of the SETools sources, perform the following: - ``` -diff --git a/apol b/apol -index 400832199eae..f32b29bf8c5c 100755 ---- a/apol -+++ b/apol -@@ -8,7 +8,7 @@ import sys - import argparse - import logging - --from PyQt5.QtWidgets import QApplication -+from PyQt6.QtWidgets import QApplication - import setools - import setoolsgui - -@@ -42,7 +42,7 @@ logging.getLogger().addHandler(console_handler) - try: - app = QApplication(sys.argv) - mainwindow = setoolsgui.ApolMainWindow(args.policy) -- sys.exit(app.exec_()) -+ sys.exit(app.exec()) - - except Exception as err: - if args.debug: -diff --git a/setoolsgui/apol/analysistab.py b/setoolsgui/apol/analysistab.py -index bc3629ff274a..13f89db32277 100644 ---- a/setoolsgui/apol/analysistab.py -+++ b/setoolsgui/apol/analysistab.py -@@ -6,8 +6,8 @@ - from typing import Dict, NamedTuple - from enum import Enum - --import sip --from PyQt5.QtWidgets import QDialogButtonBox, QScrollArea -+import PyQt6.sip as sip -+from PyQt6.QtWidgets import QDialogButtonBox, QScrollArea - - from ..widget import SEToolsWidget - -diff --git a/setoolsgui/apol/boolquery.py b/setoolsgui/apol/boolquery.py -index 6116fe48a846..d7bf529fa267 100644 ---- a/setoolsgui/apol/boolquery.py -+++ b/setoolsgui/apol/boolquery.py -@@ -7,9 +7,9 @@ - import logging - from contextlib import suppress - --from PyQt5.QtCore import Qt, QSortFilterProxyModel, QStringListModel, QThread --from PyQt5.QtGui import QPalette, QTextCursor --from PyQt5.QtWidgets import QCompleter, QHeaderView, QMessageBox, QProgressDialog -+from PyQt6.QtCore import Qt, QSortFilterProxyModel, QStringListModel, QThread -+from PyQt6.QtGui import QPalette, QTextCursor -+from PyQt6.QtWidgets import QCompleter, QHeaderView, QMessageBox, QProgressDialog - from setools import BoolQuery - - from ..logtosignal import LogHandlerToSignal -diff --git a/setoolsgui/apol/boundsquery.py b/setoolsgui/apol/boundsquery.py -index 5b90c2ee2ded..5c53803dbb7a 100644 ---- a/setoolsgui/apol/boundsquery.py -+++ b/setoolsgui/apol/boundsquery.py -@@ -7,9 +7,9 @@ - import logging - from contextlib import suppress - --from PyQt5.QtCore import Qt, QSortFilterProxyModel, QStringListModel, QThread --from PyQt5.QtGui import QPalette, QTextCursor --from PyQt5.QtWidgets import QCompleter, QHeaderView, QMessageBox, QProgressDialog -+from PyQt6.QtCore import Qt, QSortFilterProxyModel, QStringListModel, QThread -+from PyQt6.QtGui import QPalette, QTextCursor -+from PyQt6.QtWidgets import QCompleter, QHeaderView, QMessageBox, QProgressDialog - from setools import BoundsQuery - - from ..logtosignal import LogHandlerToSignal -diff --git a/setoolsgui/apol/categoryquery.py b/setoolsgui/apol/categoryquery.py -index 598f163c335f..7df35566f672 100644 ---- a/setoolsgui/apol/categoryquery.py -+++ b/setoolsgui/apol/categoryquery.py -@@ -7,9 +7,9 @@ - import logging - from contextlib import suppress - --from PyQt5.QtCore import Qt, QSortFilterProxyModel, QStringListModel, QThread --from PyQt5.QtGui import QPalette, QTextCursor --from PyQt5.QtWidgets import QCompleter, QHeaderView, QMessageBox, QProgressDialog -+from PyQt6.QtCore import Qt, QSortFilterProxyModel, QStringListModel, QThread -+from PyQt6.QtGui import QPalette, QTextCursor -+from PyQt6.QtWidgets import QCompleter, QHeaderView, QMessageBox, QProgressDialog - from setools import CategoryQuery - - from ..logtosignal import LogHandlerToSignal -diff --git a/setoolsgui/apol/chooseanalysis.py b/setoolsgui/apol/chooseanalysis.py -index 155ae6d2f4ae..d7d192a94c2a 100644 ---- a/setoolsgui/apol/chooseanalysis.py -+++ b/setoolsgui/apol/chooseanalysis.py -@@ -5,8 +5,8 @@ - # - from collections import defaultdict - --from PyQt5.QtCore import Qt --from PyQt5.QtWidgets import QDialog, QTreeWidgetItem -+from PyQt6.QtCore import Qt -+from PyQt6.QtWidgets import QDialog, QTreeWidgetItem - - from ..widget import SEToolsWidget - from .analysistab import AnalysisSection, AnalysisTab, TAB_REGISTRY -diff --git a/setoolsgui/apol/commonquery.py b/setoolsgui/apol/commonquery.py -index 8fb11e87290d..1c73a42aff4b 100644 ---- a/setoolsgui/apol/commonquery.py -+++ b/setoolsgui/apol/commonquery.py -@@ -7,9 +7,9 @@ - import logging - from contextlib import suppress - --from PyQt5.QtCore import Qt, QSortFilterProxyModel, QStringListModel, QThread --from PyQt5.QtGui import QPalette, QTextCursor --from PyQt5.QtWidgets import QCompleter, QHeaderView, QMessageBox, QProgressDialog -+from PyQt6.QtCore import Qt, QSortFilterProxyModel, QStringListModel, QThread -+from PyQt6.QtGui import QPalette, QTextCursor -+from PyQt6.QtWidgets import QCompleter, QHeaderView, QMessageBox, QProgressDialog - from setools import CommonQuery - - from ..logtosignal import LogHandlerToSignal -diff --git a/setoolsgui/apol/constraintquery.py b/setoolsgui/apol/constraintquery.py -index ee64db0ca1df..efda65f4c55e 100644 ---- a/setoolsgui/apol/constraintquery.py -+++ b/setoolsgui/apol/constraintquery.py -@@ -7,9 +7,9 @@ - import logging - from contextlib import suppress - --from PyQt5.QtCore import Qt, QSortFilterProxyModel, QStringListModel, QThread --from PyQt5.QtGui import QPalette, QTextCursor --from PyQt5.QtWidgets import QCompleter, QHeaderView, QMessageBox, QProgressDialog -+from PyQt6.QtCore import Qt, QSortFilterProxyModel, QStringListModel, QThread -+from PyQt6.QtGui import QPalette, QTextCursor -+from PyQt6.QtWidgets import QCompleter, QHeaderView, QMessageBox, QProgressDialog - from setools import ConstraintQuery - - from ..logtosignal import LogHandlerToSignal -diff --git a/setoolsgui/apol/defaultquery.py b/setoolsgui/apol/defaultquery.py -index e09692ee6a46..cad78d03e8a8 100644 ---- a/setoolsgui/apol/defaultquery.py -+++ b/setoolsgui/apol/defaultquery.py -@@ -8,9 +8,9 @@ - import logging - from contextlib import suppress - --from PyQt5.QtCore import Qt, QSortFilterProxyModel, QStringListModel, QThread --from PyQt5.QtGui import QPalette, QTextCursor --from PyQt5.QtWidgets import QCompleter, QHeaderView, QMessageBox, QProgressDialog -+from PyQt6.QtCore import Qt, QSortFilterProxyModel, QStringListModel, QThread -+from PyQt6.QtGui import QPalette, QTextCursor -+from PyQt6.QtWidgets import QCompleter, QHeaderView, QMessageBox, QProgressDialog - from setools import DefaultQuery, DefaultValue, DefaultRangeValue - - from ..logtosignal import LogHandlerToSignal -diff --git a/setoolsgui/apol/dta.py b/setoolsgui/apol/dta.py -index 8bbed4dbe21f..bdbe6f448150 100644 ---- a/setoolsgui/apol/dta.py -+++ b/setoolsgui/apol/dta.py -@@ -7,9 +7,9 @@ - import logging - from contextlib import suppress - --from PyQt5.QtCore import pyqtSignal, Qt, QStringListModel, QThread --from PyQt5.QtGui import QPalette, QTextCursor --from PyQt5.QtWidgets import QCompleter, QHeaderView, QMessageBox, QProgressDialog, \ -+from PyQt6.QtCore import pyqtSignal, Qt, QStringListModel, QThread -+from PyQt6.QtGui import QPalette, QTextCursor -+from PyQt6.QtWidgets import QCompleter, QHeaderView, QMessageBox, QProgressDialog, \ - QTreeWidgetItem - from setools import DomainTransitionAnalysis - -diff --git a/setoolsgui/apol/excludetypes.py b/setoolsgui/apol/excludetypes.py -index 1c4beaf84542..a764597cc1cd 100644 ---- a/setoolsgui/apol/excludetypes.py -+++ b/setoolsgui/apol/excludetypes.py -@@ -7,8 +7,8 @@ - import logging - import copy - --from PyQt5.QtCore import Qt, QSortFilterProxyModel --from PyQt5.QtWidgets import QDialog -+from PyQt6.QtCore import Qt, QSortFilterProxyModel -+from PyQt6.QtWidgets import QDialog - - from ..models import SEToolsListModel - from ..widget import SEToolsWidget -diff --git a/setoolsgui/apol/fsusequery.py b/setoolsgui/apol/fsusequery.py -index 4e7567f4e4c6..e0b77af58ef0 100644 ---- a/setoolsgui/apol/fsusequery.py -+++ b/setoolsgui/apol/fsusequery.py -@@ -7,9 +7,9 @@ - import logging - from contextlib import suppress - --from PyQt5.QtCore import Qt, QSortFilterProxyModel, QStringListModel, QThread --from PyQt5.QtGui import QPalette, QTextCursor --from PyQt5.QtWidgets import QCompleter, QHeaderView, QMessageBox, QProgressDialog -+from PyQt6.QtCore import Qt, QSortFilterProxyModel, QStringListModel, QThread -+from PyQt6.QtGui import QPalette, QTextCursor -+from PyQt6.QtWidgets import QCompleter, QHeaderView, QMessageBox, QProgressDialog - from setools import FSUseQuery - - from ..logtosignal import LogHandlerToSignal -diff --git a/setoolsgui/apol/genfsconquery.py b/setoolsgui/apol/genfsconquery.py -index 33dbed787cd6..5294e9042857 100644 ---- a/setoolsgui/apol/genfsconquery.py -+++ b/setoolsgui/apol/genfsconquery.py -@@ -7,9 +7,9 @@ - import logging - from contextlib import suppress - --from PyQt5.QtCore import Qt, QSortFilterProxyModel, QStringListModel, QThread --from PyQt5.QtGui import QPalette, QTextCursor --from PyQt5.QtWidgets import QCompleter, QHeaderView, QMessageBox, QProgressDialog -+from PyQt6.QtCore import Qt, QSortFilterProxyModel, QStringListModel, QThread -+from PyQt6.QtGui import QPalette, QTextCursor -+from PyQt6.QtWidgets import QCompleter, QHeaderView, QMessageBox, QProgressDialog - from setools import GenfsconQuery - - from ..logtosignal import LogHandlerToSignal -diff --git a/setoolsgui/apol/ibendportconquery.py b/setoolsgui/apol/ibendportconquery.py -index 18252dd23de0..e688773eac5a 100644 ---- a/setoolsgui/apol/ibendportconquery.py -+++ b/setoolsgui/apol/ibendportconquery.py -@@ -7,9 +7,9 @@ - import logging - from contextlib import suppress - --from PyQt5.QtCore import Qt, QSortFilterProxyModel, QStringListModel, QThread --from PyQt5.QtGui import QPalette, QTextCursor --from PyQt5.QtWidgets import QCompleter, QProgressDialog -+from PyQt6.QtCore import Qt, QSortFilterProxyModel, QStringListModel, QThread -+from PyQt6.QtGui import QPalette, QTextCursor -+from PyQt6.QtWidgets import QCompleter, QProgressDialog - from setools import IbendportconQuery - - from ..logtosignal import LogHandlerToSignal -diff --git a/setoolsgui/apol/ibpkeyconquery.py b/setoolsgui/apol/ibpkeyconquery.py -index b7a78bf908a0..27be270f6602 100644 ---- a/setoolsgui/apol/ibpkeyconquery.py -+++ b/setoolsgui/apol/ibpkeyconquery.py -@@ -7,9 +7,9 @@ - import logging - from contextlib import suppress - --from PyQt5.QtCore import Qt, QSortFilterProxyModel, QStringListModel, QThread --from PyQt5.QtGui import QPalette, QTextCursor --from PyQt5.QtWidgets import QCompleter, QProgressDialog -+from PyQt6.QtCore import Qt, QSortFilterProxyModel, QStringListModel, QThread -+from PyQt6.QtGui import QPalette, QTextCursor -+from PyQt6.QtWidgets import QCompleter, QProgressDialog - from setools import IbpkeyconQuery - - from ..logtosignal import LogHandlerToSignal -diff --git a/setoolsgui/apol/infoflow.py b/setoolsgui/apol/infoflow.py -index 526f3074e143..a57c232ccc3e 100644 ---- a/setoolsgui/apol/infoflow.py -+++ b/setoolsgui/apol/infoflow.py -@@ -9,9 +9,9 @@ import copy - from collections import defaultdict - from contextlib import suppress - --from PyQt5.QtCore import pyqtSignal, Qt, QStringListModel, QThread --from PyQt5.QtGui import QPalette, QTextCursor --from PyQt5.QtWidgets import QCompleter, QHeaderView, QMessageBox, QProgressDialog, \ -+from PyQt6.QtCore import pyqtSignal, Qt, QStringListModel, QThread -+from PyQt6.QtGui import QPalette, QTextCursor -+from PyQt6.QtWidgets import QCompleter, QHeaderView, QMessageBox, QProgressDialog, \ - QTreeWidgetItem - from setools import InfoFlowAnalysis - from setools.exception import UnmappedClass, UnmappedPermission -diff --git a/setoolsgui/apol/initsidquery.py b/setoolsgui/apol/initsidquery.py -index d01f87130925..f84e4c2260a9 100644 ---- a/setoolsgui/apol/initsidquery.py -+++ b/setoolsgui/apol/initsidquery.py -@@ -7,9 +7,9 @@ - import logging - from contextlib import suppress - --from PyQt5.QtCore import Qt, QSortFilterProxyModel, QStringListModel, QThread --from PyQt5.QtGui import QPalette, QTextCursor --from PyQt5.QtWidgets import QCompleter, QHeaderView, QMessageBox, QProgressDialog -+from PyQt6.QtCore import Qt, QSortFilterProxyModel, QStringListModel, QThread -+from PyQt6.QtGui import QPalette, QTextCursor -+from PyQt6.QtWidgets import QCompleter, QHeaderView, QMessageBox, QProgressDialog - from setools import InitialSIDQuery - - from ..logtosignal import LogHandlerToSignal -diff --git a/setoolsgui/apol/mainwindow.py b/setoolsgui/apol/mainwindow.py -index dcbfb7590ef7..7dc3cd852820 100644 ---- a/setoolsgui/apol/mainwindow.py -+++ b/setoolsgui/apol/mainwindow.py -@@ -11,8 +11,8 @@ import json - from contextlib import suppress - - import pkg_resources --from PyQt5.QtCore import pyqtSlot, Qt, QProcess --from PyQt5.QtWidgets import QApplication, QFileDialog, QLineEdit, QMainWindow, QMessageBox -+from PyQt6.QtCore import pyqtSlot, Qt, QProcess -+from PyQt6.QtWidgets import QApplication, QFileDialog, QLineEdit, QMainWindow, QMessageBox - from setools import __version__, PermissionMap, SELinuxPolicy - - from ..widget import SEToolsWidget -@@ -26,7 +26,7 @@ from .summary import SummaryTab - - - BIN_SEARCH_PATHS = ("/usr/local/bin:/usr/bin:/bin") --POSSIBLE_ASSISTANT = ("assistant", "assistant-qt5") -+POSSIBLE_ASSISTANT = ("assistant", "assistant-qt6") - - - class ApolMainWindow(SEToolsWidget, QMainWindow): -@@ -666,7 +666,7 @@ class ApolMainWindow(SEToolsWidget, QMainWindow): - reply = QMessageBox.question( - self, "Qt Assistant Package Installed?", - "Failed to start QT Assistant program {}. " -- "This is typically in the assistant or qt5-assistant package. " -+ "This is typically in the assistant or qt6-assistant package. " - "Choose location of Qt Assistant executable?".format( - self.config.assistant), - QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No) -diff --git a/setoolsgui/apol/mlsrulequery.py b/setoolsgui/apol/mlsrulequery.py -index bb554ade6657..ec0a20955ed8 100644 ---- a/setoolsgui/apol/mlsrulequery.py -+++ b/setoolsgui/apol/mlsrulequery.py -@@ -7,9 +7,9 @@ - import logging - from contextlib import suppress - --from PyQt5.QtCore import Qt, QSortFilterProxyModel, QStringListModel, QThread --from PyQt5.QtGui import QPalette, QTextCursor --from PyQt5.QtWidgets import QCompleter, QHeaderView, QMessageBox, QProgressDialog -+from PyQt6.QtCore import Qt, QSortFilterProxyModel, QStringListModel, QThread -+from PyQt6.QtGui import QPalette, QTextCursor -+from PyQt6.QtWidgets import QCompleter, QHeaderView, QMessageBox, QProgressDialog - from setools import MLSRuleQuery - - from ..logtosignal import LogHandlerToSignal -diff --git a/setoolsgui/apol/netifconquery.py b/setoolsgui/apol/netifconquery.py -index 4cf3de1a9f5c..3c828edb26c6 100644 ---- a/setoolsgui/apol/netifconquery.py -+++ b/setoolsgui/apol/netifconquery.py -@@ -7,9 +7,9 @@ - import logging - from contextlib import suppress - --from PyQt5.QtCore import Qt, QSortFilterProxyModel, QStringListModel, QThread --from PyQt5.QtGui import QPalette, QTextCursor --from PyQt5.QtWidgets import QCompleter, QHeaderView, QMessageBox, QProgressDialog -+from PyQt6.QtCore import Qt, QSortFilterProxyModel, QStringListModel, QThread -+from PyQt6.QtGui import QPalette, QTextCursor -+from PyQt6.QtWidgets import QCompleter, QHeaderView, QMessageBox, QProgressDialog - from setools import NetifconQuery - - from ..logtosignal import LogHandlerToSignal -diff --git a/setoolsgui/apol/nodeconquery.py b/setoolsgui/apol/nodeconquery.py -index 81a33a794c05..dddfa069b9ad 100644 ---- a/setoolsgui/apol/nodeconquery.py -+++ b/setoolsgui/apol/nodeconquery.py -@@ -8,9 +8,9 @@ import sys - import logging - from contextlib import suppress - --from PyQt5.QtCore import Qt, QSortFilterProxyModel, QStringListModel, QThread --from PyQt5.QtGui import QPalette, QTextCursor --from PyQt5.QtWidgets import QCompleter, QHeaderView, QMessageBox, QProgressDialog -+from PyQt6.QtCore import Qt, QSortFilterProxyModel, QStringListModel, QThread -+from PyQt6.QtGui import QPalette, QTextCursor -+from PyQt6.QtWidgets import QCompleter, QHeaderView, QMessageBox, QProgressDialog - from setools import NodeconQuery, NodeconIPVersion - - from ..logtosignal import LogHandlerToSignal -diff --git a/setoolsgui/apol/objclassquery.py b/setoolsgui/apol/objclassquery.py -index 23c8188e8bbd..4f0355dd3176 100644 ---- a/setoolsgui/apol/objclassquery.py -+++ b/setoolsgui/apol/objclassquery.py -@@ -7,9 +7,9 @@ - import logging - from contextlib import suppress - --from PyQt5.QtCore import Qt, QSortFilterProxyModel, QStringListModel, QThread --from PyQt5.QtGui import QPalette, QTextCursor --from PyQt5.QtWidgets import QCompleter, QHeaderView, QMessageBox, QProgressDialog -+from PyQt6.QtCore import Qt, QSortFilterProxyModel, QStringListModel, QThread -+from PyQt6.QtGui import QPalette, QTextCursor -+from PyQt6.QtWidgets import QCompleter, QHeaderView, QMessageBox, QProgressDialog - from setools import ObjClassQuery - - from ..logtosignal import LogHandlerToSignal -diff --git a/setoolsgui/apol/permmapedit.py b/setoolsgui/apol/permmapedit.py -index d1e0b01ce854..ee01917a7bc5 100644 ---- a/setoolsgui/apol/permmapedit.py -+++ b/setoolsgui/apol/permmapedit.py -@@ -6,9 +6,9 @@ - import logging - import copy - --from PyQt5.QtCore import pyqtSignal, pyqtSlot, Qt --from PyQt5.QtGui import QPalette --from PyQt5.QtWidgets import QDialog, QFrame, QWidget -+from PyQt6.QtCore import pyqtSignal, pyqtSlot, Qt -+from PyQt6.QtGui import QPalette -+from PyQt6.QtWidgets import QDialog, QFrame, QWidget - - from ..models import SEToolsListModel - from ..widget import SEToolsWidget -diff --git a/setoolsgui/apol/portconquery.py b/setoolsgui/apol/portconquery.py -index de0a16567f1c..2afdd16e9f9c 100644 ---- a/setoolsgui/apol/portconquery.py -+++ b/setoolsgui/apol/portconquery.py -@@ -8,9 +8,9 @@ - import logging - from contextlib import suppress - --from PyQt5.QtCore import Qt, QSortFilterProxyModel, QStringListModel, QThread --from PyQt5.QtGui import QPalette, QTextCursor --from PyQt5.QtWidgets import QCompleter, QHeaderView, QMessageBox, QProgressDialog -+from PyQt6.QtCore import Qt, QSortFilterProxyModel, QStringListModel, QThread -+from PyQt6.QtGui import QPalette, QTextCursor -+from PyQt6.QtWidgets import QCompleter, QHeaderView, QMessageBox, QProgressDialog - from setools import PortconQuery, PortconProtocol - - from ..logtosignal import LogHandlerToSignal -diff --git a/setoolsgui/apol/queryupdater.py b/setoolsgui/apol/queryupdater.py -index 9b6c155caa0a..07dc21a7d83d 100644 ---- a/setoolsgui/apol/queryupdater.py -+++ b/setoolsgui/apol/queryupdater.py -@@ -3,7 +3,7 @@ - # SPDX-License-Identifier: LGPL-2.1-only - # - # --from PyQt5.QtCore import pyqtSignal, QObject, QThread -+from PyQt6.QtCore import pyqtSignal, QObject, QThread - - - class QueryResultsUpdater(QObject): -diff --git a/setoolsgui/apol/rbacrulequery.py b/setoolsgui/apol/rbacrulequery.py -index 4749d324d858..505a1858d015 100644 ---- a/setoolsgui/apol/rbacrulequery.py -+++ b/setoolsgui/apol/rbacrulequery.py -@@ -7,9 +7,9 @@ - import logging - from contextlib import suppress - --from PyQt5.QtCore import Qt, QSortFilterProxyModel, QStringListModel, QThread --from PyQt5.QtGui import QPalette, QTextCursor --from PyQt5.QtWidgets import QCompleter, QHeaderView, QMessageBox, QProgressDialog -+from PyQt6.QtCore import Qt, QSortFilterProxyModel, QStringListModel, QThread -+from PyQt6.QtGui import QPalette, QTextCursor -+from PyQt6.QtWidgets import QCompleter, QHeaderView, QMessageBox, QProgressDialog - from setools import RBACRuleQuery - - from ..logtosignal import LogHandlerToSignal -diff --git a/setoolsgui/apol/rolequery.py b/setoolsgui/apol/rolequery.py -index e75614d9a992..bd1a02a1d614 100644 ---- a/setoolsgui/apol/rolequery.py -+++ b/setoolsgui/apol/rolequery.py -@@ -7,9 +7,9 @@ - import logging - from contextlib import suppress - --from PyQt5.QtCore import Qt, QSortFilterProxyModel, QStringListModel, QThread --from PyQt5.QtGui import QPalette, QTextCursor --from PyQt5.QtWidgets import QCompleter, QHeaderView, QMessageBox, QProgressDialog -+from PyQt6.QtCore import Qt, QSortFilterProxyModel, QStringListModel, QThread -+from PyQt6.QtGui import QPalette, QTextCursor -+from PyQt6.QtWidgets import QCompleter, QHeaderView, QMessageBox, QProgressDialog - from setools import RoleQuery - - from ..logtosignal import LogHandlerToSignal -diff --git a/setoolsgui/apol/sensitivityquery.py b/setoolsgui/apol/sensitivityquery.py -index c8a27891ae97..aac7e2971b6d 100644 ---- a/setoolsgui/apol/sensitivityquery.py -+++ b/setoolsgui/apol/sensitivityquery.py -@@ -7,9 +7,9 @@ - import logging - from contextlib import suppress - --from PyQt5.QtCore import Qt, QSortFilterProxyModel, QStringListModel, QThread --from PyQt5.QtGui import QPalette, QTextCursor --from PyQt5.QtWidgets import QCompleter, QHeaderView, QMessageBox, QProgressDialog -+from PyQt6.QtCore import Qt, QSortFilterProxyModel, QStringListModel, QThread -+from PyQt6.QtGui import QPalette, QTextCursor -+from PyQt6.QtWidgets import QCompleter, QHeaderView, QMessageBox, QProgressDialog - from setools import SensitivityQuery - - from ..logtosignal import LogHandlerToSignal -diff --git a/setoolsgui/apol/summary.py b/setoolsgui/apol/summary.py -index 1aeb2b303bd6..32b6c5fcfbe5 100644 ---- a/setoolsgui/apol/summary.py -+++ b/setoolsgui/apol/summary.py -@@ -7,9 +7,9 @@ - - import logging - --from PyQt5.QtCore import Qt, QSortFilterProxyModel, QStringListModel, QThread --from PyQt5.QtGui import QPalette, QTextCursor --from PyQt5.QtWidgets import QCompleter, QHeaderView, QMessageBox, QProgressDialog -+from PyQt6.QtCore import Qt, QSortFilterProxyModel, QStringListModel, QThread -+from PyQt6.QtGui import QPalette, QTextCursor -+from PyQt6.QtWidgets import QCompleter, QHeaderView, QMessageBox, QProgressDialog - from setools import MLSRuleQuery - - from ..logtosignal import LogHandlerToSignal -diff --git a/setoolsgui/apol/terulequery.py b/setoolsgui/apol/terulequery.py -index 7c99469edc87..4aba54cc59d0 100644 ---- a/setoolsgui/apol/terulequery.py -+++ b/setoolsgui/apol/terulequery.py -@@ -7,9 +7,9 @@ - import logging - from contextlib import suppress - --from PyQt5.QtCore import Qt, QSortFilterProxyModel, QStringListModel, QThread --from PyQt5.QtGui import QPalette, QTextCursor --from PyQt5.QtWidgets import QCompleter, QHeaderView, QMessageBox, QProgressDialog -+from PyQt6.QtCore import Qt, QSortFilterProxyModel, QStringListModel, QThread -+from PyQt6.QtGui import QPalette, QTextCursor -+from PyQt6.QtWidgets import QCompleter, QHeaderView, QMessageBox, QProgressDialog - from setools import TERuleQuery, xperm_str_to_tuple_ranges - - from ..logtosignal import LogHandlerToSignal -diff --git a/setoolsgui/apol/typeattrquery.py b/setoolsgui/apol/typeattrquery.py -index 67a087a7e3f0..f76de94e93d7 100644 ---- a/setoolsgui/apol/typeattrquery.py -+++ b/setoolsgui/apol/typeattrquery.py -@@ -7,9 +7,9 @@ - import logging - from contextlib import suppress - --from PyQt5.QtCore import Qt, QSortFilterProxyModel, QStringListModel, QThread --from PyQt5.QtGui import QPalette, QTextCursor --from PyQt5.QtWidgets import QCompleter, QHeaderView, QMessageBox, QProgressDialog -+from PyQt6.QtCore import Qt, QSortFilterProxyModel, QStringListModel, QThread -+from PyQt6.QtGui import QPalette, QTextCursor -+from PyQt6.QtWidgets import QCompleter, QHeaderView, QMessageBox, QProgressDialog - from setools import TypeAttributeQuery - - from ..logtosignal import LogHandlerToSignal -diff --git a/setoolsgui/apol/typequery.py b/setoolsgui/apol/typequery.py -index a22e3547cd16..4859364576e4 100644 ---- a/setoolsgui/apol/typequery.py -+++ b/setoolsgui/apol/typequery.py -@@ -7,9 +7,9 @@ - import logging - from contextlib import suppress - --from PyQt5.QtCore import Qt, QSortFilterProxyModel, QStringListModel, QThread --from PyQt5.QtGui import QPalette, QTextCursor --from PyQt5.QtWidgets import QCompleter, QHeaderView, QMessageBox, QProgressDialog -+from PyQt6.QtCore import Qt, QSortFilterProxyModel, QStringListModel, QThread -+from PyQt6.QtGui import QPalette, QTextCursor -+from PyQt6.QtWidgets import QCompleter, QHeaderView, QMessageBox, QProgressDialog - from setools import TypeQuery - - from ..logtosignal import LogHandlerToSignal -diff --git a/setoolsgui/apol/userquery.py b/setoolsgui/apol/userquery.py -index 19ffb03c2975..6200ddcb8398 100644 ---- a/setoolsgui/apol/userquery.py -+++ b/setoolsgui/apol/userquery.py -@@ -7,9 +7,9 @@ - import logging - from contextlib import suppress - --from PyQt5.QtCore import Qt, QSortFilterProxyModel, QStringListModel, QThread --from PyQt5.QtGui import QPalette, QTextCursor --from PyQt5.QtWidgets import QCompleter, QHeaderView, QMessageBox, QProgressDialog -+from PyQt6.QtCore import Qt, QSortFilterProxyModel, QStringListModel, QThread -+from PyQt6.QtGui import QPalette, QTextCursor -+from PyQt6.QtWidgets import QCompleter, QHeaderView, QMessageBox, QProgressDialog - from setools import UserQuery - - from ..logtosignal import LogHandlerToSignal -diff --git a/setoolsgui/apol/workspace.py b/setoolsgui/apol/workspace.py -index 2b4229224b85..8db9d1478d4d 100644 ---- a/setoolsgui/apol/workspace.py -+++ b/setoolsgui/apol/workspace.py -@@ -9,7 +9,7 @@ import logging - import setools - - --from PyQt5.QtCore import Qt, QItemSelectionModel -+from PyQt6.QtCore import Qt, QItemSelectionModel - - - def save_checkboxes(tab, settings, checkboxes): -diff --git a/setoolsgui/boolmodel.py b/setoolsgui/boolmodel.py -index c331fdd5057d..a1a733987258 100644 ---- a/setoolsgui/boolmodel.py -+++ b/setoolsgui/boolmodel.py -@@ -3,8 +3,8 @@ - # SPDX-License-Identifier: LGPL-2.1-only - # - # --from PyQt5.QtCore import Qt --from PyQt5.QtGui import QPalette, QTextCursor -+from PyQt6.QtCore import Qt -+from PyQt6.QtGui import QPalette, QTextCursor - - from .details import DetailsPopup - from .models import SEToolsTableModel -diff --git a/setoolsgui/boundsmodel.py b/setoolsgui/boundsmodel.py -index c7ed1e7c227f..fdc1462b0a9b 100644 ---- a/setoolsgui/boundsmodel.py -+++ b/setoolsgui/boundsmodel.py -@@ -3,7 +3,7 @@ - # SPDX-License-Identifier: LGPL-2.1-only - # - # --from PyQt5.QtCore import Qt -+from PyQt6.QtCore import Qt - - from .models import SEToolsTableModel - -diff --git a/setoolsgui/commonmodel.py b/setoolsgui/commonmodel.py -index 2ceb57f4f0a3..a5c656deac15 100644 ---- a/setoolsgui/commonmodel.py -+++ b/setoolsgui/commonmodel.py -@@ -3,8 +3,8 @@ - # SPDX-License-Identifier: LGPL-2.1-only - # - # --from PyQt5.QtCore import Qt --from PyQt5.QtGui import QPalette, QTextCursor -+from PyQt6.QtCore import Qt -+from PyQt6.QtGui import QPalette, QTextCursor - - from setools.exception import NoCommon - -diff --git a/setoolsgui/constraintmodel.py b/setoolsgui/constraintmodel.py -index d295f28f208b..2ae8dc5ba025 100644 ---- a/setoolsgui/constraintmodel.py -+++ b/setoolsgui/constraintmodel.py -@@ -3,7 +3,7 @@ - # SPDX-License-Identifier: LGPL-2.1-only - # - # --from PyQt5.QtCore import Qt -+from PyQt6.QtCore import Qt - from setools.exception import ConstraintUseError - - from .models import SEToolsTableModel -diff --git a/setoolsgui/defaultmodel.py b/setoolsgui/defaultmodel.py -index 3a699c49ce8c..fe29b3f3179b 100644 ---- a/setoolsgui/defaultmodel.py -+++ b/setoolsgui/defaultmodel.py -@@ -5,7 +5,7 @@ - # - from contextlib import suppress - --from PyQt5.QtCore import Qt -+from PyQt6.QtCore import Qt - - from .models import SEToolsTableModel - -diff --git a/setoolsgui/details.py b/setoolsgui/details.py -index 8d4882cd6a1e..1cbf6c05590c 100644 ---- a/setoolsgui/details.py -+++ b/setoolsgui/details.py -@@ -5,8 +5,8 @@ - # - import logging - --from PyQt5.QtGui import QFont, QTextCursor --from PyQt5.QtWidgets import QDialog -+from PyQt6.QtGui import QFont, QTextCursor -+from PyQt6.QtWidgets import QDialog - - from .widget import SEToolsWidget - -diff --git a/setoolsgui/fsusemodel.py b/setoolsgui/fsusemodel.py -index bc100784c490..327a8653d1b2 100644 ---- a/setoolsgui/fsusemodel.py -+++ b/setoolsgui/fsusemodel.py -@@ -3,7 +3,7 @@ - # SPDX-License-Identifier: LGPL-2.1-only - # - # --from PyQt5.QtCore import Qt -+from PyQt6.QtCore import Qt - - from .models import SEToolsTableModel - -diff --git a/setoolsgui/genfsconmodel.py b/setoolsgui/genfsconmodel.py -index 1e50d929446a..b3429c81d536 100644 ---- a/setoolsgui/genfsconmodel.py -+++ b/setoolsgui/genfsconmodel.py -@@ -5,7 +5,7 @@ - # - import stat - --from PyQt5.QtCore import Qt -+from PyQt6.QtCore import Qt - - from .models import SEToolsTableModel - -diff --git a/setoolsgui/getdetailslist.py b/setoolsgui/getdetailslist.py -index df7149dda0f2..e4e39194456c 100644 ---- a/setoolsgui/getdetailslist.py -+++ b/setoolsgui/getdetailslist.py -@@ -3,8 +3,8 @@ - # SPDX-License-Identifier: LGPL-2.1-only - # - # --from PyQt5.QtGui import QCursor --from PyQt5.QtWidgets import QAction, QListView, QMenu -+from PyQt6.QtGui import QCursor, QAction -+from PyQt6.QtWidgets import QListView, QMenu - - - class GetDetailsListView(QListView): -diff --git a/setoolsgui/ibendportconmodel.py b/setoolsgui/ibendportconmodel.py -index 37b7a8d74948..49780736b90f 100644 ---- a/setoolsgui/ibendportconmodel.py -+++ b/setoolsgui/ibendportconmodel.py -@@ -3,7 +3,7 @@ - # SPDX-License-Identifier: LGPL-2.1-only - # - # --from PyQt5.QtCore import Qt -+from PyQt6.QtCore import Qt - - from .models import SEToolsTableModel - -diff --git a/setoolsgui/ibpkeyconmodel.py b/setoolsgui/ibpkeyconmodel.py -index 160425504521..1a339b90110b 100644 ---- a/setoolsgui/ibpkeyconmodel.py -+++ b/setoolsgui/ibpkeyconmodel.py -@@ -3,7 +3,7 @@ - # SPDX-License-Identifier: LGPL-2.1-only - # - # --from PyQt5.QtCore import Qt -+from PyQt6.QtCore import Qt - - from .models import SEToolsTableModel - -diff --git a/setoolsgui/initsidmodel.py b/setoolsgui/initsidmodel.py -index 9ffb408024fd..04e8a34f931e 100644 ---- a/setoolsgui/initsidmodel.py -+++ b/setoolsgui/initsidmodel.py -@@ -3,7 +3,7 @@ - # SPDX-License-Identifier: LGPL-2.1-only - # - # --from PyQt5.QtCore import Qt -+from PyQt6.QtCore import Qt - - from .models import SEToolsTableModel - -diff --git a/setoolsgui/listview.py b/setoolsgui/listview.py -index e803975c52c6..ff42bf0f8c57 100644 ---- a/setoolsgui/listview.py -+++ b/setoolsgui/listview.py -@@ -6,9 +6,9 @@ - import logging - from collections import defaultdict - --from PyQt5.QtCore import Qt, QItemSelectionModel --from PyQt5.QtGui import QKeySequence --from PyQt5.QtWidgets import QAbstractItemView, QListView -+from PyQt6.QtCore import Qt, QItemSelectionModel -+from PyQt6.QtGui import QKeySequence -+from PyQt6.QtWidgets import QAbstractItemView, QListView - - - class SEToolsListView(QListView): -diff --git a/setoolsgui/logtosignal.py b/setoolsgui/logtosignal.py -index 7678f0992ce6..5bfab937ecc6 100644 ---- a/setoolsgui/logtosignal.py -+++ b/setoolsgui/logtosignal.py -@@ -5,7 +5,7 @@ - # - - from logging import Formatter, Handler, INFO --from PyQt5.QtCore import pyqtSignal, QObject -+from PyQt6.QtCore import pyqtSignal, QObject - - - class LogHandlerToSignal(Handler, QObject): -diff --git a/setoolsgui/mlsmodel.py b/setoolsgui/mlsmodel.py -index 147378ef585a..a0bfb3709d57 100644 ---- a/setoolsgui/mlsmodel.py -+++ b/setoolsgui/mlsmodel.py -@@ -3,8 +3,8 @@ - # SPDX-License-Identifier: LGPL-2.1-only - # - # --from PyQt5.QtCore import Qt --from PyQt5.QtGui import QPalette, QTextCursor -+from PyQt6.QtCore import Qt -+from PyQt6.QtGui import QPalette, QTextCursor - - from .details import DetailsPopup - from .models import SEToolsTableModel -diff --git a/setoolsgui/mlsrulemodel.py b/setoolsgui/mlsrulemodel.py -index 54ad4c216c72..349900ef36d2 100644 ---- a/setoolsgui/mlsrulemodel.py -+++ b/setoolsgui/mlsrulemodel.py -@@ -3,7 +3,7 @@ - # SPDX-License-Identifier: LGPL-2.1-only - # - # --from PyQt5.QtCore import Qt -+from PyQt6.QtCore import Qt - - from .models import SEToolsTableModel - -diff --git a/setoolsgui/models.py b/setoolsgui/models.py -index dd864e932fbc..0a19c9b26f1e 100644 ---- a/setoolsgui/models.py -+++ b/setoolsgui/models.py -@@ -7,7 +7,7 @@ import logging - from contextlib import suppress - from typing import List - --from PyQt5.QtCore import QAbstractListModel, QItemSelectionModel, QAbstractTableModel, \ -+from PyQt6.QtCore import QAbstractListModel, QItemSelectionModel, QAbstractTableModel, \ - QModelIndex, QStringListModel, Qt - from setools.exception import NoCommon - -diff --git a/setoolsgui/netifconmodel.py b/setoolsgui/netifconmodel.py -index 54659203e7e5..d9aa87bd0dea 100644 ---- a/setoolsgui/netifconmodel.py -+++ b/setoolsgui/netifconmodel.py -@@ -3,7 +3,7 @@ - # SPDX-License-Identifier: LGPL-2.1-only - # - # --from PyQt5.QtCore import Qt -+from PyQt6.QtCore import Qt - - from .models import SEToolsTableModel - -diff --git a/setoolsgui/nodeconmodel.py b/setoolsgui/nodeconmodel.py -index f8055fca194d..9bbb426a71aa 100644 ---- a/setoolsgui/nodeconmodel.py -+++ b/setoolsgui/nodeconmodel.py -@@ -3,7 +3,7 @@ - # SPDX-License-Identifier: LGPL-2.1-only - # - # --from PyQt5.QtCore import Qt -+from PyQt6.QtCore import Qt - - from .models import SEToolsTableModel - -diff --git a/setoolsgui/objclassmodel.py b/setoolsgui/objclassmodel.py -index ff1641f8cc3e..d67d45c12fd4 100644 ---- a/setoolsgui/objclassmodel.py -+++ b/setoolsgui/objclassmodel.py -@@ -5,8 +5,8 @@ - # - from itertools import chain - --from PyQt5.QtCore import Qt --from PyQt5.QtGui import QPalette, QTextCursor -+from PyQt6.QtCore import Qt -+from PyQt6.QtGui import QPalette, QTextCursor - - from setools.exception import NoCommon - -diff --git a/setoolsgui/portconmodel.py b/setoolsgui/portconmodel.py -index 1c3de4494af9..5eb3b9327d19 100644 ---- a/setoolsgui/portconmodel.py -+++ b/setoolsgui/portconmodel.py -@@ -3,7 +3,7 @@ - # SPDX-License-Identifier: LGPL-2.1-only - # - # --from PyQt5.QtCore import Qt -+from PyQt6.QtCore import Qt - - from .models import SEToolsTableModel - -diff --git a/setoolsgui/rbacrulemodel.py b/setoolsgui/rbacrulemodel.py -index 84d2ff09e4fc..c97cf36b0a3a 100644 ---- a/setoolsgui/rbacrulemodel.py -+++ b/setoolsgui/rbacrulemodel.py -@@ -3,7 +3,7 @@ - # SPDX-License-Identifier: LGPL-2.1-only - # - # --from PyQt5.QtCore import Qt -+from PyQt6.QtCore import Qt - from setools.exception import RuleUseError - - from .models import SEToolsTableModel -diff --git a/setoolsgui/rolemodel.py b/setoolsgui/rolemodel.py -index 2dd7fe64d37e..dc4852225bdb 100644 ---- a/setoolsgui/rolemodel.py -+++ b/setoolsgui/rolemodel.py -@@ -3,8 +3,8 @@ - # SPDX-License-Identifier: LGPL-2.1-only - # - # --from PyQt5.QtCore import Qt --from PyQt5.QtGui import QPalette, QTextCursor -+from PyQt6.QtCore import Qt -+from PyQt6.QtGui import QPalette, QTextCursor - - from setools.exception import MLSDisabled - -diff --git a/setoolsgui/tableview.py b/setoolsgui/tableview.py -index 9ba49aa50fa3..71174008f85d 100644 ---- a/setoolsgui/tableview.py -+++ b/setoolsgui/tableview.py -@@ -5,9 +5,9 @@ - # - import csv - --from PyQt5.QtCore import Qt --from PyQt5.QtGui import QKeySequence, QCursor --from PyQt5.QtWidgets import QAction, QApplication, QFileDialog, QMenu, QTableView -+from PyQt6.QtCore import Qt -+from PyQt6.QtGui import QAction, QKeySequence, QCursor -+from PyQt6.QtWidgets import QApplication, QFileDialog, QMenu, QTableView - - - class SEToolsTableView(QTableView): -diff --git a/setoolsgui/terulemodel.py b/setoolsgui/terulemodel.py -index 53b61a06d152..ac1b32d76ec4 100644 ---- a/setoolsgui/terulemodel.py -+++ b/setoolsgui/terulemodel.py -@@ -3,7 +3,7 @@ - # SPDX-License-Identifier: LGPL-2.1-only - # - # --from PyQt5.QtCore import Qt -+from PyQt6.QtCore import Qt - from setools.exception import RuleNotConditional, RuleUseError - - from .models import SEToolsTableModel -diff --git a/setoolsgui/treeview.py b/setoolsgui/treeview.py -index a8f6fb4caef5..bf6d63d2b92b 100644 ---- a/setoolsgui/treeview.py -+++ b/setoolsgui/treeview.py -@@ -3,9 +3,9 @@ - # SPDX-License-Identifier: LGPL-2.1-only - # - # --from PyQt5.QtCore import Qt, QModelIndex --from PyQt5.QtGui import QKeySequence, QCursor --from PyQt5.QtWidgets import QAction, QApplication, QFileDialog, QMenu, QTreeWidget, \ -+from PyQt6.QtCore import Qt, QModelIndex -+from PyQt6.QtGui import QAction, QKeySequence, QCursor -+from PyQt6.QtWidgets import QApplication, QFileDialog, QMenu, QTreeWidget, \ - QTreeWidgetItemIterator - - -diff --git a/setoolsgui/typeattrmodel.py b/setoolsgui/typeattrmodel.py -index 0b7c7ffe65a5..ede73228e16a 100644 ---- a/setoolsgui/typeattrmodel.py -+++ b/setoolsgui/typeattrmodel.py -@@ -3,8 +3,8 @@ - # SPDX-License-Identifier: LGPL-2.1-only - # - # --from PyQt5.QtCore import Qt --from PyQt5.QtGui import QPalette, QTextCursor -+from PyQt6.QtCore import Qt -+from PyQt6.QtGui import QPalette, QTextCursor - - from setools.exception import MLSDisabled - -diff --git a/setoolsgui/typemodel.py b/setoolsgui/typemodel.py -index 037996b96a8c..f25737169762 100644 ---- a/setoolsgui/typemodel.py -+++ b/setoolsgui/typemodel.py -@@ -3,8 +3,8 @@ - # SPDX-License-Identifier: LGPL-2.1-only - # - # --from PyQt5.QtCore import Qt --from PyQt5.QtGui import QPalette, QTextCursor -+from PyQt6.QtCore import Qt -+from PyQt6.QtGui import QPalette, QTextCursor - - from setools.exception import MLSDisabled - -diff --git a/setoolsgui/usermodel.py b/setoolsgui/usermodel.py -index d5aca7bc11a0..4edb393a9d0e 100644 ---- a/setoolsgui/usermodel.py -+++ b/setoolsgui/usermodel.py -@@ -3,7 +3,7 @@ - # SPDX-License-Identifier: LGPL-2.1-only - # - # --from PyQt5.QtCore import Qt, QModelIndex -+from PyQt6.QtCore import Qt, QModelIndex - from setools.exception import MLSDisabled - - from .details import DetailsPopup -diff --git a/setoolsgui/widget.py b/setoolsgui/widget.py -index e236623cef96..b2866139564c 100644 ---- a/setoolsgui/widget.py -+++ b/setoolsgui/widget.py -@@ -7,7 +7,7 @@ import sys - from errno import ENOENT - - import pkg_resources --from PyQt5.uic import loadUi -+from PyQt6.uic import loadUi - - - # Stylesheet that adds a frame around QGroupBoxes --- -2.41.0 - diff --git a/setools.spec b/setools.spec index 172292a..0af99a9 100644 --- a/setools.spec +++ b/setools.spec @@ -2,8 +2,8 @@ %global selinux_ver 3.6 Name: setools -Version: 4.4.4 -Release: 2%{?dist} +Version: 4.5.0 +Release: 1%{?dist} Summary: Policy analysis tools for SELinux License: GPL-2.0-only and LGPL-2.1-only @@ -11,7 +11,6 @@ URL: https://github.com/SELinuxProject/setools/wiki Source0: https://github.com/SELinuxProject/setools/archive/%{version}.tar.gz Source1: setools.pam Source2: apol.desktop -Patch1: 0001-Use-PyQt6.patch Obsoletes: setools < 4.0.0, setools-devel < 4.0.0 BuildRequires: flex, bison @@ -144,6 +143,9 @@ Python modules designed to facilitate SELinux policy analysis. %{_mandir}/ru/man1/apol* %changelog +* Thu Apr 18 2024 Petr Lautrbach - 4.5.0-1 +- SETools 4.5.0 + * Sat Jan 27 2024 Fedora Release Engineering - 4.4.4-2 - Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild diff --git a/sources b/sources index b64453e..fc75e62 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (4.4.4.tar.gz) = 3ee382df80c71dc4fd2cd9ba287dbd97aca0d90a67f170646cb02e585d3e2d3bcc4a6f03d404d5273e7ad34a86bee42649432c58d517ad44ff97c94d2f35b1ef +SHA512 (4.5.0.tar.gz) = 1a33569c7a2a03b373e8d975890eff60ac3acdbe2ea7fe961046f4e1b01f25c0c4135d6c92f00a73579f595a754e22287ad2e2894da9a6087554534b91df45ee