Author: Michal Srb Subject: Display warning in window title when no encryption is in use. Patch-Mainline: To be upstreamed References: fate#319701 Index: tigervnc-1.6.0/common/rfb/CSecurityPlain.cxx =================================================================== --- tigervnc-1.6.0.orig/common/rfb/CSecurityPlain.cxx +++ tigervnc-1.6.0/common/rfb/CSecurityPlain.cxx @@ -31,7 +31,7 @@ bool CSecurityPlain::processMsg(CConnect CharArray username; CharArray password; - (CSecurity::upg)->getUserPasswd(&username.buf, &password.buf); + (CSecurity::upg)->getUserPasswd(&username.buf, &password.buf, cc->csecurity->getType()); // Return the response to the server os->writeU32(strlen(username.buf)); Index: tigervnc-1.6.0/common/rfb/CSecurityVncAuth.cxx =================================================================== --- tigervnc-1.6.0.orig/common/rfb/CSecurityVncAuth.cxx +++ tigervnc-1.6.0/common/rfb/CSecurityVncAuth.cxx @@ -46,7 +46,7 @@ bool CSecurityVncAuth::processMsg(CConne rdr::U8 challenge[vncAuthChallengeSize]; is->readBytes(challenge, vncAuthChallengeSize); PlainPasswd passwd; - (CSecurity::upg)->getUserPasswd(0, &passwd.buf); + (CSecurity::upg)->getUserPasswd(0, &passwd.buf, cc->csecurity->getType()); // Calculate the correct response rdr::U8 key[8]; Index: tigervnc-1.6.0/common/rfb/Security.cxx =================================================================== --- tigervnc-1.6.0.orig/common/rfb/Security.cxx +++ tigervnc-1.6.0/common/rfb/Security.cxx @@ -206,3 +206,19 @@ std::list rfb::parseSecTypes(c } return result; } + +bool rfb::isSecTypeEncrypted(rdr::U32 num) +{ + switch (num) { + case secTypeTLSNone: + case secTypeTLSVnc: + case secTypeTLSPlain: + case secTypeX509None: + case secTypeX509Vnc: + case secTypeX509Plain: + return true; + + default: + return false; + } +} Index: tigervnc-1.6.0/common/rfb/Security.h =================================================================== --- tigervnc-1.6.0.orig/common/rfb/Security.h +++ tigervnc-1.6.0/common/rfb/Security.h @@ -104,6 +104,8 @@ namespace rfb { const char* secTypeName(rdr::U32 num); rdr::U32 secTypeNum(const char* name); std::list parseSecTypes(const char* types); + + bool isSecTypeEncrypted(rdr::U32 num); } #endif Index: tigervnc-1.6.0/common/rfb/UserPasswdGetter.h =================================================================== --- tigervnc-1.6.0.orig/common/rfb/UserPasswdGetter.h +++ tigervnc-1.6.0/common/rfb/UserPasswdGetter.h @@ -17,6 +17,9 @@ */ #ifndef __RFB_USERPASSWDGETTER_H__ #define __RFB_USERPASSWDGETTER_H__ + +#include + namespace rfb { class UserPasswdGetter { public: @@ -24,7 +27,7 @@ namespace rfb { // dialog, getpass(), etc. The user buffer pointer can be null, in which // case no user name will be retrieved. The caller MUST delete [] the // result(s). - virtual void getUserPasswd(char** user, char** password)=0; + virtual void getUserPasswd(char** user, char** password, rdr::U32 secType)=0; }; } #endif Index: tigervnc-1.6.0/vncviewer/DesktopWindow.cxx =================================================================== --- tigervnc-1.6.0.orig/vncviewer/DesktopWindow.cxx +++ tigervnc-1.6.0/vncviewer/DesktopWindow.cxx @@ -27,6 +27,7 @@ #include #include +#include #include "DesktopWindow.h" #include "OptionsDialog.h" @@ -206,7 +207,11 @@ void DesktopWindow::setName(const char * CharArray windowNameStr; windowNameStr.replaceBuf(new char[256]); - snprintf(windowNameStr.buf, 256, "%.240s - TigerVNC", name); + const char *warning = ""; + if (!rfb::isSecTypeEncrypted(cc->csecurity->getType())) + warning = _("(Connection not encrypted!)"); + + snprintf(windowNameStr.buf, 256, "%.240s - TigerVNC %s", name, warning); copy_label(windowNameStr.buf); } Index: tigervnc-1.6.0/vncviewer/UserDialog.cxx =================================================================== --- tigervnc-1.6.0.orig/vncviewer/UserDialog.cxx +++ tigervnc-1.6.0/vncviewer/UserDialog.cxx @@ -32,10 +32,12 @@ #include #include #include +#include #include #include #include +#include #include "i18n.h" #include "fltk_layout.h" @@ -59,7 +61,7 @@ UserDialog::~UserDialog() { } -void UserDialog::getUserPasswd(char** user, char** password) +void UserDialog::getUserPasswd(char** user, char** password, rdr::U32 secType) { CharArray passwordFileStr(passwordFile.getData()); @@ -82,8 +84,12 @@ void UserDialog::getUserPasswd(char** us return; } + const char* title = _("VNC authentication"); + if (!rfb::isSecTypeEncrypted(secType)) + title = _("VNC authentication (Connection not encrypted!)"); + if (!user) { - fl_message_title(_("VNC authentication")); + fl_message_title(title); *password = strDup(fl_password(_("Password:"), "")); if (!*password) throw rfb::Exception(_("Authentication cancelled")); @@ -93,7 +99,7 @@ void UserDialog::getUserPasswd(char** us // Largely copied from FLTK so that we get the same look and feel // as the simpler password input. - Fl_Window *win = new Fl_Window(410, 145, _("VNC authentication")); + Fl_Window *win = new Fl_Window(410, 145, title); win->callback(button_cb,(void *)0); Fl_Input *username = new Fl_Input(70, 25, 300, 25, _("Username:")); Index: tigervnc-1.6.0/vncviewer/UserDialog.h =================================================================== --- tigervnc-1.6.0.orig/vncviewer/UserDialog.h +++ tigervnc-1.6.0/vncviewer/UserDialog.h @@ -31,7 +31,7 @@ public: // UserPasswdGetter callbacks - void getUserPasswd(char** user, char** password); + void getUserPasswd(char** user, char** password, rdr::U32 secType); // UserMsgBox callbacks