Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package gns3-gui for openSUSE:Factory checked in at 2023-01-30 17:10:09 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/gns3-gui (Old) and /work/SRC/openSUSE:Factory/.gns3-gui.new.32243 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "gns3-gui" Mon Jan 30 17:10:09 2023 rev:16 rq:1061886 version:2.2.37 Changes: -------- --- /work/SRC/openSUSE:Factory/gns3-gui/gns3-gui.changes 2022-10-24 11:12:44.311153100 +0200 +++ /work/SRC/openSUSE:Factory/.gns3-gui.new.32243/gns3-gui.changes 2023-01-30 17:22:14.976174788 +0100 @@ -1,0 +2,22 @@ +Wed Jan 25 21:10:02 UTC 2023 - Martin Hauke <mar...@gmx.de> + +- Bugfix release + * no functional changes + +------------------------------------------------------------------- +Sat Jan 21 22:46:57 UTC 2023 - Martin Hauke <mar...@gmx.de> + +- Update to version 2.2.36 + https://github.com/GNS3/gns3-server/releases/tag/v2.2.36 +- Update to version 2.2.35 + https://github.com/GNS3/gns3-server/releases/tag/v2.2.35 +- Update to version 2.2.34 + https://github.com/GNS3/gns3-server/releases/tag/v2.2.34 +- Update to version 2.2.33 + https://github.com/GNS3/gns3-server/releases/tag/v2.2.33 +- Update to version 2.2.32 + https://github.com/GNS3/gns3-server/releases/tag/v2.2.32 +- Drop patch: + * gns3-gui-fix-requirements.patch + +------------------------------------------------------------------- Old: ---- gns3-gui-2.2.31.tar.gz gns3-gui-fix-requirements.patch New: ---- gns3-gui-2.2.37.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ gns3-gui.spec ++++++ --- /var/tmp/diff_new_pack.Z0Zrpt/_old 2023-01-30 17:22:15.432177217 +0100 +++ /var/tmp/diff_new_pack.Z0Zrpt/_new 2023-01-30 17:22:15.436177238 +0100 @@ -1,7 +1,7 @@ # # spec file for package gns3-gui # -# Copyright (c) 2022 SUSE LLC +# Copyright (c) 2023 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,7 +17,7 @@ Name: gns3-gui -Version: 2.2.31 +Version: 2.2.37 Release: 0 Summary: GNS3 graphical interface for the GNS3 server License: GPL-3.0-or-later @@ -25,7 +25,6 @@ URL: http://github.com/GNS3/%{name} Source: https://github.com/GNS3/gns3-gui/archive/v%{version}.tar.gz#/%{name}-%{version}.tar.gz Patch0: %{name}_fix_desktop_file.patch -Patch1: gns3-gui-fix-requirements.patch BuildRequires: fdupes BuildRequires: hicolor-icon-theme BuildRequires: python-rpm-macros @@ -51,9 +50,9 @@ BuildRequires: python3-jsonschema >= 2.4.0 BuildRequires: python3-psutil >= 2.2.1 BuildRequires: python3-pytest +BuildRequires: python3-qt5 BuildRequires: python3-sentry-sdk >= 1.5.4 BuildRequires: python3-sip -BuildRequires: python3-qt5 BuildRequires: xvfb-run # /SECTION @@ -74,6 +73,19 @@ find . -type f -name "*\.py" -exec sed -i 's/^#!\/usr\/bin\/env python3/#!\/usr\/bin\/python3/' {} \; find . -type f -name "*\.py" -exec sed -i 's/^#!\/usr\/bin\/env python/#!\/usr\/bin\/python3/' {} \; +# Relax strict requirements +sed -i -r 's/==/>=/g' requirements.txt +sed -i -r 's/sentry-sdk.*//g' requirements.txt +sed -i -r '/setuptools/d' requirements.txt +# Lower psutil>=5.8.0 +sed -i -r 's/psutil>=5.9.4/psutil>=5.8.0/' requirements.txt +sed -i -r 's/distro>=1.7.*/distro>=1.6.0/' requirements.txt +sed -i -r 's/jsonschema>=4.17.3/jsonschema>=3.2.0/' requirements.txt +# Disable update alerts +sed -i 's/"check_for_update": True,/"check_for_update": False,/' gns3/settings.py +# Disable anonymous data collection +sed -i 's/"send_stats": True,/"send_stats": False,/' gns3/settings.py + %build %if 0%{?suse_version} > 1315 %python3_build @@ -110,7 +122,7 @@ %files %license LICENSE -%doc AUTHORS README.rst +%doc AUTHORS README.md %{_bindir}/gns3 %{python3_sitelib}/gns3* %{_datadir}/icons/hicolor/* ++++++ gns3-gui-2.2.31.tar.gz -> gns3-gui-2.2.37.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gns3-gui-2.2.31/.github/workflows/codeql.yml new/gns3-gui-2.2.37/.github/workflows/codeql.yml --- old/gns3-gui-2.2.31/.github/workflows/codeql.yml 1970-01-01 01:00:00.000000000 +0100 +++ new/gns3-gui-2.2.37/.github/workflows/codeql.yml 2023-01-25 08:06:12.000000000 +0100 @@ -0,0 +1,76 @@ +# For most projects, this workflow file will not need changing; you simply need +# to commit it to your repository. +# +# You may wish to alter this file to override the set of languages analyzed, +# or to provide custom queries or build logic. +# +# ******** NOTE ******** +# We have attempted to detect the languages in your repository. Please check +# the `language` matrix defined below to confirm you have the correct set of +# supported CodeQL languages. +# +name: "CodeQL" + +on: + push: + branches: [ "master" ] + pull_request: + # The branches below must be a subset of the branches above + branches: [ "master" ] + schedule: + - cron: '27 6 * * 2' + +jobs: + analyze: + name: Analyze + runs-on: ubuntu-latest + permissions: + actions: read + contents: read + security-events: write + + strategy: + fail-fast: false + matrix: + language: [ 'python' ] + # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ] + # Use only 'java' to analyze code written in Java, Kotlin or both + # Use only 'javascript' to analyze code written in JavaScript, TypeScript or both + # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + # Initializes the CodeQL tools for scanning. + - name: Initialize CodeQL + uses: github/codeql-action/init@v2 + with: + languages: ${{ matrix.language }} + # If you wish to specify custom queries, you can do so here or in a config file. + # By default, queries listed here will override any specified in a config file. + # Prefix the list here with "+" to use these queries and those in the config file. + + # Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs + # queries: security-extended,security-and-quality + + + # Autobuild attempts to build any compiled languages (C/C++, C#, Go, or Java). + # If this step fails, then you should remove it and run the build manually (see below) + - name: Autobuild + uses: github/codeql-action/autobuild@v2 + + # â¹ï¸ Command-line programs to run using the OS shell. + # ð See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun + + # If the Autobuild fails above, remove it and uncomment the following three lines. + # modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance. + + # - run: | + # echo "Run, Build Application using script" + # ./location_of_script_within_repo/buildscript.sh + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v2 + with: + category: "/language:${{matrix.language}}" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gns3-gui-2.2.31/.gitignore new/gns3-gui-2.2.37/.gitignore --- old/gns3-gui-2.2.31/.gitignore 2022-02-26 08:52:17.000000000 +0100 +++ new/gns3-gui-2.2.37/.gitignore 2023-01-25 08:06:12.000000000 +0100 @@ -63,3 +63,4 @@ # Virtualenv env +venv diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gns3-gui-2.2.31/.whitesource new/gns3-gui-2.2.37/.whitesource --- old/gns3-gui-2.2.31/.whitesource 2022-02-26 08:52:17.000000000 +0100 +++ new/gns3-gui-2.2.37/.whitesource 2023-01-25 08:06:12.000000000 +0100 @@ -2,7 +2,8 @@ "scanSettings": { "configMode": "AUTO", "configExternalURL": "", - "projectToken" : "" + "projectToken" : "", + "baseBranches": ["master", "2.2", "3.0"] }, "checkRunSettings": { "vulnerableCheckRunConclusionLevel": "failure" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gns3-gui-2.2.31/CHANGELOG new/gns3-gui-2.2.37/CHANGELOG --- old/gns3-gui-2.2.31/CHANGELOG 2022-02-26 08:52:17.000000000 +0100 +++ new/gns3-gui-2.2.37/CHANGELOG 2023-01-25 08:06:12.000000000 +0100 @@ -1,5 +1,61 @@ # Change Log +## 2.2.37 25/01/2023 + +* Upgrade to PyQt5 v5.15.7 +* Changed Windows Terminal telnet console profile from OS X to windows ref: issue #3193 + +## 2.2.36 04/01/2023 + +* Add Trusted Platform Module (TPM) support for Qemu VMs +* Add "on_close" setting to appliance schema. Fixes https://github.com/GNS3/gns3-server/issues/2148 +* Add default 'ide' disk interface when manually creating Qemu VM template. Fixes #3360 +* Fix zoom factor is multiplied when loading projects. Fixes #3408 +* Remove deprecated PuTTY option in preferences. Ref https://github.com/GNS3/gns3-gui/discussions/3415 + + +## 2.2.35.1 10/11/2022 + +* Re-release Web-Ui v2.2.35 + +## 2.2.35 08/11/2022 + +* Fix "variables": [] in project file leads to unlimited increase of empty name/value pairs in GUI. Fixes #3397 +* Make version PEP 440 compliant +* Support for Python 3.11 +* Upgrade PyQt to 5.15.7 and pywin32 to v305 +* Allow for more dependency versions at patch level +* Replace deprecated distro.linux_distribution() call +* Add a fix for the CVE-2007-4559 + +## 2.2.34 28/08/2022 + +* Upgrade dev dependencies +* Implement new option (Delete All) to contextual menu in "Console" dock. Fixes #3325 +* Fix 2560x1440 resolution for Docker container + +## 2.2.33.1 21/06/2022 + +* Match GNS3 server version + +## 2.2.33 20/06/2022 + +* Upgrade sentry-sdk and psutil +* Check that node names for Qemu and Docker are valid +* Backport reset all console connections. Fixes #2072 +* Add more video resolutions to Docker containers using VNC. Fixes #3329 +* Add python_requires=">=3.4" in setup.py. Fixes #3326 +* Only allow post release corrective versions of GUI and server to interact +* Allow minor versions of GUI and server to interact +* Update VirtViewer path. Fixes #3334 + +## 2.2.32 27/04/2022 + +* Use public DSNs for Sentry +* Fix exception when doubleclick on NAT node. Fixes #3312 +* Fix "Apply" button in the "Preferences" dialog stays gray when templates/nodes are opened by double-click. Fixes #3307 +* Add 'reset docks' in the view menu. Ref #3317 + ## 2.2.31 26/02/2022 * Install setuptools v59.6.0 when using Python 3.6 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gns3-gui-2.2.31/MANIFEST.in new/gns3-gui-2.2.37/MANIFEST.in --- old/gns3-gui-2.2.31/MANIFEST.in 2022-02-26 08:52:17.000000000 +0100 +++ new/gns3-gui-2.2.37/MANIFEST.in 2023-01-25 08:06:12.000000000 +0100 @@ -1,4 +1,4 @@ -include README.rst +include README.md include AUTHORS include LICENSE include MANIFEST.in diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gns3-gui-2.2.31/README.md new/gns3-gui-2.2.37/README.md --- old/gns3-gui-2.2.31/README.md 1970-01-01 01:00:00.000000000 +0100 +++ new/gns3-gui-2.2.37/README.md 2023-01-25 08:06:12.000000000 +0100 @@ -0,0 +1,62 @@ +GNS3-gui +======== + +[](https://github.com/GNS3/gns3-gui/actions?query=workflow%3Atesting) + +[](https://pypi.python.org/pypi/gns3-gui) + +[](https://snyk.io/test/github/GNS3/gns3-gui) + +GNS3 GUI repository. + +Installation +------------ + +Please see <https://docs.gns3.com/> + +Software dependencies +--------------------- + +PyQt5 which is either part of the Linux distribution or installable from +PyPi. The other Python dependencies are automatically installed during +the GNS3 GUI installation and are listed +[here](https://github.com/GNS3/gns3-gui/blob/master/requirements.txt) + +For connecting to nodes using Telnet, a Telnet client is required. On +Linux that's a terminal emulator like xterm, gnome-terminal, konsole +plus the telnet program. For connecting to nodes with a GUI, a VNC +client is required, optionally a SPICE client can be used for Qemu +nodes. + +For using packet captures within GNS3, Wireshark should be installed. +It's recommended, but if you don't need that functionality you can go +without it. + +Development +----------- + +If you want to update the interface, modify the .ui files using QT +tools. And: + +``` {.bash} +cd scripts +python build_pyqt.py +``` + +### Debug + +If you want to see the full logs in the internal shell you can type: + +``` {.bash} +debug 2 +``` + +Or start the app with --debug flag. + +Due to the fact PyQT intercept you can use a web debugger for inspecting +stuff: <https://github.com/Kozea/wdb> + +Security issues +--------------- + +Please contact us at <secur...@gns3.net> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gns3-gui-2.2.31/README.rst new/gns3-gui-2.2.37/README.rst --- old/gns3-gui-2.2.31/README.rst 2022-02-26 08:52:17.000000000 +0100 +++ new/gns3-gui-2.2.37/README.rst 1970-01-01 01:00:00.000000000 +0100 @@ -1,60 +0,0 @@ -GNS3-gui -======== - -.. image:: https://github.com/GNS3/gns3-gui/workflows/testing/badge.svg - :target: https://github.com/GNS3/gns3-gui/actions?query=workflow%3Atesting - -.. image:: https://img.shields.io/pypi/v/gns3-gui.svg - :target: https://pypi.python.org/pypi/gns3-gui - -.. image:: https://snyk.io/test/github/GNS3/gns3-gui/badge.svg - :target: https://snyk.io/test/github/GNS3/gns3-gui - - -GNS3 GUI repository. - -Installation ------------- - -Please see https://docs.gns3.com/ - -Software dependencies ---------------------- - -PyQt5 which is either part of the Linux distribution or installable from PyPi. The other Python dependencies are automatically installed during the GNS3 GUI installation and are listed `here <https://github.com/GNS3/gns3-gui/blob/master/requirements.txt>`_ - -For connecting to nodes using Telnet, a Telnet client is required. On Linux that's a terminal emulator like xterm, gnome-terminal, konsole plus the telnet program. For connecting to nodes with a GUI, a VNC client is required, optionally a SPICE client can be used for Qemu nodes. - -For using packet captures within GNS3, Wireshark should be installed. It's recommended, but if you don't need that functionality you can go without it. - -Development -------------- - -If you want to update the interface, modify the .ui files using QT tools. And: - -.. code:: bash - - cd scripts - python build_pyqt.py - -Debug -""""" - -If you want to see the full logs in the internal shell you can type: - -.. code:: bash - - debug 2 - - -Or start the app with --debug flag. - -Due to the fact PyQT intercept you can use a web debugger for inspecting stuff: -https://github.com/Kozea/wdb - -Security issues ----------------- - -Please contact us at secur...@gns3.net - - diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gns3-gui-2.2.31/SECURITY.md new/gns3-gui-2.2.37/SECURITY.md --- old/gns3-gui-2.2.31/SECURITY.md 1970-01-01 01:00:00.000000000 +0100 +++ new/gns3-gui-2.2.37/SECURITY.md 2023-01-25 08:06:12.000000000 +0100 @@ -0,0 +1,5 @@ +# Security Policy + +## Reporting a Vulnerability + +Please use GitHub's report a vulnerability feature. More information can be found in https://docs.github.com/en/code-security/security-advisories/guidance-on-reporting-and-writing/privately-reporting-a-security-vulnerability diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gns3-gui-2.2.31/appveyor.yml new/gns3-gui-2.2.37/appveyor.yml --- old/gns3-gui-2.2.31/appveyor.yml 2022-02-26 08:52:17.000000000 +0100 +++ new/gns3-gui-2.2.37/appveyor.yml 2023-01-25 08:06:12.000000000 +0100 @@ -1,15 +1,16 @@ version: '{build}-{branch}' -image: Visual Studio 2017 +image: Visual Studio 2022 platform: x64 environment: - PYTHON: "C:\\Python36-x64" + PYTHON: "C:\\Python37-x64" DISTUTILS_USE_SDK: "1" install: - cinst nmap + - "%PYTHON%\\python.exe -m pip install -U pip setuptools" # upgrade pip & setuptools first - "%PYTHON%\\python.exe -m pip install -r dev-requirements.txt" - "%PYTHON%\\python.exe -m pip install -r win-requirements.txt" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gns3-gui-2.2.31/dev-requirements.txt new/gns3-gui-2.2.37/dev-requirements.txt --- old/gns3-gui-2.2.31/dev-requirements.txt 2022-02-26 08:52:17.000000000 +0100 +++ new/gns3-gui-2.2.37/dev-requirements.txt 2023-01-25 08:06:12.000000000 +0100 @@ -1,5 +1,6 @@ -rrequirements.txt -pytest==6.2.4 -flake8==3.9.2 -pytest-timeout==1.4.2 +pytest==7.2.0; python_version >= '3.7' +pytest==7.0.1; python_version < '3.7' # v7.0.1 is the last version to support Python 3.6 +flake8==5.0.4 +pytest-timeout==2.1.0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gns3-gui-2.2.31/gns3/console_view.py new/gns3-gui-2.2.37/gns3/console_view.py --- old/gns3-gui-2.2.31/gns3/console_view.py 2022-02-26 08:52:17.000000000 +0100 +++ new/gns3-gui-2.2.37/gns3/console_view.py 2023-01-25 08:06:12.000000000 +0100 @@ -22,7 +22,7 @@ import datetime import platform -from .qt import QtCore +from .qt import QtCore, QtWidgets from .topology import Topology from .version import __version__ from .console_cmd import ConsoleCmd @@ -109,6 +109,29 @@ self.stdout = sys.stdout self._topology = Topology.instance() + def contextMenuEvent(self, event): + """ + Handles all context menu events. + + :param event: QContextMenuEvent instance + """ + + menu = self.createStandardContextMenu() + delete_all_action = QtWidgets.QAction("Delete All", menu) + delete_all_action.triggered.connect(self._deleteAllActionSlot) + menu.addAction(delete_all_action) + menu.exec_(event.globalPos()); + + def _deleteAllActionSlot(self): + """ + Delete all action slot + """ + + self.clear() + self.write(self.prompt) + self.lines = [] + self._clearLine() + def _writeMessageSlot(self, message, level): """ Write a message in the console. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gns3-gui-2.2.31/gns3/crash_report.py new/gns3-gui-2.2.37/gns3/crash_report.py --- old/gns3-gui-2.2.31/gns3/crash_report.py 2022-02-26 08:52:17.000000000 +0100 +++ new/gns3-gui-2.2.37/gns3/crash_report.py 2023-01-25 08:06:12.000000000 +0100 @@ -51,7 +51,7 @@ Report crash to a third party service """ - DSN = "https://3af06592e0804039befaae43066b8fb8:73e4b6fd709e4622a60c86ac5ece6...@o19455.ingest.sentry.io/38506" + DSN = "https://433337b5780f4fe8abec8ee5e85c5...@o19455.ingest.sentry.io/38506" _instance = None def __init__(self): @@ -86,7 +86,7 @@ "os:release": platform.release(), "os:win_32": " ".join(platform.win32_ver()), "os:mac": "{} {}".format(platform.mac_ver()[0], platform.mac_ver()[2]), - "os:linux": " ".join(distro.linux_distribution()), + "os:linux": distro.name(pretty=True), } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gns3-gui-2.2.31/gns3/dialogs/edit_project_dialog.py new/gns3-gui-2.2.37/gns3/dialogs/edit_project_dialog.py --- old/gns3-gui-2.2.31/gns3/dialogs/edit_project_dialog.py 2022-02-26 08:52:17.000000000 +0100 +++ new/gns3-gui-2.2.37/gns3/dialogs/edit_project_dialog.py 2023-01-25 08:06:12.000000000 +0100 @@ -46,19 +46,11 @@ self.uiNewVarButton.clicked.connect(self.onAddNewVariable) self.uiGlobalVariablesGrid.addWidget(self.uiNewVarButton, 0, 3, QtCore.Qt.AlignRight) - self._variables = self.setUpVariables() + self._variables = self._project.variables() + if not self._variables: + self._variables = [{"name": "", "value": ""}] self.updateGlobalVariables() - def setUpVariables(self): - new_variable = {"name": "", "value": ""} - variables = self._project.variables() - - if variables is not None: - variables.append(new_variable) - else: - variables = [new_variable] - return variables - def updateGlobalVariables(self): while True: item = self.uiGlobalVariablesGrid.takeAt(1) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gns3-gui-2.2.31/gns3/dialogs/preferences_dialog.py new/gns3-gui-2.2.37/gns3/dialogs/preferences_dialog.py --- old/gns3-gui-2.2.31/gns3/dialogs/preferences_dialog.py 2022-02-26 08:52:17.000000000 +0100 +++ new/gns3-gui-2.2.37/gns3/dialogs/preferences_dialog.py 2023-01-25 08:06:12.000000000 +0100 @@ -131,6 +131,7 @@ QtWidgets.QLineEdit: "textChanged", QtWidgets.QPlainTextEdit: "textChanged", # QtWidgets.QTreeWidget: "itemChanged", + QtWidgets.QTreeWidget: "itemDoubleClicked", QtWidgets.QComboBox: "currentIndexChanged", QtWidgets.QSpinBox: "valueChanged", QtWidgets.QAbstractButton: "pressed" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gns3-gui-2.2.31/gns3/graphics_view.py new/gns3-gui-2.2.37/gns3/graphics_view.py --- old/gns3-gui-2.2.31/gns3/graphics_view.py 2022-02-26 08:52:17.000000000 +0100 +++ new/gns3-gui-2.2.37/gns3/graphics_view.py 2023-01-25 08:06:12.000000000 +0100 @@ -121,8 +121,6 @@ def setZoom(self, zoom): """ Sets zoom of the Graphics View - :param zoom: - :return: """ if zoom: factor = zoom / 100. @@ -193,6 +191,9 @@ # clear all objects on the scene self.scene().clear() + # reset zoom / scale + self.resetTransform() + def _loadSettings(self): """ @@ -659,7 +660,7 @@ if not self._adding_link: if isinstance(item, NodeItem) and item.node().initialized(): item.setSelected(True) - if item.node().status() == Node.stopped or item.node().consoleType() == "none": + if item.node().status() == Node.stopped or item.node().consoleType() == "none" or item.node().consoleType() is None: self.configureSlot() return else: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gns3-gui-2.2.31/gns3/http_client.py new/gns3-gui-2.2.37/gns3/http_client.py --- old/gns3-gui-2.2.31/gns3/http_client.py 2022-02-26 08:52:17.000000000 +0100 +++ new/gns3-gui-2.2.37/gns3/http_client.py 2023-01-25 08:06:12.000000000 +0100 @@ -404,17 +404,12 @@ self._query_waiting_connections = [] return - if params["version"].split("-")[0] != __version__.split("-")[0]: + if params["version"].split("+")[0] != __version__.split("+")[0]: msg = "Client version {} is not the same as server (controller) version {}".format(__version__, params["version"]) - # Stable release - if __version_info__[3] == 0: - log.error(msg) - for request, callback in self._query_waiting_connections: - if callback is not None: - callback({"message": msg}, error=True, server=server) - return - # We don't allow different major version to interact even with dev build - elif parse_version(__version__)[:2] != parse_version(params["version"])[:2]: + # We don't allow different versions to interact even with dev build + # (excepting post release corrections e.g 2.2.32.1, occassionally done when fixing a packaging problem) + # TODO: we should probably follow this standard starting with v3.0: https://semver.org/ + if parse_version(__version__)[:3] != parse_version(params["version"])[:3]: log.error(msg) for request, callback in self._query_waiting_connections: if callback is not None: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gns3-gui-2.2.31/gns3/main.py new/gns3-gui-2.2.37/gns3/main.py --- old/gns3-gui-2.2.31/gns3/main.py 2022-02-26 08:52:17.000000000 +0100 +++ new/gns3-gui-2.2.37/gns3/main.py 2023-01-25 08:06:12.000000000 +0100 @@ -220,10 +220,14 @@ if not options.debug: try: # hide the console + # win32console.AllocConsole() console_window = win32console.GetConsoleWindow() - win32gui.ShowWindow(console_window, win32con.SW_HIDE) + if console_window: + win32gui.ShowWindow(console_window, win32con.SW_HIDE) + else: + log.warning("Could not get the console window") except win32console.error as e: - print("warning: could not allocate console: {}".format(e)) + log.warning("Could not allocate console: {}".format(e)) local_config = LocalConfig.instance() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gns3-gui-2.2.31/gns3/main_window.py new/gns3-gui-2.2.37/gns3/main_window.py --- old/gns3-gui-2.2.31/gns3/main_window.py 2022-02-26 08:52:17.000000000 +0100 +++ new/gns3-gui-2.2.37/gns3/main_window.py 2023-01-25 08:06:12.000000000 +0100 @@ -234,6 +234,7 @@ self.uiShowGridAction.triggered.connect(self._showGridActionSlot) self.uiSnapToGridAction.triggered.connect(self._snapToGridActionSlot) self.uiLockAllAction.triggered.connect(self._lockActionSlot) + self.uiResetDocksAction.triggered.connect(self._resetDocksSlot) # tool menu connections self.uiWebUIAction.triggered.connect(self._openWebInterfaceActionSlot) @@ -245,6 +246,7 @@ self.uiReloadAllAction.triggered.connect(self._reloadAllActionSlot) self.uiAuxConsoleAllAction.triggered.connect(self._auxConsoleAllActionSlot) self.uiConsoleAllAction.triggered.connect(self._consoleAllActionSlot) + self.uiResetConsoleAllAction.triggered.connect(self._consoleResetAllActionSlot) # device menu is contextual and is build on-the-fly self.uiDeviceMenu.aboutToShow.connect(self._deviceMenuActionSlot) @@ -366,6 +368,16 @@ item.updateNode() item.update() + def _resetDocksSlot(self): + """ + Reset the dock widgets. + """ + + self.uiTopologySummaryDockWidget.setFloating(False) + self.uiComputeSummaryDockWidget.setFloating(False) + self.uiConsoleDockWidget.setFloating(False) + self.uiNodesDockWidget.setFloating(False) + def analyticsClient(self): """ Return the analytics client @@ -859,6 +871,15 @@ if project is not None: project.reload_all_nodes() + def _consoleResetAllActionSlot(self): + """ + Slot called when reset all console connections. + """ + + project = Topology.instance().project() + if project is not None: + project.reset_console_all_nodes() + def _deviceMenuActionSlot(self): """ Slot to contextually show the device menu. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gns3-gui-2.2.31/gns3/modules/docker/docker_vm.py new/gns3-gui-2.2.37/gns3/modules/docker/docker_vm.py --- old/gns3-gui-2.2.31/gns3/modules/docker/docker_vm.py 2022-02-26 08:52:17.000000000 +0100 +++ new/gns3-gui-2.2.37/gns3/modules/docker/docker_vm.py 2023-01-25 08:06:12.000000000 +0100 @@ -117,6 +117,18 @@ return DockerVMConfigurationPage @staticmethod + def validateHostname(hostname): + """ + Checks if the hostname is valid. + + :param hostname: hostname to check + + :returns: boolean + """ + + return DockerVM.isValidRfc1123Hostname(hostname) + + @staticmethod def defaultSymbol(): """ Returns the default symbol path for this node. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gns3-gui-2.2.31/gns3/modules/docker/ui/docker_vm_configuration_page.ui new/gns3-gui-2.2.37/gns3/modules/docker/ui/docker_vm_configuration_page.ui --- old/gns3-gui-2.2.31/gns3/modules/docker/ui/docker_vm_configuration_page.ui 2022-02-26 08:52:17.000000000 +0100 +++ new/gns3-gui-2.2.37/gns3/modules/docker/ui/docker_vm_configuration_page.ui 2023-01-25 08:06:12.000000000 +0100 @@ -177,10 +177,25 @@ <widget class="QComboBox" name="uiConsoleResolutionComboBox"> <item> <property name="text"> + <string>2560x1440</string> + </property> + </item> + <item> + <property name="text"> <string>1920x1080</string> </property> </item> <item> + <property name="text"> + <string>1680x1050</string> + </property> + </item> + <item> + <property name="text"> + <string>1440x900</string> + </property> + </item> + <item> <property name="text"> <string>1366x768</string> </property> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gns3-gui-2.2.31/gns3/modules/docker/ui/docker_vm_configuration_page_ui.py new/gns3-gui-2.2.37/gns3/modules/docker/ui/docker_vm_configuration_page_ui.py --- old/gns3-gui-2.2.31/gns3/modules/docker/ui/docker_vm_configuration_page_ui.py 2022-02-26 08:52:17.000000000 +0100 +++ new/gns3-gui-2.2.37/gns3/modules/docker/ui/docker_vm_configuration_page_ui.py 2023-01-25 08:06:12.000000000 +0100 @@ -2,12 +2,15 @@ # Form implementation generated from reading ui file '/home/grossmj/PycharmProjects/gns3-gui/gns3/modules/docker/ui/docker_vm_configuration_page.ui' # -# Created by: PyQt5 UI code generator 5.11.3 +# Created by: PyQt5 UI code generator 5.15.7 # -# WARNING! All changes made in this file will be lost! +# WARNING: Any manual changes made to this file will be lost when pyuic5 is +# run again. Do not edit this file unless you know what you are doing. + from PyQt5 import QtCore, QtGui, QtWidgets + class Ui_dockerVMConfigPageWidget(object): def setupUi(self, dockerVMConfigPageWidget): dockerVMConfigPageWidget.setObjectName("dockerVMConfigPageWidget") @@ -100,6 +103,9 @@ self.uiConsoleResolutionComboBox.addItem("") self.uiConsoleResolutionComboBox.addItem("") self.uiConsoleResolutionComboBox.addItem("") + self.uiConsoleResolutionComboBox.addItem("") + self.uiConsoleResolutionComboBox.addItem("") + self.uiConsoleResolutionComboBox.addItem("") self.gridLayout.addWidget(self.uiConsoleResolutionComboBox, 8, 1, 1, 1) self.label = QtWidgets.QLabel(self.tab) self.label.setObjectName("label") @@ -190,13 +196,16 @@ self.uiConsoleTypeComboBox.setItemText(4, _translate("dockerVMConfigPageWidget", "none")) self.uiConsoleAutoStartCheckBox.setText(_translate("dockerVMConfigPageWidget", "Auto start console")) self.uiConsoleResolutionLabel.setText(_translate("dockerVMConfigPageWidget", "VNC console resolution:")) - self.uiConsoleResolutionComboBox.setItemText(0, _translate("dockerVMConfigPageWidget", "1920x1080")) - self.uiConsoleResolutionComboBox.setItemText(1, _translate("dockerVMConfigPageWidget", "1366x768")) - self.uiConsoleResolutionComboBox.setItemText(2, _translate("dockerVMConfigPageWidget", "1280x1024")) - self.uiConsoleResolutionComboBox.setItemText(3, _translate("dockerVMConfigPageWidget", "1280x800")) - self.uiConsoleResolutionComboBox.setItemText(4, _translate("dockerVMConfigPageWidget", "1024x768")) - self.uiConsoleResolutionComboBox.setItemText(5, _translate("dockerVMConfigPageWidget", "800x600")) - self.uiConsoleResolutionComboBox.setItemText(6, _translate("dockerVMConfigPageWidget", "640x480")) + self.uiConsoleResolutionComboBox.setItemText(0, _translate("dockerVMConfigPageWidget", "2560x1440")) + self.uiConsoleResolutionComboBox.setItemText(1, _translate("dockerVMConfigPageWidget", "1920x1080")) + self.uiConsoleResolutionComboBox.setItemText(2, _translate("dockerVMConfigPageWidget", "1680x1050")) + self.uiConsoleResolutionComboBox.setItemText(3, _translate("dockerVMConfigPageWidget", "1440x900")) + self.uiConsoleResolutionComboBox.setItemText(4, _translate("dockerVMConfigPageWidget", "1366x768")) + self.uiConsoleResolutionComboBox.setItemText(5, _translate("dockerVMConfigPageWidget", "1280x1024")) + self.uiConsoleResolutionComboBox.setItemText(6, _translate("dockerVMConfigPageWidget", "1280x800")) + self.uiConsoleResolutionComboBox.setItemText(7, _translate("dockerVMConfigPageWidget", "1024x768")) + self.uiConsoleResolutionComboBox.setItemText(8, _translate("dockerVMConfigPageWidget", "800x600")) + self.uiConsoleResolutionComboBox.setItemText(9, _translate("dockerVMConfigPageWidget", "640x480")) self.label.setText(_translate("dockerVMConfigPageWidget", "HTTP port in the container:")) self.label_2.setText(_translate("dockerVMConfigPageWidget", "HTTP path:")) self.uiEnvironmentLabel.setText(_translate("dockerVMConfigPageWidget", "Environment variables:\n" @@ -217,4 +226,3 @@ self.uiExtraVolumeTextEdit.setPlaceholderText(_translate("dockerVMConfigPageWidget", "e.g. /etc/sysctl.d")) self.uiTabWidget.setTabText(self.uiTabWidget.indexOf(self.tab_2), _translate("dockerVMConfigPageWidget", "Advanced")) self.uiTabWidget.setTabText(self.uiTabWidget.indexOf(self.tab_3), _translate("dockerVMConfigPageWidget", "Usage")) - diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gns3-gui-2.2.31/gns3/modules/dynamips/nodes/router.py new/gns3-gui-2.2.37/gns3/modules/dynamips/nodes/router.py --- old/gns3-gui-2.2.31/gns3/modules/dynamips/nodes/router.py 2022-02-26 08:52:17.000000000 +0100 +++ new/gns3-gui-2.2.37/gns3/modules/dynamips/nodes/router.py 2023-01-25 08:06:12.000000000 +0100 @@ -310,8 +310,8 @@ # IOS names must start with a letter, end with a letter or digit, and # have as interior characters only letters, digits, and hyphens. - # They must be 63 characters or fewer. - if re.search(r"""^[\-\w]+$""", hostname) and len(hostname) <= 63: + # They must be 63 characters or fewer (ARPANET rules). + if re.search(r"""^(?!-|[0-9])[a-zA-Z0-9-]{1,63}(?<!-)$""", hostname): return True return False diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gns3-gui-2.2.31/gns3/modules/iou/iou_device.py new/gns3-gui-2.2.37/gns3/modules/iou/iou_device.py --- old/gns3-gui-2.2.31/gns3/modules/iou/iou_device.py 2022-02-26 08:52:17.000000000 +0100 +++ new/gns3-gui-2.2.37/gns3/modules/iou/iou_device.py 2023-01-25 08:06:12.000000000 +0100 @@ -131,8 +131,8 @@ # IOS names must start with a letter, end with a letter or digit, and # have as interior characters only letters, digits, and hyphens. - # They must be 63 characters or fewer. - if re.search(r"""^[\-\w]+$""", hostname) and len(hostname) <= 63: + # They must be 63 characters or fewer (ARPANET rules). + if re.search(r"""^(?!-|[0-9])[a-zA-Z0-9-]{1,63}(?<!-)$""", hostname): return True return False diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gns3-gui-2.2.31/gns3/modules/qemu/dialogs/qemu_vm_wizard.py new/gns3-gui-2.2.37/gns3/modules/qemu/dialogs/qemu_vm_wizard.py --- old/gns3-gui-2.2.31/gns3/modules/qemu/dialogs/qemu_vm_wizard.py 2022-02-26 08:52:17.000000000 +0100 +++ new/gns3-gui-2.2.37/gns3/modules/qemu/dialogs/qemu_vm_wizard.py 2023-01-25 08:06:12.000000000 +0100 @@ -157,6 +157,7 @@ if self.uiHdaDiskImageLineEdit.text().strip(): settings["hda_disk_image"] = self.uiHdaDiskImageLineEdit.text().strip() + settings["hda_disk_interface"] = "ide" if self.uiLegacyASACheckBox.isChecked(): # special settings for legacy ASA VM diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gns3-gui-2.2.31/gns3/modules/qemu/pages/qemu_vm_configuration_page.py new/gns3-gui-2.2.37/gns3/modules/qemu/pages/qemu_vm_configuration_page.py --- old/gns3-gui-2.2.31/gns3/modules/qemu/pages/qemu_vm_configuration_page.py 2022-02-26 08:52:17.000000000 +0100 +++ new/gns3-gui-2.2.37/gns3/modules/qemu/pages/qemu_vm_configuration_page.py 2023-01-25 08:06:12.000000000 +0100 @@ -578,6 +578,7 @@ self.uiProcessPriorityComboBox.setCurrentIndex(index) self.uiQemuOptionsLineEdit.setText(settings["options"]) self.uiUsageTextEdit.setPlainText(settings["usage"]) + self.uiTPMCheckBox.setChecked(settings["tpm"]) def saveSettings(self, settings, node=None, group=False): """ @@ -692,4 +693,5 @@ settings["process_priority"] = self.uiProcessPriorityComboBox.currentText().lower() settings["options"] = self.uiQemuOptionsLineEdit.text() settings["usage"] = self.uiUsageTextEdit.toPlainText() + settings["tpm"] = self.uiTPMCheckBox.isChecked() return settings diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gns3-gui-2.2.31/gns3/modules/qemu/qemu_vm.py new/gns3-gui-2.2.37/gns3/modules/qemu/qemu_vm.py --- old/gns3-gui-2.2.31/gns3/modules/qemu/qemu_vm.py 2022-02-26 08:52:17.000000000 +0100 +++ new/gns3-gui-2.2.37/gns3/modules/qemu/qemu_vm.py 2023-01-25 08:06:12.000000000 +0100 @@ -19,6 +19,8 @@ QEMU VM implementation. """ +import re + from gns3.node import Node from .settings import QEMU_VM_SETTINGS @@ -72,6 +74,7 @@ "mac_address": QEMU_VM_SETTINGS["mac_address"], "legacy_networking": QEMU_VM_SETTINGS["legacy_networking"], "replicate_network_connection_state": QEMU_VM_SETTINGS["replicate_network_connection_state"], + "tpm": QEMU_VM_SETTINGS["tpm"], "create_config_disk": QEMU_VM_SETTINGS["create_config_disk"], "platform": QEMU_VM_SETTINGS["platform"], "on_close": QEMU_VM_SETTINGS["on_close"], @@ -164,6 +167,18 @@ return QemuVMConfigurationPage @staticmethod + def validateHostname(hostname): + """ + Checks if the hostname is valid. + + :param hostname: hostname to check + + :returns: boolean + """ + + return QemuVM.isValidRfc1123Hostname(hostname) + + @staticmethod def defaultSymbol(): """ Returns the default symbol path for this node. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gns3-gui-2.2.31/gns3/modules/qemu/settings.py new/gns3-gui-2.2.37/gns3/modules/qemu/settings.py --- old/gns3-gui-2.2.31/gns3/modules/qemu/settings.py 2022-02-26 08:52:17.000000000 +0100 +++ new/gns3-gui-2.2.37/gns3/modules/qemu/settings.py 2023-01-25 08:06:12.000000000 +0100 @@ -57,6 +57,7 @@ "mac_address": "", "legacy_networking": False, "replicate_network_connection_state": True, + "tpm": False, "create_config_disk": False, "on_close": "power_off", "platform": "", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gns3-gui-2.2.31/gns3/modules/qemu/ui/qemu_vm_configuration_page.ui new/gns3-gui-2.2.37/gns3/modules/qemu/ui/qemu_vm_configuration_page.ui --- old/gns3-gui-2.2.31/gns3/modules/qemu/ui/qemu_vm_configuration_page.ui 2022-02-26 08:52:17.000000000 +0100 +++ new/gns3-gui-2.2.37/gns3/modules/qemu/ui/qemu_vm_configuration_page.ui 2023-01-25 08:06:12.000000000 +0100 @@ -6,8 +6,8 @@ <rect> <x>0</x> <y>0</y> - <width>941</width> - <height>939</height> + <width>478</width> + <height>550</height> </rect> </property> <property name="windowTitle"> @@ -890,7 +890,7 @@ </property> </widget> </item> - <item row="1" column="0" colspan="2"> + <item row="2" column="0" colspan="2"> <widget class="QCheckBox" name="uiBaseVMCheckBox"> <property name="enabled"> <bool>true</bool> @@ -900,10 +900,18 @@ </property> </widget> </item> + <item row="1" column="0" colspan="2"> + <widget class="QCheckBox" name="uiTPMCheckBox"> + <property name="text"> + <string>Enable Trusted Platform Module (TPM)</string> + </property> + </widget> + </item> </layout> <zorder>uiQemuOptionsLineEdit</zorder> <zorder>uiQemuOptionsLabel</zorder> <zorder>uiBaseVMCheckBox</zorder> + <zorder>uiTPMCheckBox</zorder> </widget> </item> <item> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gns3-gui-2.2.31/gns3/modules/qemu/ui/qemu_vm_configuration_page_ui.py new/gns3-gui-2.2.37/gns3/modules/qemu/ui/qemu_vm_configuration_page_ui.py --- old/gns3-gui-2.2.31/gns3/modules/qemu/ui/qemu_vm_configuration_page_ui.py 2022-02-26 08:52:17.000000000 +0100 +++ new/gns3-gui-2.2.37/gns3/modules/qemu/ui/qemu_vm_configuration_page_ui.py 2023-01-25 08:06:12.000000000 +0100 @@ -2,9 +2,10 @@ # Form implementation generated from reading ui file '/home/grossmj/PycharmProjects/gns3-gui/gns3/modules/qemu/ui/qemu_vm_configuration_page.ui' # -# Created by: PyQt5 UI code generator 5.13.2 +# Created by: PyQt5 UI code generator 5.15.6 # -# WARNING! All changes made in this file will be lost! +# WARNING: Any manual changes made to this file will be lost when pyuic5 is +# run again. Do not edit this file unless you know what you are doing. from PyQt5 import QtCore, QtGui, QtWidgets @@ -13,7 +14,7 @@ class Ui_QemuVMConfigPageWidget(object): def setupUi(self, QemuVMConfigPageWidget): QemuVMConfigPageWidget.setObjectName("QemuVMConfigPageWidget") - QemuVMConfigPageWidget.resize(941, 939) + QemuVMConfigPageWidget.resize(478, 550) self.verticalLayout = QtWidgets.QVBoxLayout(QemuVMConfigPageWidget) self.verticalLayout.setObjectName("verticalLayout") self.uiQemutabWidget = QtWidgets.QTabWidget(QemuVMConfigPageWidget) @@ -436,10 +437,14 @@ self.uiBaseVMCheckBox = QtWidgets.QCheckBox(self.groupBox) self.uiBaseVMCheckBox.setEnabled(True) self.uiBaseVMCheckBox.setObjectName("uiBaseVMCheckBox") - self.gridLayout_3.addWidget(self.uiBaseVMCheckBox, 1, 0, 1, 2) + self.gridLayout_3.addWidget(self.uiBaseVMCheckBox, 2, 0, 1, 2) + self.uiTPMCheckBox = QtWidgets.QCheckBox(self.groupBox) + self.uiTPMCheckBox.setObjectName("uiTPMCheckBox") + self.gridLayout_3.addWidget(self.uiTPMCheckBox, 1, 0, 1, 2) self.uiQemuOptionsLineEdit.raise_() self.uiQemuOptionsLabel.raise_() self.uiBaseVMCheckBox.raise_() + self.uiTPMCheckBox.raise_() self.verticalLayout_2.addWidget(self.groupBox) spacerItem4 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.verticalLayout_2.addItem(spacerItem4) @@ -556,5 +561,6 @@ "</ul>\n" "</body></html>")) self.uiBaseVMCheckBox.setText(_translate("QemuVMConfigPageWidget", "Use as a linked base VM")) + self.uiTPMCheckBox.setText(_translate("QemuVMConfigPageWidget", "Enable Trusted Platform Module (TPM)")) self.uiQemutabWidget.setTabText(self.uiQemutabWidget.indexOf(self.uiAdvancedSettingsTab), _translate("QemuVMConfigPageWidget", "Advanced")) self.uiQemutabWidget.setTabText(self.uiQemutabWidget.indexOf(self.uiUsageTab), _translate("QemuVMConfigPageWidget", "Usage")) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gns3-gui-2.2.31/gns3/node.py new/gns3-gui-2.2.37/gns3/node.py --- old/gns3-gui-2.2.31/gns3/node.py 2022-02-26 08:52:17.000000000 +0100 +++ new/gns3-gui-2.2.37/gns3/node.py 2023-01-25 08:06:12.000000000 +0100 @@ -17,6 +17,7 @@ import os import pathlib +import re from gns3.controller import Controller from gns3.ports.ethernet_port import EthernetPort @@ -650,10 +651,11 @@ if not console_type: console_type = self.consoleType() - if console_type == "vnc": - return general_settings["vnc_console_command"] - elif console_type.startswith("spice"): - return general_settings["spice_console_command"] + if console_type: + if console_type == "vnc": + return general_settings["vnc_console_command"] + elif console_type.startswith("spice"): + return general_settings["spice_console_command"] return general_settings["telnet_console_command"] def consoleType(self): @@ -864,6 +866,33 @@ log.error("Error while import config: {}".format(result["message"])) @staticmethod + def isValidRfc1123Hostname(hostname): + """ + Validate a hostname according to RFC 1123 + + Each element of the hostname must be from 1 to 63 characters long + and the entire hostname, including the dots, can be at most 253 + characters long. Valid characters for hostnames are ASCII + letters from a to z, the digits from 0 to 9, and the hyphen (-). + A hostname may not start with a hyphen. + """ + + if hostname[-1] == ".": + hostname = hostname[:-1] # strip exactly one dot from the right, if present + + if len(hostname) > 253: + return False + + labels = hostname.split(".") + + # the TLD must be not all-numeric + if re.match(r"[0-9]+$", labels[-1]): + return False + + allowed = re.compile(r"(?!-)[a-zA-Z0-9-]{1,63}(?<!-)$") + return all(allowed.match(label) for label in labels) + + @staticmethod def onCloseOptions(): """ Returns the on close options. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gns3-gui-2.2.31/gns3/project.py new/gns3-gui-2.2.37/gns3/project.py --- old/gns3-gui-2.2.31/gns3/project.py 2022-02-26 08:52:17.000000000 +0100 +++ new/gns3-gui-2.2.37/gns3/project.py 2023-01-25 08:06:12.000000000 +0100 @@ -365,6 +365,15 @@ Controller.instance().post("/projects/{project_id}/nodes/reload".format(project_id=self._id), None, body={}, timeout=None) + def reset_console_all_nodes(self): + """Reset console for all nodes belonging to this project""" + + # Don't do anything if the project doesn't exist on the server + if self._id is None: + return + + Controller.instance().post("/projects/{project_id}/nodes/console/reset".format(project_id=self._id), None, body={}, timeout=None) + def get(self, path, callback, **kwargs): """ HTTP GET on the remote server diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gns3-gui-2.2.31/gns3/registry/appliance.py new/gns3-gui-2.2.37/gns3/registry/appliance.py --- old/gns3-gui-2.2.31/gns3/registry/appliance.py 2022-02-26 08:52:17.000000000 +0100 +++ new/gns3-gui-2.2.37/gns3/registry/appliance.py 2023-01-25 08:06:12.000000000 +0100 @@ -59,7 +59,7 @@ """ if "registry_version" not in self._appliance: raise ApplianceError("Invalid appliance configuration please report the issue on https://github.com/GNS3/gns3-registry") - if self._appliance["registry_version"] > 6: + if self._appliance["registry_version"] > 7: raise ApplianceError("Please update GNS3 in order to install this appliance") with open(get_resource(os.path.join("schemas", "appliance.json"))) as f: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gns3-gui-2.2.31/gns3/schemas/appliance.json new/gns3-gui-2.2.37/gns3/schemas/appliance.json --- old/gns3-gui-2.2.31/gns3/schemas/appliance.json 2022-02-26 08:52:17.000000000 +0100 +++ new/gns3-gui-2.2.37/gns3/schemas/appliance.json 2023-01-25 08:06:12.000000000 +0100 @@ -350,6 +350,14 @@ "maximum": 100, "title": "Throttle the CPU" }, + "tpm": { + "type": "boolean", + "title": "Enable the Trusted Platform Module (TPM)" + }, + "on_close": { + "title": "Action to execute on the VM is closed", + "enum": ["power_off", "shutdown_signal", "save_vm_state"] + }, "process_priority": { "title": "Process priority for QEMU", "enum": ["realtime", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gns3-gui-2.2.31/gns3/settings.py new/gns3-gui-2.2.37/gns3/settings.py --- old/gns3-gui-2.2.31/gns3/settings.py 2022-02-26 08:52:17.000000000 +0100 +++ new/gns3-gui-2.2.37/gns3/settings.py 2023-01-25 08:06:12.000000000 +0100 @@ -56,7 +56,6 @@ program_files_x86 = program_files = os.environ["PROGRAMFILES"] PRECONFIGURED_TELNET_CONSOLE_COMMANDS = {'Putty (normal standalone version)': 'putty_standalone.exe -telnet %h %p -loghost "%d"', - 'Putty (custom deprecated version)': 'putty.exe -telnet %h %p -wt "%d" -gns3 5 -skin 4', 'MobaXterm': r'"{}\Mobatek\MobaXterm Personal Edition\MobaXterm.exe" -newtab "telnet %h %p"'.format(program_files_x86), 'Royal TS V3': r'{}\code4ward.net\Royal TS V3\RTS3App.exe /connectadhoc:%h /adhoctype:terminal /p:IsTelnetConnection="true" /p:ConnectionType="telnet;Telnet Connection" /p:Port="%p" /p:Name="%d"'.format(program_files), 'Royal TS V5': r'"{}\Royal TS V5\RoyalTS.exe" /protocol:terminal /using:adhoc /uri:"%h" /property:Port="%p" /property:IsTelnetConnection="true" /property:Name="%d"'.format(program_files_x86), @@ -65,6 +64,7 @@ 'SecureCRT (personal profile)': r'"{}\AppData\Local\VanDyke Software\SecureCRT\SecureCRT.exe" /T /N "%d" /TELNET %h %p'.format(userprofile), 'TeraTerm Pro': r'"{}\teraterm\ttermpro.exe" /W="%d" /M="ttstart.macro" /T=1 %h %p'.format(program_files_x86), 'Telnet': 'telnet %h %p', + 'Windows Terminal': 'wt.exe -w 1 new-tab --title %d telnet %h %p', 'Xshell 4': r'"{}\NetSarang\Xshell 4\xshell.exe" -url telnet://%h:%p'.format(program_files_x86), 'Xshell 5': r'"{}\NetSarang\Xshell 5\xshell.exe" -url telnet://%h:%p -newtab %d'.format(program_files_x86), 'ZOC 6': r'"{}\ZOC6\zoc.exe" "/TELNET:%h:%p" /TABBED "/TITLE:%d"'.format(program_files_x86)} @@ -141,7 +141,6 @@ r""" -e 'end tell'""", 'Royal TSX': "open 'rtsx://telnet%3A%2F%2F%h:%p'", 'SecureCRT': '/Applications/SecureCRT.app/Contents/MacOS/SecureCRT /N "%d" /T /TELNET %h %p', - 'Windows Terminal': 'wt.exe -w 1 new-tab --title %d telnet %h %p', 'ZOC 6': '/Applications/zoc6.app/Contents/MacOS/zoc6 "/TELNET:%h:%p" /TABBED "/TITLE:%d"', 'ZOC 7': '/Applications/zoc7.app/Contents/MacOS/zoc7 "/TELNET:%h:%p" /TABBED "/TITLE:%d"', 'ZOC 8': '/Applications/zoc8.app/Contents/MacOS/zoc8 "/TELNET:%h:%p" /TABBED "/TITLE:%d"' @@ -213,7 +212,7 @@ if sys.platform.startswith("win"): # Windows PRECONFIGURED_SPICE_CONSOLE_COMMANDS = { - 'Remote Viewer': r'"{}\VirtViewer v7.0-256\bin\remote-viewer.exe" spice://%h:%p'.format(program_files), + 'Remote Viewer': r'"{}\VirtViewer v11.0-256\bin\remote-viewer.exe" spice://%h:%p'.format(program_files), } # default Windows SPICE console command diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gns3-gui-2.2.31/gns3/ui/main_window.ui new/gns3-gui-2.2.37/gns3/ui/main_window.ui --- old/gns3-gui-2.2.31/gns3/ui/main_window.ui 2022-02-26 08:52:17.000000000 +0100 +++ new/gns3-gui-2.2.37/gns3/ui/main_window.ui 2023-01-25 08:06:12.000000000 +0100 @@ -10,7 +10,7 @@ <x>0</x> <y>0</y> <width>986</width> - <height>716</height> + <height>719</height> </rect> </property> <property name="contextMenuPolicy"> @@ -38,7 +38,16 @@ </property> <widget class="QWidget" name="uiCentralWidget"> <layout class="QGridLayout"> - <property name="margin"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> <number>0</number> </property> <property name="spacing"> @@ -62,7 +71,7 @@ <x>0</x> <y>0</y> <width>986</width> - <height>42</height> + <height>22</height> </rect> </property> <widget class="QMenu" name="uiEditMenu"> @@ -129,6 +138,7 @@ <addaction name="uiShowPortNamesAction"/> <addaction name="uiLockAllAction"/> <addaction name="separator"/> + <addaction name="uiResetDocksAction"/> <addaction name="uiDocksMenu"/> </widget> <widget class="QMenu" name="uiControlMenu"> @@ -141,6 +151,7 @@ <addaction name="uiReloadAllAction"/> <addaction name="uiAuxConsoleAllAction"/> <addaction name="uiConsoleAllAction"/> + <addaction name="uiResetConsoleAllAction"/> </widget> <widget class="QMenu" name="uiAnnotateMenu"> <property name="title"> @@ -228,7 +239,16 @@ <property name="spacing"> <number>0</number> </property> - <property name="margin"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> <number>0</number> </property> <item> @@ -372,7 +392,16 @@ <property name="spacing"> <number>0</number> </property> - <property name="margin"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> <number>0</number> </property> <item> @@ -438,7 +467,16 @@ </sizepolicy> </property> <layout class="QGridLayout"> - <property name="margin"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> <number>0</number> </property> <property name="spacing"> @@ -482,7 +520,16 @@ </attribute> <widget class="QWidget" name="dockWidgetContents"> <layout class="QGridLayout" name="gridLayout"> - <property name="margin"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> <number>0</number> </property> <property name="spacing"> @@ -1243,6 +1290,16 @@ <string>New template</string> </property> </action> + <action name="uiResetDocksAction"> + <property name="text"> + <string>Reset docks</string> + </property> + </action> + <action name="uiResetConsoleAllAction"> + <property name="text"> + <string>Reset all console connections</string> + </property> + </action> </widget> <customwidgets> <customwidget> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gns3-gui-2.2.31/gns3/ui/main_window_ui.py new/gns3-gui-2.2.37/gns3/ui/main_window_ui.py --- old/gns3-gui-2.2.31/gns3/ui/main_window_ui.py 2022-02-26 08:52:17.000000000 +0100 +++ new/gns3-gui-2.2.37/gns3/ui/main_window_ui.py 2023-01-25 08:06:12.000000000 +0100 @@ -2,7 +2,7 @@ # Form implementation generated from reading ui file '/home/grossmj/PycharmProjects/gns3-gui/gns3/ui/main_window.ui' # -# Created by: PyQt5 UI code generator 5.13.2 +# Created by: PyQt5 UI code generator 5.14.1 # # WARNING! All changes made in this file will be lost! @@ -48,7 +48,7 @@ self.gridlayout.addWidget(self.uiGraphicsView, 0, 0, 1, 1) MainWindow.setCentralWidget(self.uiCentralWidget) self.uiMenuBar = QtWidgets.QMenuBar(MainWindow) - self.uiMenuBar.setGeometry(QtCore.QRect(0, 0, 986, 42)) + self.uiMenuBar.setGeometry(QtCore.QRect(0, 0, 986, 22)) self.uiMenuBar.setObjectName("uiMenuBar") self.uiEditMenu = QtWidgets.QMenu(self.uiMenuBar) self.uiEditMenu.setObjectName("uiEditMenu") @@ -448,6 +448,13 @@ self.uiNewTemplateAction = QtWidgets.QAction(MainWindow) self.uiNewTemplateAction.setIcon(icon) self.uiNewTemplateAction.setObjectName("uiNewTemplateAction") + self.uiResetDocksAction = QtWidgets.QAction(MainWindow) + self.uiResetDocksAction.setObjectName("uiResetDocksAction") + self.uiEditReadmeAction = QtWidgets.QAction(MainWindow) + self.uiEditReadmeAction.setIcon(icon31) + self.uiEditReadmeAction.setObjectName("uiEditReadmeAction") + self.uiResetConsoleAllAction = QtWidgets.QAction(MainWindow) + self.uiResetConsoleAllAction.setObjectName("uiResetConsoleAllAction") self.uiEditMenu.addAction(self.uiSelectAllAction) self.uiEditMenu.addAction(self.uiSelectNoneAction) self.uiEditMenu.addSeparator() @@ -488,6 +495,7 @@ self.uiViewMenu.addAction(self.uiShowPortNamesAction) self.uiViewMenu.addAction(self.uiLockAllAction) self.uiViewMenu.addSeparator() + self.uiViewMenu.addAction(self.uiResetDocksAction) self.uiViewMenu.addAction(self.uiDocksMenu.menuAction()) self.uiControlMenu.addAction(self.uiStartAllAction) self.uiControlMenu.addAction(self.uiSuspendAllAction) @@ -495,6 +503,7 @@ self.uiControlMenu.addAction(self.uiReloadAllAction) self.uiControlMenu.addAction(self.uiAuxConsoleAllAction) self.uiControlMenu.addAction(self.uiConsoleAllAction) + self.uiControlMenu.addAction(self.uiResetConsoleAllAction) self.uiAnnotateMenu.addAction(self.uiAddNoteAction) self.uiAnnotateMenu.addAction(self.uiInsertImageAction) self.uiAnnotateMenu.addAction(self.uiDrawRectangleAction) @@ -711,6 +720,10 @@ self.uiLockAllAction.setToolTip(_translate("MainWindow", "Lock or unlock all items")) self.uiWebUIAction.setText(_translate("MainWindow", "Web UI - beta")) self.uiNewTemplateAction.setText(_translate("MainWindow", "New template")) + self.uiResetDocksAction.setText(_translate("MainWindow", "Reset docks")) + self.uiEditReadmeAction.setText(_translate("MainWindow", "Edit readme")) + self.uiEditReadmeAction.setToolTip(_translate("MainWindow", "Edit readme")) + self.uiResetConsoleAllAction.setText(_translate("MainWindow", "Reset all console connections")) from ..compute_summary_view import ComputeSummaryView from ..console_view import ConsoleView from ..graphics_view import GraphicsView diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gns3-gui-2.2.31/gns3/update_manager.py new/gns3-gui-2.2.37/gns3/update_manager.py --- old/gns3-gui-2.2.31/gns3/update_manager.py 2022-02-26 08:52:17.000000000 +0100 +++ new/gns3-gui-2.2.37/gns3/update_manager.py 2023-01-25 08:06:12.000000000 +0100 @@ -239,4 +239,22 @@ for member in members: # Path separator is always / even on windows member.name = member.name.split("/", 1)[1] - tar.extractall(path=self._package_directory, members=members) + def is_within_directory(directory, target): + + abs_directory = os.path.abspath(directory) + abs_target = os.path.abspath(target) + + prefix = os.path.commonprefix([abs_directory, abs_target]) + + return prefix == abs_directory + + def safe_extract(tar, path=".", members=None, *, numeric_owner=False): + + for member in tar.getmembers(): + member_path = os.path.join(path, member.name) + if not is_within_directory(path, member_path): + raise Exception("Attempted Path Traversal in Tar File") + + tar.extractall(path, members, numeric_owner=numeric_owner) + + safe_extract(tar, path=self._package_directory, members=members) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gns3-gui-2.2.31/gns3/version.py new/gns3-gui-2.2.37/gns3/version.py --- old/gns3-gui-2.2.31/gns3/version.py 2022-02-26 08:52:17.000000000 +0100 +++ new/gns3-gui-2.2.37/gns3/version.py 2023-01-25 08:06:12.000000000 +0100 @@ -23,8 +23,8 @@ # or negative for a release candidate or beta (after the base version # number has been incremented) -__version__ = "2.2.31" -__version_info__ = (2, 2, 31, 0) +__version__ = "2.2.37" +__version_info__ = (2, 2, 37, 0) if "dev" in __version__: try: @@ -32,6 +32,6 @@ import subprocess if os.path.exists(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", ".git")): r = subprocess.check_output(["git", "rev-parse", "--short", "HEAD"]).decode().strip("\n") - __version__ += "-" + r + __version__ += "+" + r except Exception as e: print(e) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gns3-gui-2.2.31/mac-requirements.txt new/gns3-gui-2.2.37/mac-requirements.txt --- old/gns3-gui-2.2.31/mac-requirements.txt 2022-02-26 08:52:17.000000000 +0100 +++ new/gns3-gui-2.2.37/mac-requirements.txt 2023-01-25 08:06:12.000000000 +0100 @@ -1,3 +1,3 @@ -rrequirements.txt -PyQt5==5.15.6 +PyQt5==5.15.7 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gns3-gui-2.2.31/requirements.txt new/gns3-gui-2.2.37/requirements.txt --- old/gns3-gui-2.2.31/requirements.txt 2022-02-26 08:52:17.000000000 +0100 +++ new/gns3-gui-2.2.37/requirements.txt 2023-01-25 08:06:12.000000000 +0100 @@ -1,6 +1,7 @@ -jsonschema==3.2.0 -sentry-sdk==1.5.4 -psutil==5.9.0 -distro==1.6.0 -setuptools==60.6.0; python_version >= '3.7' # don't upgrade because of https://github.com/pypa/setuptools/issues/3084 -setuptools==59.6.0; python_version < '3.7' # v59.7.0 dropped support for Python 3.6 \ No newline at end of file +jsonschema>=4.17.3,<4.18; python_version >= '3.7' +jsonschema==3.2.0; python_version < '3.7' # v3.2.0 is the last version to support Python 3.6 +sentry-sdk==1.12.1,<1.13 +psutil==5.9.4 +distro>=1.7.0 +setuptools>=60.8.1; python_version >= '3.7' +setuptools==59.6.0; python_version < '3.7' # v59.6.0 is the last version to support Python 3.6 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gns3-gui-2.2.31/setup.py new/gns3-gui-2.2.37/setup.py --- old/gns3-gui-2.2.31/setup.py 2022-02-26 08:52:17.000000000 +0100 +++ new/gns3-gui-2.2.37/setup.py 2023-01-25 08:06:12.000000000 +0100 @@ -66,7 +66,7 @@ author="Jeremy Grossmann", author_email="package-maintai...@gns3.net", description="GNS3 graphical interface for the GNS3 server.", - long_description=open("README.rst", "r").read(), + long_description=open("README.md", "r").read(), install_requires=open("requirements.txt", "r").read().splitlines(), entry_points={ "gui_scripts": [ @@ -78,6 +78,7 @@ include_package_data=True, package_data={"gns3": ["configs/*.txt", "schemas/*.json"]}, platforms="any", + python_requires=">=3.4", setup_requires=["setuptools>=17.1"], classifiers=[ "Development Status :: 5 - Production/Stable", @@ -98,6 +99,7 @@ "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", "Programming Language :: Python :: Implementation :: CPython", ], ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gns3-gui-2.2.31/tests/test_http_client.py new/gns3-gui-2.2.37/tests/test_http_client.py --- old/gns3-gui-2.2.31/tests/test_http_client.py 2022-02-26 08:52:17.000000000 +0100 +++ new/gns3-gui-2.2.37/tests/test_http_client.py 2023-01-25 08:06:12.000000000 +0100 @@ -311,7 +311,7 @@ def test_callbackConnect_minor_version_invalid(http_client): - new_version = "{}.{}.{}".format(__version_info__[0], __version_info__[1], __version_info__[2] + 1) + new_version = "{}.{}.{}".format(__version_info__[0], __version_info__[1] + 1, 0) params = { "local": True, "version": new_version @@ -319,14 +319,23 @@ mock = unittest.mock.MagicMock() http_client._query_waiting_connections.append((None, mock)) - # Stable release - if __version_info__[3] == 0: - http_client._callbackConnect(params) - assert http_client._connected is False - mock.assert_called_with({"message": "Client version {} is not the same as server (controller) version {}".format(__version__, new_version)}, error=True, server=None) - else: - http_client._callbackConnect(params) - assert http_client._connected is True + http_client._callbackConnect(params) + assert http_client._connected is False + mock.assert_called_with({"message": "Client version {} is not the same as server (controller) version {}".format(__version__, new_version)}, error=True, server=None) + + +def test_callbackConnect_patch_version(http_client): + + new_version = "{}.{}.{}.{}".format(__version_info__[0], __version_info__[1], __version_info__[2], 42) + params = { + "local": True, + "version": new_version + } + mock = unittest.mock.MagicMock() + + http_client._query_waiting_connections.append((None, mock)) + http_client._callbackConnect(params) + assert http_client._connected is True def test_callbackConnect_non_gns3_server(http_client): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gns3-gui-2.2.31/win-requirements.txt new/gns3-gui-2.2.37/win-requirements.txt --- old/gns3-gui-2.2.31/win-requirements.txt 2022-02-26 08:52:17.000000000 +0100 +++ new/gns3-gui-2.2.37/win-requirements.txt 2023-01-25 08:06:12.000000000 +0100 @@ -1,4 +1,4 @@ -rrequirements.txt -PyQt5==5.15.6 # pyup: ignore -pywin32==303 # pyup: ignore +PyQt5==5.15.7 # pyup: ignore +pywin32==305 # pyup: ignore