All major browsers removed support for this ...
VNCSRC=${VNCREL}.tar.gz
VNCLIB=${VNCDIR}/libvncserver/.libs/libvncserver.a
-TIGERVNCSRC=tigervnc-1.1.0.tgz
-#TIGERVNCSRC=tigervnc-1.2.0.tgz
-
DEB=${PACKAGE}_${VERSION}-${PACKAGERELEASE}_${ARCH}.deb
SNAP=${PACKAGE}-${VERSION}-${CDATE}.tar.gz
-KEYSTORE=/home/dietmar/pve2-proxdev/proxmox-dev/comodo-for-java.keystore
-
all: vncterm
glyphs.h: genfont
vncterm: vncterm.c glyphs.h ${VNCLIB}
gcc -O2 -g -o $@ vncterm.c -Wall -Wno-deprecated-declarations -D_GNU_SOURCE -I ${VNCDIR} ${VNCLIB} -lnsl -lpthread -lz -ljpeg -lutil -lgnutls -lpng
-jar: tigervnc.org
- if test ! -f /usr/share/icedtea-web/plugin.jar; then echo "please install package icedtea-netx-common"; exit 1; fi
- rm -rf tigervnc VncViewer.jar
- rsync -av --exclude .svn --exclude .svnignore tigervnc.org/ tigervnc
- ln -s ../tigerpatches tigervnc/patches
- cd tigervnc; quilt push -a
- cd tigervnc/java/src/com/tigervnc/vncviewer; make clean; make
- jarsigner -keystore ${KEYSTORE} -signedjar VncViewer.jar tigervnc/java/src/com/tigervnc/vncviewer/VncViewer.jar "dc475d72-124a-11e4-a53f-005056c00008"
-
-# this is for version 1.2
-# ln -s ../newtigerpatches tigervnc/patches
-# cd tigervnc/java;cmake -G "Unix Makefiles"; make
-# jarsigner -keystore ${KEYSTORE} -signedjar VncViewer.jar tigervnc/java/VncViewer.jar proxmox
-
-tigervnc.org: ${TIGERVNCSRC}
- rm -rf tigervnc.org
- tar xf ${TIGERVNCSRC}
-
-download:
- rm -rf tigervnc.org
- svn co https://tigervnc.svn.sourceforge.net/svnroot/tigervnc/tags/1_1_0 tigervnc.org
- tar cf ${TIGERVNCSRC} tigervnc.org
.PHONY: install
-install: vncterm vncterm.1 VncViewer.jar
+install: vncterm vncterm.1
mkdir -p ${DESTDIR}/usr/share/doc/${PACKAGE}
mkdir -p ${DESTDIR}/usr/share/man/man1
mkdir -p ${DESTDIR}/usr/bin
install -s -m 0755 vncterm ${DESTDIR}/usr/bin
- mkdir -p ${DESTDIR}/usr/share/vncterm/
- install -m 0644 VncViewer.jar ${DESTDIR}/usr/share/vncterm/
.PHONY: dinstall
dinstall: ${DEB}
.PHONY: clean
clean:
- rm -rf vncterm vncterm.1 vncterm_*.deb genfont tigervnc *~ ${VNCDIR} vncterm-*.tar.gz glyph.h.tmp
+ rm -rf vncterm vncterm.1 vncterm_*.deb genfont *~ ${VNCDIR} vncterm-*.tar.gz glyph.h.tmp
.PHONY: distclean
distclean: clean
- rm -rf tigervnc.org
.PHONY: dist
${SNAP} dist: distclean
+++ /dev/null
-Index: new/java/com/tigervnc/rfb/CSecurityTLS.java
-===================================================================
---- new.orig/java/com/tigervnc/rfb/CSecurityTLS.java 2013-04-18 11:56:22.000000000 +0200
-+++ new/java/com/tigervnc/rfb/CSecurityTLS.java 2013-04-18 13:59:03.000000000 +0200
-@@ -25,6 +25,7 @@
- import java.io.File;
- import java.io.InputStream;
- import java.io.FileInputStream;
-+import java.io.ByteArrayInputStream;
- import java.util.ArrayList;
- import java.util.Collection;
- import javax.swing.JOptionPane;
-@@ -34,6 +35,9 @@
-
- public class CSecurityTLS extends CSecurity {
-
-+ public static StringParameter PVECert
-+ = new StringParameter("PVECert",
-+ "Proxmox VE CA certificate", "");
- public static StringParameter x509ca
- = new StringParameter("x509ca",
- "X509 CA certificate", "");
-@@ -92,6 +96,8 @@
- {
- anon = _anon;
- setDefaults();
-+
-+ pvecert = PVECert.getData();
- cafile = x509ca.getData();
- crlfile = x509crl.getData();
- }
-@@ -170,10 +176,15 @@
- CertificateFactory cf = CertificateFactory.getInstance("X.509");
- try {
- ks.load(null, null);
-- File cacert = new File(cafile);
-- if (!cacert.exists() || !cacert.canRead())
-- return;
-- InputStream caStream = new FileInputStream(cafile);
-+ InputStream caStream;
-+ if (pvecert != null) {
-+ caStream = new ByteArrayInputStream(pvecert.getBytes("ISO-8859-1"));
-+ } else {
-+ File cacert = new File(cafile);
-+ if (!cacert.exists() || !cacert.canRead())
-+ return;
-+ caStream = new FileInputStream(cafile);
-+ }
- X509Certificate ca = (X509Certificate)cf.generateCertificate(caStream);
- ks.setCertificateEntry("CA", ca);
- PKIXBuilderParameters params = new PKIXBuilderParameters(ks, new X509CertSelector());
-@@ -241,6 +252,7 @@
- private boolean anon;
- private SSLSession session;
- private String cafile, crlfile;
-+ private String pvecert;
- private InStream is;
- private SSLSocket ssl;
-
-Index: new/java/com/tigervnc/vncviewer/VncViewer.java
-===================================================================
---- new.orig/java/com/tigervnc/vncviewer/VncViewer.java 2013-04-18 11:56:21.000000000 +0200
-+++ new/java/com/tigervnc/vncviewer/VncViewer.java 2013-04-18 13:56:33.000000000 +0200
-@@ -168,6 +168,11 @@
- if (firstApplet) {
- alwaysShowServerDialog.setParam(true);
- Configuration.readAppletParams(this);
-+ String tmpcert = this.getParameter("PVECert");
-+ if (tmpcert != null) {
-+ CSecurityTLS.PVECert.setParam(tmpcert.replace('|', '\n'));
-+ }
-+
- String host = getCodeBase().getHost();
- if (vncServerName.getValue() == null && vncServerPort.getValue() != 0) {
- int port = vncServerPort.getValue();
+++ /dev/null
-Index: new/java/com/tigervnc/vncviewer/CConn.java
-===================================================================
---- new.orig/java/com/tigervnc/vncviewer/CConn.java 2013-04-18 11:56:21.000000000 +0200
-+++ new/java/com/tigervnc/vncviewer/CConn.java 2013-04-18 14:23:58.000000000 +0200
-@@ -246,6 +246,16 @@
- String passwordFileStr = viewer.passwordFile.getValue();
- PasswdDialog dlg;
-
-+ String usernameParam = viewer.usernameParam.getValue();
-+ String passwordParam = viewer.passwordParam.getValue();
-+ vlog.info("USERNAME: " + usernameParam);
-+ vlog.info("PASSWORD: " + passwordParam);
-+ if (usernameParam != null && passwordParam != null) {
-+ user.append(usernameParam);
-+ passwd.append(passwordParam);
-+ return true;
-+ }
-+
- if (user == null && passwordFileStr != "") {
- InputStream fp = null;
- try {
-Index: new/java/com/tigervnc/vncviewer/VncViewer.java
-===================================================================
---- new.orig/java/com/tigervnc/vncviewer/VncViewer.java 2013-04-18 13:56:33.000000000 +0200
-+++ new/java/com/tigervnc/vncviewer/VncViewer.java 2013-04-19 07:52:32.000000000 +0200
-@@ -168,6 +168,9 @@
- if (firstApplet) {
- alwaysShowServerDialog.setParam(true);
- Configuration.readAppletParams(this);
-+
-+ System.err.print(Configuration.listParams());
-+
- String tmpcert = this.getParameter("PVECert");
- if (tmpcert != null) {
- CSecurityTLS.PVECert.setParam(tmpcert.replace('|', '\n'));
-@@ -263,6 +266,14 @@
- "Password file for VNC authentication", "");
- AliasParameter passwd
- = new AliasParameter("passwd", "Alias for PasswordFile", passwordFile);
-+
-+ StringParameter usernameParam
-+ = new StringParameter("USERNAME",
-+ "Username for VNC authentication", null);
-+ StringParameter passwordParam
-+ = new StringParameter("PASSWORD",
-+ "Password for VNC authentication", null);
-+
- BoolParameter autoSelect
- = new BoolParameter("AutoSelect",
- "Auto select pixel format and encoding", true);
+++ /dev/null
-add-pvecert-parameter.patch
-add-username-param.patch
+++ /dev/null
-Index: new/java/src/com/tigervnc/vncviewer/VncViewer.java
-===================================================================
---- new.orig/java/src/com/tigervnc/vncviewer/VncViewer.java 2011-01-25 07:44:23.000000000 +0100
-+++ new/java/src/com/tigervnc/vncviewer/VncViewer.java 2011-01-28 13:26:16.000000000 +0100
-@@ -466,6 +466,38 @@
- }
- }
-
-+ public void sendRefreshRequest()
-+ {
-+ if (rfb == null)
-+ return;
-+
-+ try {
-+ rfb.writeFramebufferUpdateRequest(0, 0, rfb.framebufferWidth,
-+ rfb.framebufferHeight, false);
-+ } catch (IOException e) {
-+ e.printStackTrace();
-+ }
-+ }
-+
-+ public void sendCtrlAltDel()
-+ {
-+ if (rfb == null)
-+ return;
-+
-+ int modifiers = InputEvent.CTRL_MASK | InputEvent.ALT_MASK;
-+
-+ try {
-+ KeyEvent ctrlAltDelEvent =
-+ new KeyEvent(this, KeyEvent.KEY_PRESSED, 0, modifiers, 127);
-+ rfb.writeKeyEvent(ctrlAltDelEvent);
-+
-+ ctrlAltDelEvent =
-+ new KeyEvent(this, KeyEvent.KEY_RELEASED, 0, modifiers, 127);
-+ rfb.writeKeyEvent(ctrlAltDelEvent);
-+ } catch (IOException e) {
-+ e.printStackTrace();
-+ }
-+ }
-
- //
- // Show an authentication panel.
+++ /dev/null
-Index: new/java/src/com/tigervnc/vncviewer/Makefile
-===================================================================
---- new.orig/java/src/com/tigervnc/vncviewer/Makefile 2013-04-20 15:24:59.000000000 +0200
-+++ new/java/src/com/tigervnc/vncviewer/Makefile 2013-04-20 15:31:48.000000000 +0200
-@@ -4,7 +4,7 @@
-
- CP = cp
- JC = javac
--JCFLAGS = -target 1.5 -classpath ../../../
-+JCFLAGS = -target 1.7 -classpath ../../../
- JAR = jar
- ARCHIVE = VncViewer.jar
- MANIFEST = MANIFEST.MF
+++ /dev/null
-Sources found at http://dogfeathers.com/mark/java7issue.html
-
-Index: tigervnc.new/java/src/com/tigervnc/vncviewer/VncViewer.java
-===================================================================
---- tigervnc.new.orig/java/src/com/tigervnc/vncviewer/VncViewer.java 2012-08-21 09:05:04.000000000 +0200
-+++ tigervnc.new/java/src/com/tigervnc/vncviewer/VncViewer.java 2012-08-21 09:10:27.000000000 +0200
-@@ -110,6 +110,28 @@
-
- public void init() {
-
-+ // fix focus traversal
-+ Container topParent = null;
-+ Container parent = this;
-+ // The natural thing would be to call getParent() until it returns
-+ // null, but then you would be looping for a long time, since
-+ // PluginEmbeddedFrame's getParent() returns itself.
-+ for (int k=0; k < 10; k++) {
-+ topParent = parent;
-+ parent = parent.getParent();
-+ if (parent == null) break;
-+ }
-+
-+ // If topParent isn't a KeyEventDispatcher then we must be in some
-+ // Plugin version that doesn't need the workaround.
-+ try {
-+ KeyEventDispatcher ked = (KeyEventDispatcher)topParent;
-+ KeyboardFocusManager kfm = KeyboardFocusManager.getCurrentKeyboardFocusManager();
-+ // You have to remove it twice, otherwise the problem isn't fixed
-+ kfm.removeKeyEventDispatcher(ked);
-+ kfm.removeKeyEventDispatcher(ked);
-+ } catch (ClassCastException e) {}
-+
- readParameters();
-
- refApplet = this;
+++ /dev/null
-Index: new/java/src/com/tigervnc/vncviewer/VncViewer.java
-===================================================================
---- new.orig/java/src/com/tigervnc/vncviewer/VncViewer.java 2013-05-10 07:41:18.000000000 +0200
-+++ new/java/src/com/tigervnc/vncviewer/VncViewer.java 2013-05-10 07:41:18.000000000 +0200
-@@ -27,11 +27,15 @@
-
- package com.tigervnc.vncviewer;
-
-+import netscape.javascript.*;
- import java.awt.*;
- import java.awt.event.*;
- import java.io.*;
- import java.net.*;
-
-+import java.awt.Graphics;
-+import java.applet.Applet;
-+
- public class VncViewer extends java.applet.Applet
- implements java.lang.Runnable, WindowListener, ComponentListener {
-
-@@ -94,6 +98,9 @@
-
- String PVECert;
-
-+ JSObject jswin;
-+ String myid;
-+
- // Reference to this applet for inter-applet communication.
- public static java.applet.Applet refApplet;
-
-@@ -129,6 +136,11 @@
-
- refApplet = this;
-
-+ if (inAnApplet) {
-+ jswin = JSObject.getWindow(this);
-+ myid = getParameter("id");
-+ }
-+
- if (inSeparateFrame) {
- vncFrame = new Frame("TigerVNC");
- if (!inAnApplet) {
-@@ -159,6 +171,9 @@
-
- rfbThread = new Thread(this);
- rfbThread.start();
-+
-+ String[] myparam = { myid, "init"};
-+ jswin.call("PVE_vnc_console_event", myparam);
- }
-
- public void update(Graphics g) {
-@@ -1002,6 +1017,8 @@
-
- if (inAnApplet) {
- showMessage("Disconnected");
-+ String[] myparam = { myid, "disconnect"};
-+ jswin.call("PVE_vnc_console_event", myparam);
- } else {
- System.exit(0);
- }
-@@ -1019,6 +1036,8 @@
- // vncContainer null, applet not inited,
- // can not present the error to the user.
- Thread.currentThread().stop();
-+ String[] myparam = { myid, "error", str};
-+ jswin.call("PVE_vnc_console_event", myparam);
- } else {
- System.exit(1);
- }
-@@ -1040,6 +1059,8 @@
- rfb.close();
-
- if (inAnApplet) {
-+ String[] myparam = { myid, "error", str};
-+ jswin.call("PVE_vnc_console_event", myparam);
- showMessage(str);
- } else {
- System.exit(1);
-@@ -1109,6 +1130,9 @@
- rfb.close();
- if (inSeparateFrame)
- vncFrame.dispose();
-+
-+ String[] myparam = { myid, "destroy"};
-+ jswin.call("PVE_vnc_console_event", myparam);
- }
-
- //
-@@ -1157,6 +1181,8 @@
- if (!inAnApplet) {
- System.exit(0);
- }
-+ String[] myparam = { myid, "close"};
-+ jswin.call("PVE_vnc_console_event", myparam);
- }
-
- //
-Index: new/java/src/com/tigervnc/vncviewer/Makefile
-===================================================================
---- new.orig/java/src/com/tigervnc/vncviewer/Makefile 2013-05-10 07:41:18.000000000 +0200
-+++ new/java/src/com/tigervnc/vncviewer/Makefile 2013-05-10 07:43:17.000000000 +0200
-@@ -4,7 +4,7 @@
-
- CP = cp
- JC = javac
--JCFLAGS = -target 1.7 -classpath ../../../
-+JCFLAGS = -target 1.7 -classpath ../../../ -Djava.ext.dirs=/usr/share/icedtea-web/
- JAR = jar
- ARCHIVE = VncViewer.jar
- MANIFEST = MANIFEST.MF
+++ /dev/null
-Index: new/java/src/com/tigervnc/vncviewer/RfbProto.java
-===================================================================
---- new.orig/java/src/com/tigervnc/vncviewer/RfbProto.java 2011-01-20 08:14:34.000000000 +0100
-+++ new/java/src/com/tigervnc/vncviewer/RfbProto.java 2011-01-20 08:19:20.000000000 +0100
-@@ -938,6 +938,9 @@
-
- int keyChar = evt.getKeyChar();
-
-+ int test = evt.getKeyCode();
-+ System.out.println("KEYCODE: " + evt.getKeyText(test));
-+
- //
- // Ignore event if only modifiers were pressed.
- //
+++ /dev/null
-Index: new/java/src/com/tigervnc/vncviewer/MANIFEST.MF
-===================================================================
---- new.orig/java/src/com/tigervnc/vncviewer/MANIFEST.MF 2011-08-18 14:05:33.000000000 +0200
-+++ new/java/src/com/tigervnc/vncviewer/MANIFEST.MF 2013-11-08 11:17:13.000000000 +0100
-@@ -1,2 +1,6 @@
- Manifest-Version: 1.0
- Main-Class: com.tigervnc.vncviewer.VncViewer
-+Permissions: all-permissions
-+Application-Name: vncterm
-+Codebase: *
-+Caller-Allowable-Codebase: *
+++ /dev/null
-#keydebug.patch
-#javascript-events.patch
-export-ctrl-alt-delete.patch
-trust-manager.patch
-fix-makefiles.patch
-username-param.patch
-fix-tab-button.patch
-modify-jar-manifest.patch
-javascript-events.patch
+++ /dev/null
-
- Unfortunately the java certificate store does not correctly access
- the browser certificate store (firefox, chrome). We also tunnel VNC
- traffic from other cluster nodes.
-
- So we implement our own trust manager, and allow to pass the server
- certificate (or CA who signed the server certificate) as applet
- parameter "PVECert" (newline encoded as '|').
-
-Index: tigervnc/java/src/com/tigervnc/vncviewer/X509Tunnel.java
-===================================================================
---- tigervnc.orig/java/src/com/tigervnc/vncviewer/X509Tunnel.java 2013-06-03 08:17:17.000000000 +0200
-+++ tigervnc/java/src/com/tigervnc/vncviewer/X509Tunnel.java 2013-06-03 08:22:52.000000000 +0200
-@@ -26,13 +26,23 @@
- import javax.net.ssl.*;
- import java.security.*;
- import java.security.cert.*;
-+import java.security.cert.Certificate;
-+import java.security.cert.CertificateFactory;
-+import java.io.*;
-
- public class X509Tunnel extends TLSTunnelBase
- {
-
-- public X509Tunnel (Socket sock_)
-+ Certificate pvecert;
-+
-+ public X509Tunnel (Socket sock_, String certstr) throws CertificateException
- {
- super (sock_);
-+
-+ if (certstr != null) {
-+ CertificateFactory cf = CertificateFactory.getInstance("X.509");
-+ pvecert = cf.generateCertificate(new StringBufferInputStream(certstr));
-+ }
- }
-
- protected void setParam (SSLSocket sock)
-@@ -52,9 +62,48 @@
- protected void initContext (SSLContext sc) throws java.security.
- GeneralSecurityException
- {
-- TrustManager[] myTM = new TrustManager[]
-- {
-- new MyX509TrustManager ()};
-+ TrustManager[] myTM;
-+
-+ if (pvecert != null) {
-+ myTM = new TrustManager[] {
-+ new X509TrustManager() {
-+ public java.security.cert.X509Certificate[]
-+ getAcceptedIssuers() {
-+ return null;
-+ }
-+ public void checkClientTrusted(
-+ java.security.cert.X509Certificate[] certs,
-+ String authType) throws CertificateException {
-+ throw new CertificateException("no clients");
-+ }
-+ public void checkServerTrusted(
-+ java.security.cert.X509Certificate[] certs,
-+ String authType) throws CertificateException {
-+
-+ if (certs == null || certs.length < 1) {
-+ throw new CertificateException("no certs");
-+ }
-+ PublicKey cakey = pvecert.getPublicKey();
-+
-+ boolean ca_match;
-+ try {
-+ certs[0].verify(cakey);
-+ ca_match = true;
-+ } catch (Exception e) {
-+ ca_match = false;
-+ }
-+
-+ if (!ca_match && !pvecert.equals(certs[0])) {
-+ throw new CertificateException("certificate does not match");
-+ }
-+ }
-+ }
-+ };
-+ } else {
-+ myTM = new TrustManager[] {
-+ new MyX509TrustManager ()
-+ };
-+ }
- sc.init (null, myTM, null);
- }
-
-@@ -100,4 +149,5 @@
- return tm.getAcceptedIssuers ();
- }
- }
-+
- }
-Index: tigervnc/java/src/com/tigervnc/vncviewer/RfbProto.java
-===================================================================
---- tigervnc.orig/java/src/com/tigervnc/vncviewer/RfbProto.java 2013-06-03 08:17:17.000000000 +0200
-+++ tigervnc/java/src/com/tigervnc/vncviewer/RfbProto.java 2013-06-03 08:19:05.000000000 +0200
-@@ -411,7 +411,8 @@
- }
-
- void authenticateX509() throws Exception {
-- X509Tunnel tunnel = new X509Tunnel(sock);
-+
-+ X509Tunnel tunnel = new X509Tunnel(sock, viewer.PVECert);
- tunnel.setup (this);
- }
-
-Index: tigervnc/java/src/com/tigervnc/vncviewer/VncViewer.java
-===================================================================
---- tigervnc.orig/java/src/com/tigervnc/vncviewer/VncViewer.java 2013-06-03 08:19:03.000000000 +0200
-+++ tigervnc/java/src/com/tigervnc/vncviewer/VncViewer.java 2013-06-03 08:19:05.000000000 +0200
-@@ -91,6 +91,8 @@
- int debugStatsExcludeUpdates;
- int debugStatsMeasureUpdates;
-
-+ String PVECert;
-+
- // Reference to this applet for inter-applet communication.
- public static java.applet.Applet refApplet;
-
-@@ -263,7 +265,7 @@
- fatalError(e.toString(), e);
- }
- }
--
-+
- }
-
- //
-@@ -299,7 +301,7 @@
- // If the rfbThread is being stopped, ignore any exceptions,
- // otherwise rethrow the exception so it can be handled.
- //
--
-+
- void processNormalProtocol() throws Exception {
- try {
- vc.processNormalProtocol();
-@@ -842,6 +844,11 @@
-
- // SocketFactory.
- socketFactory = readParameter("SocketFactory", false);
-+
-+ String tmpcert = readParameter("PVECert", false);
-+ if (tmpcert != null) {
-+ PVECert = tmpcert.replace('|', '\n');
-+ }
- }
-
- //
-@@ -991,7 +998,7 @@
- }
-
- synchronized public void fatalError(String str, Exception e) {
--
-+
- if (rfb != null && rfb.closed()) {
- // Not necessary to show error message if the error was caused
- // by I/O problems after the rfb.close() method call.
-@@ -1084,11 +1091,11 @@
- public void enableInput(boolean enable) {
- vc.enableInput(enable);
- }
--
-+
- //
- // Resize framebuffer if autoScale is enabled.
- //
--
-+
- public void componentResized(ComponentEvent e) {
- if (e.getComponent() == vncFrame) {
- if (options.autoScale) {
-@@ -1100,11 +1107,11 @@
- }
- }
- }
--
-+
- //
- // Ignore component events we're not interested in.
- //
--
-+
- public void componentShown(ComponentEvent e) { }
- public void componentMoved(ComponentEvent e) { }
- public void componentHidden(ComponentEvent e) { }
+++ /dev/null
-Index: new/java/src/com/tigervnc/vncviewer/VncViewer.java
-===================================================================
---- new.orig/java/src/com/tigervnc/vncviewer/VncViewer.java 2011-01-28 13:26:51.000000000 +0100
-+++ new/java/src/com/tigervnc/vncviewer/VncViewer.java 2011-01-28 13:27:04.000000000 +0100
-@@ -86,6 +86,7 @@
- String host;
- int port;
- String passwordParam;
-+ String usernameParam;
- boolean showControls;
- boolean offerRelogin;
- boolean showOfflineDesktop;
-@@ -384,10 +385,12 @@
- break;
- case RfbProto.SecTypePlain:
- showConnectionStatus("Plain authentication");
-- {
-- String user = askUser();
-- String pw = askPassword();
-- rfb.authenticatePlain(user,pw);
-+ if (usernameParam != null && passwordParam != null) {
-+ rfb.authenticatePlain(usernameParam, passwordParam);
-+ } else {
-+ String user = askUser();
-+ String pw = askPassword();
-+ rfb.authenticatePlain(user,pw);
- }
- break;
- case RfbProto.SecTypeTLSNone:
-@@ -822,6 +825,8 @@
- // Read "ENCPASSWORD" or "PASSWORD" parameter if specified.
- readPasswordParameters();
-
-+ usernameParam = readParameter("USERNAME", false);
-+
- String str;
- if (inAnApplet) {
- str = readParameter("Open New Window", false);