This is an automated email from the git hooks/post-receive script. x2go pushed a change to branch master in repository x2gobroker. from d6a2764 Permit `asyncio` to create event loops on any thread (required on multithreaded WSGI servers using Python 3). new 8394b45 debian/po: Adopt debconf translations from Debian. new 0b51f52 Make remote agent's SSH HostKey policy configurable globally, backend-wise and per session profile. Fallback to RejectPolicy by default. (See Debian bug #922314). The 2 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Summary of changes: debian/po/POTFILES.in | 1 + debian/po/de.mo | Bin 0 -> 4087 bytes debian/po/de.po | 162 ++++++++++++++++++++++++++++++++++ debian/po/fr.po | 162 ++++++++++++++++++++++++++++++++++ debian/po/nl.po | 161 +++++++++++++++++++++++++++++++++ debian/po/pt.po | 161 +++++++++++++++++++++++++++++++++ debian/po/templates.pot | 137 ++++++++++++++++++++++++++++ etc/x2gobroker.conf | 31 +++++++ x2gobroker/agent.py | 9 +- x2gobroker/brokers/base_broker.py | 42 ++++++++- x2gobroker/defaults.py | 1 + x2gobroker/tests/test_broker_agent.py | 44 ++++++++- 12 files changed, 905 insertions(+), 6 deletions(-) create mode 100644 debian/po/POTFILES.in create mode 100644 debian/po/de.mo create mode 100644 debian/po/de.po create mode 100644 debian/po/fr.po create mode 100644 debian/po/nl.po create mode 100644 debian/po/pt.po create mode 100644 debian/po/templates.pot -- Alioth's /home/x2go-admin/maintenancescripts/git/hooks/post-receive-email on /srv/git/code.x2go.org/x2gobroker.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch master in repository x2gobroker. commit 8394b455729393c35764290fa8db0eaf667763ca Author: Mike Gabriel <mike.gabriel@das-netzwerkteam.de> Date: Sat Apr 20 16:53:47 2019 +0200 debian/po: Adopt debconf translations from Debian. --- debian/po/POTFILES.in | 1 + debian/po/de.mo | Bin 0 -> 4087 bytes debian/po/de.po | 162 ++++++++++++++++++++++++++++++++++++++++++++++++ debian/po/fr.po | 162 ++++++++++++++++++++++++++++++++++++++++++++++++ debian/po/nl.po | 161 +++++++++++++++++++++++++++++++++++++++++++++++ debian/po/pt.po | 161 +++++++++++++++++++++++++++++++++++++++++++++++ debian/po/templates.pot | 137 ++++++++++++++++++++++++++++++++++++++++ 7 files changed, 784 insertions(+) diff --git a/debian/po/POTFILES.in b/debian/po/POTFILES.in new file mode 100644 index 0000000..bb748d2 --- /dev/null +++ b/debian/po/POTFILES.in @@ -0,0 +1 @@ +[type: gettext/rfc822deb] x2gobroker-ssh.templates diff --git a/debian/po/de.mo b/debian/po/de.mo new file mode 100644 index 0000000..d588643 Binary files /dev/null and b/debian/po/de.mo differ diff --git a/debian/po/de.po b/debian/po/de.po new file mode 100644 index 0000000..3e3ab02 --- /dev/null +++ b/debian/po/de.po @@ -0,0 +1,162 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the x2gobroker package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: x2gobroker\n" +"Report-Msgid-Bugs-To: x2gobroker@packages.debian.org\n" +"POT-Creation-Date: 2019-02-03 11:44+0100\n" +"PO-Revision-Date: 2019-02-03 11:48+0100\n" +"Last-Translator: \n" +"Language-Team: \n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" + +#. Type: boolean +#. Description +#: ../x2gobroker-ssh.templates:2001 +msgid "Create group for X2Go Broker SSH access now?" +msgstr "Gruppe für X2Go Broker SSH jetzt erstellen?" + +#. Type: boolean +#. Description +#: ../x2gobroker-ssh.templates:2001 +msgid "" +"In X2Go Session Broker, SSH-based broker access is controlled via the broker " +"users' membership in a dedicated group (default: x2gobroker-users)." +msgstr "" +"Für den X2Go Sitzungs-Broker wird der SSH-basierte Zugriff durch " +"Gruppenmitgliedschaft aller Nutzer in einer dedizierten Gruppe gesteuert " +"(Standard: x2gobroker-users)." + +#. Type: boolean +#. Description +#: ../x2gobroker-ssh.templates:2001 +msgid "" +"If this group is not created now, you will be asked to assign this privilege " +"to an existing group instead." +msgstr "" +"Wenn diese Gruppe jetzt nicht erstellt wird, werden sie aufgefordert werden, " +"einer existierenden Gruppe dieses Recht stattdessen zuzuweisen. " + +#. Type: boolean +#. Description +#: ../x2gobroker-ssh.templates:3001 +msgid "Use an already existing group for X2Go Session Broker SSH access?" +msgstr "" +"Eine bereits existierende Gruppe für den SSH-Zugriff auf den X2Go Sitzungs-" +"Broker verwenden?" + +#. Type: boolean +#. Description +#: ../x2gobroker-ssh.templates:3001 +msgid "" +"If there already exists a group (e.g. in an LDAP database) that you would " +"like to use for controlling X2Go Session Broker SSH access with, then you " +"can specify this group name with the next step." +msgstr "" +"Falls es bereits eine Gruppe gibt (z.Bsp. in einer LDAP-Datenbank), die sie " +"für die Zugriffskontrolle auf den X2Go Sitzungs-Broker verwenden möchten, " +"dann können Sie den Namen dieser Gruppe im nächsten Schritt angeben." + +#. Type: boolean +#. Description +#: ../x2gobroker-ssh.templates:4001 +msgid "Set up X2Go Session Broker SSH access later?" +msgstr "Zugriff auf den X2Go Sitzungs-Broker später konfigurieren?" + +#. Type: boolean +#. Description +#: ../x2gobroker-ssh.templates:4001 +msgid "" +"Without an existing group for X2Go Session Broker SSH access, the SSH broker " +"will not be usable by users. You have to set up things later, either " +"manually or via this configuration helper." +msgstr "" +"Ohne Angabe einer existierenden Gruppe für den X2Go Sitzungs-Broker SSH-" +"Zugriff, kann der X2Go Broker SSH von Benutzern nicht verwendet werden. Sie " +"müssen den Zugriff später einrichten, entweder manuell oder über diesen " +"Konfigurationsweg." + +#. Type: boolean +#. Description +#: ../x2gobroker-ssh.templates:4001 +msgid "" +"A manual setup is only recommended, if you really know what have to do for " +"this." +msgstr "" +"Eine manuelle Einrichtung wird nur empfohlen, wenn Sie wirklich wissen, was " +"hierfür zu tun ist." + +#. Type: boolean +#. Description +#: ../x2gobroker-ssh.templates:4001 +msgid "Alternatively, the setup questions can be asked once more..." +msgstr "Alternativ können diese Einrichtungsfragen später wiederholt werden..." + +#. Type: string +#. Description +#: ../x2gobroker-ssh.templates:5001 +msgid "X2Go Session Broker SSH access group:" +msgstr "Gruppe für X2Go Sitzungs-Broker SSH-Zugriff:" + +#. Type: string +#. Description +#: ../x2gobroker-ssh.templates:5001 +msgid "" +"Please specify the group name for users with full X2Go Session Broker access " +"via SSH now." +msgstr "" +"Bitte geben Sie jetzt den Namen der Gruppe an, deren Mitglieder " +"vollständigen X2Go Sitzungs-Broker Zugriff via SSH haben sollen." + +#. Type: boolean +#. Description +#: ../x2gobroker-ssh.templates:6001 +msgid "" +"Delete the group that was formerly used for X2Go Session Broker SSH access?" +msgstr "" +"Die Gruppe löschen, die bislang benutzt wurde, um den X2Go Sitzungs-Broker " +"Zugriff via SSH zu steuern?" + +#. Type: boolean +#. Description +#: ../x2gobroker-ssh.templates:6001 +msgid "The group for X2Go Session Broker SSH access has been modified." +msgstr "Die Gruppe für X2Go Sitzungs-Broker SSH-Zugriff wurde geändert." + +#. Type: boolean +#. Description +#: ../x2gobroker-ssh.templates:6001 +msgid "" +"Please specify whether the old group should be deleted from your system. If " +"unsure, keep the formerly used group and manually investigate later." +msgstr "" +"Bitte geben Sie an, ob die alte Gruppe von Ihrem System gelöscht werden " +"soll. Falls unsicher, behalten Sie die bisher verwendete Gruppe und " +"überprüfen dies später von Hand." + +#. Type: note +#. Description +#: ../x2gobroker-ssh.templates:7001 +msgid "The specified group does not exist on the system" +msgstr "Die angegeben Gruppe existiert nicht auf dem System" + +#. Type: note +#. Description +#: ../x2gobroker-ssh.templates:7001 +msgid "Please enter a group name that is currently available on your system." +msgstr "" +"Bitte geben Sie den Namen einer Gruppe an, die aktuell auf Ihrem System " +"verfügbar ist." + +#. Type: note +#. Description +#: ../x2gobroker-ssh.templates:7001 +msgid "Please, try again!" +msgstr "Bitte noch einmal versuchen!" diff --git a/debian/po/fr.po b/debian/po/fr.po new file mode 100644 index 0000000..ae744a6 --- /dev/null +++ b/debian/po/fr.po @@ -0,0 +1,162 @@ +# Translation of x2gobroker debconf templates to French +# Copyright (C) 2019 Debian French l10n Team <debian-l10n-french@lists.debian.org> +# This file is distributed under the same license as the x2gobroker package. +# +# Jean-Pierre Giraud <jean-pierregiraud@neuf.fr>, 2019. +msgid "" +msgstr "" +"Project-Id-Version: x2gobroker\n" +"Report-Msgid-Bugs-To: x2gobroker@packages.debian.org\n" +"POT-Creation-Date: 2019-02-03 11:44+0100\n" +"PO-Revision-Date: 2019-02-14 11:27+0100\n" +"Last-Translator: Jean-Pierre Giraud <jean-pierregiraud@neuf.fr>\n" +"Language-Team: French <debian-l10n-french@lists.debian.org>\n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Lokalize 2.0\n" + +#. Type: boolean +#. Description +#: ../x2gobroker-ssh.templates:2001 +msgid "Create group for X2Go Broker SSH access now?" +msgstr "Faut-il créer maintenant un groupe pour l'accès SSH au courtier X2Go ?" + +#. Type: boolean +#. Description +#: ../x2gobroker-ssh.templates:2001 +msgid "" +"In X2Go Session Broker, SSH-based broker access is controlled via the broker " +"users' membership in a dedicated group (default: x2gobroker-users)." +msgstr "" +"Avec le courtier de session X2Go, l'accès au courtier basé sur SSH est " +"contrôlé grâce à l'appartenance des utilisateurs du courtier à un groupe " +"dédié (par défaut : x2gobroker-users)." + +#. Type: boolean +#. Description +#: ../x2gobroker-ssh.templates:2001 +msgid "" +"If this group is not created now, you will be asked to assign this privilege " +"to an existing group instead." +msgstr "" +"Si ce groupe n'est pas déjà créé, il vous sera demandé d'assigner à la place " +"ces droits à un groupe déjà existant." + +#. Type: boolean +#. Description +#: ../x2gobroker-ssh.templates:3001 +msgid "Use an already existing group for X2Go Session Broker SSH access?" +msgstr "" +"Faut-il utiliser un groupe déjà existant pour l'accès SSH au courtier de " +"session X2Go ?" + +#. Type: boolean +#. Description +#: ../x2gobroker-ssh.templates:3001 +msgid "" +"If there already exists a group (e.g. in an LDAP database) that you would " +"like to use for controlling X2Go Session Broker SSH access with, then you " +"can specify this group name with the next step." +msgstr "" +"S'il existe déjà un groupe, (par exemple dans une base de données LDAP) que " +"vous souhaiteriez utiliser pour contrôler l'accès SSH au courtier de session " +"X2Go, vous pouvez spécifier ce nom de groupe dans l'étape suivante." + +#. Type: boolean +#. Description +#: ../x2gobroker-ssh.templates:4001 +msgid "Set up X2Go Session Broker SSH access later?" +msgstr "" +"Voulez-vous configurer plus tard l'accès SSH au courtier de session X2Go ?" + +#. Type: boolean +#. Description +#: ../x2gobroker-ssh.templates:4001 +msgid "" +"Without an existing group for X2Go Session Broker SSH access, the SSH broker " +"will not be usable by users. You have to set up things later, either " +"manually or via this configuration helper." +msgstr "" +"S'il n'existe pas de groupe pour l'accès SSH au courtier de session X2Go, le " +"courtier SSH ne sera pas accessible aux utilisateurs. Vous devrez configurer " +"cela plus tard soit manuellement, soit avec cet assistant de configuration." + +#. Type: boolean +#. Description +#: ../x2gobroker-ssh.templates:4001 +msgid "" +"A manual setup is only recommended, if you really know what have to do for " +"this." +msgstr "" +"La configuration manuelle n'est recommandée que si vous savez vraiment ce " +"qu'il faut faire pour la mener à bien." + +#. Type: boolean +#. Description +#: ../x2gobroker-ssh.templates:4001 +msgid "Alternatively, the setup questions can be asked once more..." +msgstr "Sinon, les questions de configuration peuvent être à nouveau " +"posées..." + +#. Type: string +#. Description +#: ../x2gobroker-ssh.templates:5001 +msgid "X2Go Session Broker SSH access group:" +msgstr "Groupe d'accès SSH au courtier de session X2Go :" + +#. Type: string +#. Description +#: ../x2gobroker-ssh.templates:5001 +msgid "" +"Please specify the group name for users with full X2Go Session Broker access " +"via SSH now." +msgstr "" +"Veuillez spécifier maintenant le nom du groupe pour les utilisateurs dotés " +"d'un droit d'accès au courtier de session X2Go à travers SSH." + +#. Type: boolean +#. Description +#: ../x2gobroker-ssh.templates:6001 +msgid "" +"Delete the group that was formerly used for X2Go Session Broker SSH access?" +msgstr "Faut-il supprimer le groupe précédemment utilisé pour l'accès SSH au " +"courtier de session X2Go ?" + +#. Type: boolean +#. Description +#: ../x2gobroker-ssh.templates:6001 +msgid "The group for X2Go Session Broker SSH access has been modified." +msgstr "Le groupe d'accès SSH au courtier de session X2Go a été modifié." + +#. Type: boolean +#. Description +#: ../x2gobroker-ssh.templates:6001 +msgid "" +"Please specify whether the old group should be deleted from your system. If " +"unsure, keep the formerly used group and manually investigate later." +msgstr "" +"Veuillez préciser si l'ancien groupe doit être supprimé sur la machine. Si " +"vous n'êtes pas sûr, conservez le groupe anciennement utilisé et poursuivez " +"votre recherche plus tard." + +#. Type: note +#. Description +#: ../x2gobroker-ssh.templates:7001 +msgid "The specified group does not exist on the system" +msgstr "Le groupe spécifié n'existe pas sur la machine." + +#. Type: note +#. Description +#: ../x2gobroker-ssh.templates:7001 +msgid "Please enter a group name that is currently available on your system." +msgstr "" +"Veuillez entrer un nom de groupe existant réellement sur votre machine." + +#. Type: note +#. Description +#: ../x2gobroker-ssh.templates:7001 +msgid "Please, try again!" +msgstr "Veuillez essayer à nouveau !" diff --git a/debian/po/nl.po b/debian/po/nl.po new file mode 100644 index 0000000..c4b37b6 --- /dev/null +++ b/debian/po/nl.po @@ -0,0 +1,161 @@ +# Dutch translation of x2gobroker debconf templates. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the x2gobroker package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# Frans Spiesschaert <Frans.Spiesschaert@yucom.be>, 2019. +# +msgid "" +msgstr "" +"Project-Id-Version: x2gobroker_0.0.4.0-2\n" +"Report-Msgid-Bugs-To: x2gobroker@packages.debian.org\n" +"POT-Creation-Date: 2019-02-03 11:44+0100\n" +"PO-Revision-Date: 2019-02-07 16:35+0100\n" +"Last-Translator: Frans Spiesschaert <Frans.Spiesschaert@yucom.be>\n" +"Language-Team: Debian Dutch l10n Team <debian-l10n-dutch@lists.debian.org>\n" +"Language: nl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Gtranslator 2.91.7\n" + +#. Type: boolean +#. Description +#: ../x2gobroker-ssh.templates:2001 +msgid "Create group for X2Go Broker SSH access now?" +msgstr "Nu een groep aanmaken voor SSH-toegang tot X2Go Broker?" + +#. Type: boolean +#. Description +#: ../x2gobroker-ssh.templates:2001 +msgid "" +"In X2Go Session Broker, SSH-based broker access is controlled via the broker " +"users' membership in a dedicated group (default: x2gobroker-users)." +msgstr "" +"In X2Go Session Broker wordt SSH-gebaseerde toegang tot broker (het " +"makelaarsmechanisme) geregeld door het feit dat broker-gebruikers lid zijn " +"van een gereserveerde groep (standaard: x2gobroker-users)." + +#. Type: boolean +#. Description +#: ../x2gobroker-ssh.templates:2001 +msgid "" +"If this group is not created now, you will be asked to assign this privilege " +"to an existing group instead." +msgstr "" +"Indien deze groep nu niet aangemaakt wordt, zal u gevraagd worden om in de " +"plaats daarvan dit recht te koppelen aan een bestaande groep." + +#. Type: boolean +#. Description +#: ../x2gobroker-ssh.templates:3001 +msgid "Use an already existing group for X2Go Session Broker SSH access?" +msgstr "" +"Een reeds bestaande groep gebruiken voor SSH-toegang tot X2Go Session Broker?" + +#. Type: boolean +#. Description +#: ../x2gobroker-ssh.templates:3001 +msgid "" +"If there already exists a group (e.g. in an LDAP database) that you would " +"like to use for controlling X2Go Session Broker SSH access with, then you " +"can specify this group name with the next step." +msgstr "" +"Indien er reeds een groep bestaat (bijv. in een LDAP-database) welke u wilt " +"gebruiken voor de controle van SSH-toegang tot X2Go Session Broker, dan kunt " +"u de naam van die groep opgeven bij de volgende stap." + +#. Type: boolean +#. Description +#: ../x2gobroker-ssh.templates:4001 +msgid "Set up X2Go Session Broker SSH access later?" +msgstr "SSH-toegang tot X2Go Session Broker later instellen?" + +#. Type: boolean +#. Description +#: ../x2gobroker-ssh.templates:4001 +msgid "" +"Without an existing group for X2Go Session Broker SSH access, the SSH broker " +"will not be usable by users. You have to set up things later, either " +"manually or via this configuration helper." +msgstr "" +"Zonder een bestaande groep voor SSH-toegang tot X2Go Session Broker, zal de " +"SSH-broker (SSH-makelaar) niet bruikbaar zijn voor gebruikers. U zult later " +"de zaken moeten instellen, ofwel handmatig, ofwel via deze configuratiehulp." + +#. Type: boolean +#. Description +#: ../x2gobroker-ssh.templates:4001 +msgid "" +"A manual setup is only recommended, if you really know what have to do for " +"this." +msgstr "" +"Een handmatige configuratie wordt enkel aanbevolen indien u echt weet wat u " +"daarvoor dient te doen." + +#. Type: boolean +#. Description +#: ../x2gobroker-ssh.templates:4001 +msgid "Alternatively, the setup questions can be asked once more..." +msgstr "" +"In het andere geval kunnen de vragen in verband met de configuratie nogmaals " +"gesteld worden..." + +#. Type: string +#. Description +#: ../x2gobroker-ssh.templates:5001 +msgid "X2Go Session Broker SSH access group:" +msgstr "Groep voor SSH-toegang tot X2Go Session Broker:" + +#. Type: string +#. Description +#: ../x2gobroker-ssh.templates:5001 +msgid "" +"Please specify the group name for users with full X2Go Session Broker access " +"via SSH now." +msgstr "" +"Geef nu de naam op van de gebruikersgroep die via SSH volledige toegang " +"heeft tot X2Go Session Broker." + +#. Type: boolean +#. Description +#: ../x2gobroker-ssh.templates:6001 +msgid "" +"Delete the group that was formerly used for X2Go Session Broker SSH access?" +msgstr "" +"De groep die vroeger gebruikt werd voor SSH-toegang tot X2Go Session Broker, " +"verwijderen?" + +#. Type: boolean +#. Description +#: ../x2gobroker-ssh.templates:6001 +msgid "The group for X2Go Session Broker SSH access has been modified." +msgstr "De groep voor SSH-toegang tot X2Go Session Broker werd gewijzigd." + +#. Type: boolean +#. Description +#: ../x2gobroker-ssh.templates:6001 +msgid "" +"Please specify whether the old group should be deleted from your system. If " +"unsure, keep the formerly used group and manually investigate later." +msgstr "" +"Geef aan of de oude groep verwijderd moet worden van uw systeem. Indien u " +"twijfelt, behoud dan de vroeger gebruikte groep en onderzoek dit later zelf." + +#. Type: note +#. Description +#: ../x2gobroker-ssh.templates:7001 +msgid "The specified group does not exist on the system" +msgstr "De opgegeven groep bestaat niet op het systeem" + +#. Type: note +#. Description +#: ../x2gobroker-ssh.templates:7001 +msgid "Please enter a group name that is currently available on your system." +msgstr "Geef een naam op van een groep die momenteel bestaat op uw systeem." + +#. Type: note +#. Description +#: ../x2gobroker-ssh.templates:7001 +msgid "Please, try again!" +msgstr "Probeer nogmaals" diff --git a/debian/po/pt.po b/debian/po/pt.po new file mode 100644 index 0000000..2503ccd --- /dev/null +++ b/debian/po/pt.po @@ -0,0 +1,161 @@ +# Translation of x2gobroker's debconf messages to European Portuguese +# Copyright (C) 2019 THE x2gobroker'S COPYRIGHT HOLDER +# This file is distributed under the same license as the x2gobroker package. +# +# Américo Monteiro <a_monteiro@gmx.com>, 2019. +msgid "" +msgstr "" +"Project-Id-Version: x2gobroker 0.0.4.0-3\n" +"Report-Msgid-Bugs-To: x2gobroker@packages.debian.org\n" +"POT-Creation-Date: 2019-02-03 11:44+0100\n" +"PO-Revision-Date: 2019-02-17 18:12+0000\n" +"Last-Translator: Américo Monteiro <a_monteiro@gmx.com>\n" +"Language-Team: Portuguese <>\n" +"Language: pt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Lokalize 2.0\n" + +#. Type: boolean +#. Description +#: ../x2gobroker-ssh.templates:2001 +msgid "Create group for X2Go Broker SSH access now?" +msgstr "Criar agora o grupo para acesso X2Go Broker SSH?" + +#. Type: boolean +#. Description +#: ../x2gobroker-ssh.templates:2001 +msgid "" +"In X2Go Session Broker, SSH-based broker access is controlled via the broker " +"users' membership in a dedicated group (default: x2gobroker-users)." +msgstr "" +"No X2Go Session Broker, o acesso broker baseado em SSH é controlado via " +"associação de utilizadores do broker, num grupo dedicado (predefinição: " +"x2gobroker-users)." + +#. Type: boolean +#. Description +#: ../x2gobroker-ssh.templates:2001 +msgid "" +"If this group is not created now, you will be asked to assign this privilege " +"to an existing group instead." +msgstr "" +"Se este grupo não for criado agora, irá ser-lhe pedido para atribuir este " +"privilégio a um grupo existente." + +#. Type: boolean +#. Description +#: ../x2gobroker-ssh.templates:3001 +msgid "Use an already existing group for X2Go Session Broker SSH access?" +msgstr "Usar um grupo já existente para o acesso SSH a X2Go Session Broker?" + +#. Type: boolean +#. Description +#: ../x2gobroker-ssh.templates:3001 +msgid "" +"If there already exists a group (e.g. in an LDAP database) that you would " +"like to use for controlling X2Go Session Broker SSH access with, then you " +"can specify this group name with the next step." +msgstr "" +"Se já existir um grupo (ex. numa base de dados LDAP) que deseje usar para " +"controlar o acesso SSH do X2Go Session Broker, então você pode indicar " +"o nome deste grupo no próximo passo." + +#. Type: boolean +#. Description +#: ../x2gobroker-ssh.templates:4001 +msgid "Set up X2Go Session Broker SSH access later?" +msgstr "Configurar o acesso SSH do X2Go Session Broker mais tarde?" + +#. Type: boolean +#. Description +#: ../x2gobroker-ssh.templates:4001 +msgid "" +"Without an existing group for X2Go Session Broker SSH access, the SSH broker " +"will not be usable by users. You have to set up things later, either " +"manually or via this configuration helper." +msgstr "" +"Sem um grupo existente para acesso SSH a X2Go Session Broker, o SSH broker " +"não será utilizável pelos utilizadores. Você vai ter que configurar isto mais " +"tarde, seja manualmente ou via este ajudante de configuração." + +#. Type: boolean +#. Description +#: ../x2gobroker-ssh.templates:4001 +msgid "" +"A manual setup is only recommended, if you really know what have to do for " +"this." +msgstr "" +"Apenas é recomendada uma configuração manual, se você realmente souber " +"o que tem de fazer para isto." + +#. Type: boolean +#. Description +#: ../x2gobroker-ssh.templates:4001 +msgid "Alternatively, the setup questions can be asked once more..." +msgstr "" +"Em alternativa, as perguntas de configuração podem ser feitas de novo..." + +#. Type: string +#. Description +#: ../x2gobroker-ssh.templates:5001 +msgid "X2Go Session Broker SSH access group:" +msgstr "Grupo de acesso SSH a X2Go Session Broker:" + +#. Type: string +#. Description +#: ../x2gobroker-ssh.templates:5001 +msgid "" +"Please specify the group name for users with full X2Go Session Broker access " +"via SSH now." +msgstr "" +"Por favor especifique agora o nome do grupo com acesso total a X2Go Session " +"Broker via SSH." + +#. Type: boolean +#. Description +#: ../x2gobroker-ssh.templates:6001 +msgid "" +"Delete the group that was formerly used for X2Go Session Broker SSH access?" +msgstr "" +"Apagar o grupo que era usado anteriormente para acesso SSH a X2Go Session " +"Broker?" + +#. Type: boolean +#. Description +#: ../x2gobroker-ssh.templates:6001 +msgid "The group for X2Go Session Broker SSH access has been modified." +msgstr "O grupo para acesso SSH a X2Go Session Broker foi modificado." + +#. Type: boolean +#. Description +#: ../x2gobroker-ssh.templates:6001 +msgid "" +"Please specify whether the old group should be deleted from your system. If " +"unsure, keep the formerly used group and manually investigate later." +msgstr "" +"Por favor especifique se o grupo antigo deve ser removido do sistema. Em " +"caso de dúvidas, mantenha o grupo usado e investigue manualmente depois." + +#. Type: note +#. Description +#: ../x2gobroker-ssh.templates:7001 +msgid "The specified group does not exist on the system" +msgstr "O grupo especificado não existe no sistema." + +#. Type: note +#. Description +#: ../x2gobroker-ssh.templates:7001 +msgid "Please enter a group name that is currently available on your system." +msgstr "" +"Por favor insira um grupo que esteja actualmente disponível no seu sistema." + +#. Type: note +#. Description +#: ../x2gobroker-ssh.templates:7001 +msgid "Please, try again!" +msgstr "Por favor, tente novamente!" + + diff --git a/debian/po/templates.pot b/debian/po/templates.pot new file mode 100644 index 0000000..b768417 --- /dev/null +++ b/debian/po/templates.pot @@ -0,0 +1,137 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the x2gobroker package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: x2gobroker\n" +"Report-Msgid-Bugs-To: x2gobroker@packages.debian.org\n" +"POT-Creation-Date: 2019-02-03 11:44+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Type: boolean +#. Description +#: ../x2gobroker-ssh.templates:2001 +msgid "Create group for X2Go Broker SSH access now?" +msgstr "" + +#. Type: boolean +#. Description +#: ../x2gobroker-ssh.templates:2001 +msgid "" +"In X2Go Session Broker, SSH-based broker access is controlled via the broker " +"users' membership in a dedicated group (default: x2gobroker-users)." +msgstr "" + +#. Type: boolean +#. Description +#: ../x2gobroker-ssh.templates:2001 +msgid "" +"If this group is not created now, you will be asked to assign this privilege " +"to an existing group instead." +msgstr "" + +#. Type: boolean +#. Description +#: ../x2gobroker-ssh.templates:3001 +msgid "Use an already existing group for X2Go Session Broker SSH access?" +msgstr "" + +#. Type: boolean +#. Description +#: ../x2gobroker-ssh.templates:3001 +msgid "" +"If there already exists a group (e.g. in an LDAP database) that you would " +"like to use for controlling X2Go Session Broker SSH access with, then you " +"can specify this group name with the next step." +msgstr "" + +#. Type: boolean +#. Description +#: ../x2gobroker-ssh.templates:4001 +msgid "Set up X2Go Session Broker SSH access later?" +msgstr "" + +#. Type: boolean +#. Description +#: ../x2gobroker-ssh.templates:4001 +msgid "" +"Without an existing group for X2Go Session Broker SSH access, the SSH broker " +"will not be usable by users. You have to set up things later, either " +"manually or via this configuration helper." +msgstr "" + +#. Type: boolean +#. Description +#: ../x2gobroker-ssh.templates:4001 +msgid "" +"A manual setup is only recommended, if you really know what have to do for " +"this." +msgstr "" + +#. Type: boolean +#. Description +#: ../x2gobroker-ssh.templates:4001 +msgid "Alternatively, the setup questions can be asked once more..." +msgstr "" + +#. Type: string +#. Description +#: ../x2gobroker-ssh.templates:5001 +msgid "X2Go Session Broker SSH access group:" +msgstr "" + +#. Type: string +#. Description +#: ../x2gobroker-ssh.templates:5001 +msgid "" +"Please specify the group name for users with full X2Go Session Broker access " +"via SSH now." +msgstr "" + +#. Type: boolean +#. Description +#: ../x2gobroker-ssh.templates:6001 +msgid "" +"Delete the group that was formerly used for X2Go Session Broker SSH access?" +msgstr "" + +#. Type: boolean +#. Description +#: ../x2gobroker-ssh.templates:6001 +msgid "The group for X2Go Session Broker SSH access has been modified." +msgstr "" + +#. Type: boolean +#. Description +#: ../x2gobroker-ssh.templates:6001 +msgid "" +"Please specify whether the old group should be deleted from your system. If " +"unsure, keep the formerly used group and manually investigate later." +msgstr "" + +#. Type: note +#. Description +#: ../x2gobroker-ssh.templates:7001 +msgid "The specified group does not exist on the system" +msgstr "" + +#. Type: note +#. Description +#: ../x2gobroker-ssh.templates:7001 +msgid "Please enter a group name that is currently available on your system." +msgstr "" + +#. Type: note +#. Description +#: ../x2gobroker-ssh.templates:7001 +msgid "Please, try again!" +msgstr "" -- Alioth's /home/x2go-admin/maintenancescripts/git/hooks/post-receive-email on /srv/git/code.x2go.org/x2gobroker.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch master in repository x2gobroker. commit 0b51f522ebd1d8747a4f401f6cf274bfcb9ddccd Author: Mike Gabriel <mike.gabriel@das-netzwerkteam.de> Date: Sun Apr 21 15:21:23 2019 +0200 Make remote agent's SSH HostKey policy configurable globally, backend-wise and per session profile. Fallback to RejectPolicy by default. (See Debian bug #922314). --- etc/x2gobroker.conf | 31 ++++++++++++++++++++++++ x2gobroker/agent.py | 9 ++++++- x2gobroker/brokers/base_broker.py | 42 ++++++++++++++++++++++++++++++++- x2gobroker/defaults.py | 1 + x2gobroker/tests/test_broker_agent.py | 44 +++++++++++++++++++++++++++++++---- 5 files changed, 121 insertions(+), 6 deletions(-) diff --git a/etc/x2gobroker.conf b/etc/x2gobroker.conf index 44e86a4..d88faa6 100644 --- a/etc/x2gobroker.conf +++ b/etc/x2gobroker.conf @@ -242,6 +242,37 @@ # below value is the default. #default-agent-query-mode=NONE +# X2Go Broker's Host Key Policy (if agent query mode is 'SSH') +# +# If X2Go Broker's agent query mode is SSH, the system needs to handle +# X2Go Server side's SSH host keys in a secure and verifyable manner. +# +# The agent-hostkey-policy is the default policy to be used and can be +# either AutoAddPolicy, WarningPolicy, or RejectPolicy. The policy names +# match the corresponding class names in Paramiko SSH. +# +# IMPORTANT: As RejectPolicy is the only safe default, please be aware that +# on fresh X2Go Broker setups, SSH agent queries will always fail, until a +# properly maintained ~x2gobroker/.ssh/known_hosts file is in place. +# +# There are two simple ways to create this known_hosts file: +# +# (a) su - x2gobroker -c "ssh <x2goserver>" +# +# On the command line, you get prompted to confirm the remote +# X2Go server's Follow OpenSSH interactive dialog for accepting +# the remote host's host key. +# +# (b) x2gobroker-testagent --add-to-known-hosts --host <x2goserver> +# +# This command will populate the known_hosts file with the remote +# X2Go server's hostkey while trying to hail its X2Go Broker Agent +# The host key's fingerprint will be shown on stdout, but there will +# be no interactive confirmation. If unsure about this, use approach +# (a) given above. +# +#default-agent-hostkey-policy=RejectPolicy + # Probe SSH port of X2Go Servers (availability check) # # Just before offering an X2Go Server address to a broker client, the diff --git a/x2gobroker/agent.py b/x2gobroker/agent.py index b267277..3530323 100644 --- a/x2gobroker/agent.py +++ b/x2gobroker/agent.py @@ -195,8 +195,15 @@ def _call_remote_broker_agent(username, task, cmdline_args=[], remote_agent=None if remote_agent is None: logger_error.error('With the SSH agent-query-mode a remote agent host (hostname, hostaddr, port) has to be specified!') - elif 'host_key_policy' not in remote_agent: + elif 'host_key_policy' not in remote_agent or remote_agent['host_key_policy'] == 'WarningPolicy': remote_agent['host_key_policy'] = paramiko.WarningPolicy() + elif remote_agent['host_key_policy'] == 'RejectPolicy': + remote_agent['host_key_policy'] = paramiko.RejectPolicy() + elif remote_agent['host_key_policy'] == 'AutoAddPolicy': + remote_agent['host_key_policy'] = paramiko.AutoAddPolicy() + else: + logger_error.error('Invalid SSH HostKey Policy: "{policy}", falling back to "RejectPolicy"!'.format(policy=remote_agent['host_key_policy'])) + remote_agent['host_key_policy'] = paramiko.RejectPolicy() remote_hostaddr = None remote_hostname = None diff --git a/x2gobroker/brokers/base_broker.py b/x2gobroker/brokers/base_broker.py index 5b4303e..3de1426 100644 --- a/x2gobroker/brokers/base_broker.py +++ b/x2gobroker/brokers/base_broker.py @@ -562,6 +562,44 @@ class X2GoBroker(object): else: return _mode + def get_agent_hostkey_policy(self, profile_id): + """\ + Get the agent hostkey policy (either of 'RejectPolicy', + 'AutoAddPolicy' or 'WarningPolicy') that is configured for this + X2Go Session Broker instance. + + The returned policy names match the MissingHostkeyPolicy class + names as found in Python Paramiko. + + :returns: agent hostkey policy + :rtype: ``str`` + + """ + _default_agent_hostkey_policy = "RejectPolicy" + _backend_agent_hostkey_policy = "" + _agent_hostkey_policy = "" + + _profile = self.get_profile_broker(profile_id) + if _profile and 'broker-agent-hostkey-policy' in _profile and _profile['broker-agent-hostkey-policy']: + _agent_hostkey_policy = _profile['broker-agent-hostkey-policy'] + logger_broker.debug('base_broker.X2GoBroker.get_agent_hostkey_policy(): found broker-agent-hostkey-policy in session profile with ID {id}: {value}. This one has precendence over the default and the backend value.'.format(id=profile_id, value=_agent_hostkey_policy)) + + elif self.config.has_value('broker_{backend}'.format(backend=self.backend_name), 'agent-hostkey-policy') and self.config.get_value('broker_{backend}'.format(backend=self.backend_name), 'agent-hostkey-policy'): + _backend_agent_hostkey_policy = self.config.get_value('broker_{backend}'.format(backend=self.backend_name), 'agent-hostkey-policy') + logger_broker.debug('base_broker.X2GoBroker.get_agent_hostkey_policy(): found agent-hostkey-policy in backend config section »{backend}«: {value}. This one has precendence over the default value.'.format(backend=self.backend_name, value=_agent_hostkey_policy)) + + elif self.config.has_value('global', 'default-agent-hostkey-policy') and self.config.get_value('global', 'default-agent-hostkey-policy'): + _default_agent_hostkey_policy = self.config.get_value('global', 'default-agent-hostkey-policy') + logger_broker.debug('base_broker.X2GoBroker.get_agent_hostkey_policy(): found default-agent-hostkey-policy in global config section: {value}'.format(value=_default_agent_hostkey_policy)) + + _policy = _agent_hostkey_policy or _backend_agent_hostkey_policy or _default_agent_hostkey_policy + + if _policy not in ('AutoAddPolicy', 'RejectPolicy', 'WarningPolicy'): + logger_broker.warn('base_broker.X2GoBroker.get_agent_hostkey_policy(): given hostkey policy ({policy}) is invalid/unknown, falling back to default hostkey policy ({default_policy}).'.format(policy=_policy, default_policy=_default_agent_hostkey_policy)) + _policy = _default_agent_hostkey_policy + + return _policy + def get_session_autologin(self, profile_id): """\ Detect if the given profile is configured to try automatic session @@ -1096,7 +1134,9 @@ class X2GoBroker(object): remote_agent = { 'hostname': remote_agent_hostname, 'hostaddr': remote_agent_hostaddr, - 'port': remote_agent_port, } + 'port': remote_agent_port, + 'host_key_policy': self.get_agent_hostkey_policy(profile_id), + } try: if x2gobroker.agent.ping(remote_agent=remote_agent): diff --git a/x2gobroker/defaults.py b/x2gobroker/defaults.py index e10ccb0..8989688 100644 --- a/x2gobroker/defaults.py +++ b/x2gobroker/defaults.py @@ -243,6 +243,7 @@ X2GOBROKER_CONFIG_DEFAULTS = { 'default-authorized-keys': '%h/.x2go/authorized_keys', 'default-sshproxy-authorized-keys': '%h/.x2go/authorized_keys', 'default-agent-query-mode': 'NONE', + 'default-agent-hostkey-policy': 'RejectPolicy', 'default-portscan-x2goservers': True, 'default-use-load-checker': False, 'load-checker-intervals': 300, diff --git a/x2gobroker/tests/test_broker_agent.py b/x2gobroker/tests/test_broker_agent.py index 8d9e489..a7e4ee8 100644 --- a/x2gobroker/tests/test_broker_agent.py +++ b/x2gobroker/tests/test_broker_agent.py @@ -110,23 +110,39 @@ host = host1.mydomain, host2.yourdomain name = testprofile5 host = host1.mydomain (10.0.2.4), host2.mydomain (10.0.2.5) broker-agent-query-mode = SSH +broker-agent-hostkey-policy = WarningPolicy [testprofile6] name = testprofile6 host = host1.mydomain (10.0.2.4), host2.mydomain (10.0.2.5) sshport = 23467 broker-agent-query-mode = SSH +broker-agent-hostkey-policy = WarningPolicy [testprofile7] name = testprofile7 host = docker-vm-1 (docker-server:22001), docker-vm-2 (docker-server:22002) broker-agent-query-mode = SSH +broker-agent-hostkey-policy = WarningPolicy [testprofile8] name = testprofile8 host = docker-vm-0 (docker-server), docker-vm-1 (docker-server:22001), docker-vm-2 (docker-server:22002) sshport = 22000 broker-agent-query-mode = SSH +broker-agent-hostkey-policy = WarningPolicy + +[testprofile9] +name = testprofile9 +host = host1.mydomain (10.0.2.4) +broker-agent-query-mode = SSH +broker-agent-hostkey-policy = AutoAddPolicy + +[testprofile10] +name = testprofile10 +host = host1.mydomain (10.0.2.4) +broker-agent-query-mode = SSH +broker-agent-hostkey-policy = SomeUnkownPolicy """ tf = tempfile.NamedTemporaryFile(mode='w') @@ -207,7 +223,7 @@ broker-agent-query-mode = SSH i = 0 while i < 10: _remoteagent5 = inifile_backend.get_remote_agent('testprofile5') - self.assertTrue( _remoteagent5 == {'hostname': 'host1.mydomain', 'hostaddr': '10.0.2.4', 'port': 22, 'load_factors': {}, } or _remoteagent5 == {'hostname': 'host2.mydomain', 'hostaddr': '10.0.2.5', 'port': 22, 'load_factors': {}, } ) + self.assertTrue( _remoteagent5 == {'hostname': 'host1.mydomain', 'hostaddr': '10.0.2.4', 'port': 22, 'load_factors': {}, 'host_key_policy': 'WarningPolicy'} or _remoteagent5 == {'hostname': 'host2.mydomain', 'hostaddr': '10.0.2.5', 'port': 22, 'load_factors': {}, 'host_key_policy': 'WarningPolicy', } ) _session5 = inifile_backend.select_session('testprofile5', 'foo5N') self.assertTrue( _session5 == {'port': 22, 'server': '10.0.2.4', } or _session5 == {'port': 22, 'server': '10.0.2.5', } ) i += 1 @@ -221,7 +237,7 @@ broker-agent-query-mode = SSH self.assertTrue( _profile6['host'][0] in ('host1.mydomain', 'host2.mydomain') ) self.assertTrue( 'status' not in _profile6 ) _remoteagent6 = inifile_backend.get_remote_agent('testprofile6') - self.assertTrue( _remoteagent6 == {'hostname': 'host1.mydomain', 'hostaddr': '10.0.2.4', 'port': 23467, 'load_factors': {}, } or _remoteagent6 == {'hostname': 'host2.mydomain', 'hostaddr': '10.0.2.5', 'port': 23467, 'load_factors': {}, } ) + self.assertTrue( _remoteagent6 == {'hostname': 'host1.mydomain', 'hostaddr': '10.0.2.4', 'port': 23467, 'load_factors': {}, 'host_key_policy': 'WarningPolicy', } or _remoteagent6 == {'hostname': 'host2.mydomain', 'hostaddr': '10.0.2.5', 'port': 23467, 'load_factors': {}, 'host_key_policy': 'WarningPolicy', } ) _session6 = inifile_backend.select_session('testprofile6', 'foo6N') self.assertTrue( _session6 == {'port': 23467, 'server': '10.0.2.4', } or _session6 == {'port': 23467, 'server': '10.0.2.5', } ) @@ -233,7 +249,7 @@ broker-agent-query-mode = SSH i = 0 while i < 10: _remoteagent7 = inifile_backend.get_remote_agent('testprofile7') - self.assertTrue( _remoteagent7 == {'hostname': 'docker-vm-1', 'hostaddr': 'docker-server', 'port': 22001, 'load_factors': {}, } or _remoteagent7 == {'hostname': 'docker-vm-2', 'hostaddr': 'docker-server', 'port': 22002, 'load_factors': {}, } ) + self.assertTrue( _remoteagent7 == {'hostname': 'docker-vm-1', 'hostaddr': 'docker-server', 'port': 22001, 'load_factors': {}, 'host_key_policy': 'WarningPolicy', } or _remoteagent7 == {'hostname': 'docker-vm-2', 'hostaddr': 'docker-server', 'port': 22002, 'load_factors': {}, 'host_key_policy': 'WarningPolicy', } ) _session7 = inifile_backend.select_session('testprofile7', 'foo7N') self.assertTrue( _session7 == {'port': 22001, 'server': 'docker-server', } or _session7 == {'port': 22001, 'server': 'docker-server', } ) i += 1 @@ -246,11 +262,31 @@ broker-agent-query-mode = SSH i = 0 while i < 10: _remoteagent8 = inifile_backend.get_remote_agent('testprofile8') - self.assertTrue( _remoteagent8 == {'hostname': 'docker-vm-0', 'hostaddr': 'docker-server', 'port': 22000, 'load_factors': {}, } or _remoteagent8 == {'hostname': 'docker-vm-1', 'hostaddr': 'docker-server', 'port': 22001, 'load_factors': {}, } or _remoteagent8 == {'hostname': 'docker-vm-2', 'hostaddr': 'docker-server', 'port': 22002, 'load_factors': {}, } ) + self.assertTrue( _remoteagent8 == {'hostname': 'docker-vm-0', 'hostaddr': 'docker-server', 'port': 22000, 'load_factors': {}, 'host_key_policy': 'WarningPolicy', } or _remoteagent8 == {'hostname': 'docker-vm-1', 'hostaddr': 'docker-server', 'port': 22001, 'load_factors': {}, 'host_key_policy': 'WarningPolicy', } or _remoteagent8 == {'hostname': 'docker-vm-2', 'hostaddr': 'docker-server', 'port': 22002, 'load_factors': {}, 'host_key_policy': 'WarningPolicy', } ) _session8 = inifile_backend.select_session('testprofile8', 'foo8N') self.assertTrue( _session8 == {'port': 22000, 'server': 'docker-server', } or _session8 == {'port': 22001, 'server': 'docker-server', } or _session8 == {'port': 22001, 'server': 'docker-server', } ) i += 1 + # test "testprofile9", test if hostkey policy is propagated from session profile config to remote agent settings + + _list9 = inifile_backend.list_profiles(username='foo9N') + _profile9 = _list9['testprofile9'] + _profile9['host'].sort() + self.assertTrue( _profile9['host'][0] in ('host1.mydomain') ) + self.assertTrue( 'status' not in _profile9 ) + _remoteagent9 = inifile_backend.get_remote_agent('testprofile9') + self.assertTrue( _remoteagent9 == {'hostname': 'host1.mydomain', 'hostaddr': '10.0.2.4', 'port': 22, 'load_factors': {}, 'host_key_policy': 'AutoAddPolicy'}) + + # test "testprofile10", test if an invalid hostkey policy is propagated from session profile config to remote agent settings and ignored with RejectPolicy as fallback + + _list10 = inifile_backend.list_profiles(username='foo10N') + _profile10 = _list10['testprofile10'] + _profile10['host'].sort() + self.assertTrue( _profile10['host'][0] in ('host1.mydomain') ) + self.assertTrue( 'status' not in _profile10 ) + _remoteagent10 = inifile_backend.get_remote_agent('testprofile10') + self.assertTrue( _remoteagent10 == {'hostname': 'host1.mydomain', 'hostaddr': '10.0.2.4', 'port': 22, 'load_factors': {}, 'host_key_policy': 'RejectPolicy'}) + x2gobroker.agent._call_local_broker_agent = _save_local_broker_agent_call x2gobroker.agent._call_remote_broker_agent = _save_remote_broker_agent_call x2gobroker.utils.portscan = _save_portscan -- Alioth's /home/x2go-admin/maintenancescripts/git/hooks/post-receive-email on /srv/git/code.x2go.org/x2gobroker.git