Signed-off-by: Martin Koegler <mkoeg...@auto.tuwien.ac.at> --- java/src/com/tigervnc/vncviewer/RfbProto.java | 33 +++++++++++++++++- java/src/com/tigervnc/vncviewer/VncViewer.java | 43 ++++++++++++++--------- 2 files changed, 58 insertions(+), 18 deletions(-)
diff --git a/java/src/com/tigervnc/vncviewer/RfbProto.java b/java/src/com/tigervnc/vncviewer/RfbProto.java index dc7aa2e..ab3c152 100644 --- a/java/src/com/tigervnc/vncviewer/RfbProto.java +++ b/java/src/com/tigervnc/vncviewer/RfbProto.java @@ -391,7 +391,8 @@ class RfbProto { // Find first supported security type. for (int i = 0; i < nSecTypes; i++) { - if (secTypes[i] == SecTypeNone || secTypes[i] == SecTypeVncAuth) { + if (secTypes[i] == SecTypeNone || secTypes[i] == SecTypeVncAuth + || secTypes[i] == SecTypeVeNCrypt) { secType = secTypes[i]; break; } @@ -406,6 +407,36 @@ class RfbProto { return secType; } + int authenticateVeNCrypt() throws Exception { + int majorVersion = readU8(); + int minorVersion = readU8(); + int Version = (majorVersion << 8) | minorVersion; + if (Version < 0x0002) { + os.write(0); + os.write(0); + throw new Exception("Server reported an unsupported VeNCrypt version"); + } + os.write(0); + os.write(2); + if (readU8() != 0) + throw new Exception("Server reported it could not support the VeNCrypt version"); + int nSecTypes = readU8(); + int[] secTypes = new int[nSecTypes]; + for(int i = 0; i < nSecTypes; i++) + secTypes[i] = readU32(); + + for(int i = 0; i < nSecTypes; i++) + switch(secTypes[i]) + { + case SecTypeNone: + case SecTypeVncAuth: + writeInt(secTypes[i]); + return secTypes[i]; + } + + throw new Exception("No valid VeNCrypt sub-type"); + } + // // Perform "no authentication". // diff --git a/java/src/com/tigervnc/vncviewer/VncViewer.java b/java/src/com/tigervnc/vncviewer/VncViewer.java index 3c527ba..711b1c9 100644 --- a/java/src/com/tigervnc/vncviewer/VncViewer.java +++ b/java/src/com/tigervnc/vncviewer/VncViewer.java @@ -361,25 +361,34 @@ public class VncViewer extends java.applet.Applet authType = secType; } - switch (authType) { - case RfbProto.AuthNone: - showConnectionStatus("No authentication needed"); - rfb.authenticateNone(); - break; - case RfbProto.AuthVNC: - showConnectionStatus("Performing standard VNC authentication"); - if (passwordParam != null) { - rfb.authenticateVNC(passwordParam); - } else { - String pw = askPassword(); - rfb.authenticateVNC(pw); - } - break; - default: - throw new Exception("Unknown authentication scheme " + authType); - } + doAuthentification(authType); } + void doAuthentification(int secType) throws Exception { + switch (secType) { + case RfbProto.SecTypeNone: + showConnectionStatus("No authentication needed"); + rfb.authenticateNone(); + break; + case RfbProto.SecTypeVncAuth: + showConnectionStatus("Performing standard VNC authentication"); + if (passwordParam != null) { + rfb.authenticateVNC(passwordParam); + } else { + String pw = askPassword(); + rfb.authenticateVNC(pw); + } + break; + case RfbProto.SecTypeVeNCrypt: + showConnectionStatus("VeNCrypt chooser"); + secType = rfb.authenticateVeNCrypt(); + doAuthentification(secType); + break; + default: + throw new Exception("Unknown authentication scheme " + secType); + } + } + // // Show a message describing the connection status. -- 1.5.6.5 ------------------------------------------------------------------------------ The Next 800 Companies to Lead America's Growth: New Video Whitepaper David G. Thomson, author of the best-selling book "Blueprint to a Billion" shares his insights and actions to help propel your business during the next growth cycle. Listen Now! http://p.sf.net/sfu/SAP-dev2dev _______________________________________________ Tigervnc-devel mailing list Tigervnc-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/tigervnc-devel