Subject: Bug#1183: Pass broker creds to RDP client as plaintext

From: Walid MOGHRABI <[email-masked]>
Date: Wed, 31 May 2017 16:40:49 +0200 (CEST)

package: x2goclient
priority: wishlist
tags: patch

This is a proposal patch in order to let the RDP client use the credentials used at broker auth login so that users can enter them only once in broker mode.

This patch also add support for --close-disconnect in broker mode + RDP

Regards,
Walid Moghrabi

TRAVAUX.COM
BAT I - PARC CEZANNE 2 290 AVENUE GALILEE - CS 80403
13591 AIX EN PROVENCE CEDEX 3

---
DISCLAIMER: This e-mail is private and confidential and may contain proprietary or legally privileged information. It is for the intended recipient only. If you have received this email in error, please notify the author by replying to it and then destroy it. If you are not the intended recipient you must not use, disclose, distribute, copy, print or rely on this e-mail or any attachment. Thank you

--- /home/walid/Bureau/x2goclient-current/src/help.cpp
+++ /home/walid/Bureau/x2goclient/src/help.cpp
@@ -158,6 +158,7 @@
   ADD_OPT ("--broker-ssh-key=<path to key>", QT_TRANSLATE_NOOP ("Help", "Sets the path to an SSH key to use for authentication against an SSH session broker. The client's behavior is undefined if this flag is used for non-SSH session brokers."));
   ADD_OPT ("--broker-autologin", QT_TRANSLATE_NOOP ("Help", "Enables the use of the default SSH key or SSH agent for authentication against an SSH session broker. The client's behavior is undefined if this flag is used for non-SSH session brokers."));
   ADD_OPT ("--broker-noauth", QT_TRANSLATE_NOOP ("Help", "Does not ask for user credentials during session broker authentication. This can be useful if you are using an HTTP(S) session broker without authentication. If you run an HTTP(S) server without authentication, but with user-specific profiles, then put the user name into the broker URL (refer to --broker-url.) The user name then will be extracted from the broker URL and be sent to the session broker. The client's behavior is undefined if this flag is used for non-HTTP(S) session brokers."));
+  ADD_OPT ("--use-broker-creds-for-rdp-session", QT_TRANSLATE_NOOP ("Help", "Pass broker credentials as plain text to directRDP sessions when using broker mode with broker authentication."));
   ADD_OPT ("--background=<svg-file>", QT_TRANSLATE_NOOP ("Help", "Use a custom/branded background image (SVG format) for X2Go Client's main window."));
   ADD_OPT ("--branding=<svg-file>", QT_TRANSLATE_NOOP ("Help", "Use a custom icon (SVG format) for additional branding to replace the default in the lower left corner of X2Go Client's main window."));

--- /home/walid/Bureau/x2goclient-current/src/onmainwindow.h
+++ /home/walid/Bureau/x2goclient/src/onmainwindow.h
@@ -609,6 +609,7 @@
     bool keepTrayIcon;
     bool hideFolderSharing;
     bool brokerNoauthWithSessionUsername;
+    bool brokerCredsForRDPSession;
     bool defaultUseSound;
     bool defaultXinerama;
     bool cardStarted;

--- /home/walid/Bureau/x2goclient-current/src/onmainwindow.cpp
+++ /home/walid/Bureau/x2goclient/src/onmainwindow.cpp
@@ -74,6 +74,7 @@
     keepTrayIcon=false;
     hideFolderSharing=false;
     brokerNoauthWithSessionUsername=false;
+    brokerCredsForRDPSession=false;
     thinMode=false;
     closeDisconnect=false;
     showHaltBtn=false;
@@ -3482,8 +3483,16 @@
     }
     else
     {
-        user=st->setting()->value ( sid+"/user",
-                                       ( QVariant ) "").toString();
+        if (brokerCredsForRDPSession)
+        {
+            user=login->text();
+            password=pass->text();
+        }
+        else
+        {
+            user=st->setting()->value ( sid+"/user",
+                                           ( QVariant ) "").toString();
+        }
     }
 
     nxproxy=new QProcess;
@@ -6230,6 +6239,10 @@
 #ifdef Q_OS_LINUX
     if (directRDP)
     {
+        if (closeDisconnect)
+        {
+            close();
+        }
         pass->setText ( "" );
         QTimer::singleShot ( 2000,this,
                              SLOT ( slotShowPassForm() ) );
@@ -7425,6 +7438,12 @@
         return true;
     }
 
+    if ( param=="--use-broker-creds-for-rdp-session" )
+    {
+        brokerCredsForRDPSession=true;
+        return true;
+    }
+
     //force to show trayicon
     if (param == "--tray-icon")
     {