From c22746d2c6d036410d7edba57ec64ec4d2d95bd2 Mon Sep 17 00:00:00 2001 From: Constantin Kaplinsky Date: Fri, 8 Dec 2006 04:19:48 +0000 Subject: Reverted the changes appeared in revisions 2173,2181. We better always send the "security result" message in the protocol version 3.8, even after an empty list of authentication capabilities. git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@2189 3789f03b-4d11-0410-bbf8-ca57d06f2519 --- common/rfb/SConnection.cxx | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) (limited to 'common/rfb') diff --git a/common/rfb/SConnection.cxx b/common/rfb/SConnection.cxx index 130170f2..9e47900e 100644 --- a/common/rfb/SConnection.cxx +++ b/common/rfb/SConnection.cxx @@ -253,18 +253,22 @@ void SConnection::offerAuthentication() if (caps.getSize() < 1) throwConnFailedException("No supported security types"); - // FIXME: We could send an empty capability list if we do not require - // authentication and any local user interaction. But the problem - // is that this class does not know if local user will be prompted - // to accept/reject connection. - // Thus, currently we always send non-empty capability lists, - // although this is not compatible with certain TightVNC viewers - // that do not understand authentication type "AuthNone" and expect - // an empty capability list for no authentication. - os->writeU32(caps.getSize()); - caps.write(os); - os->flush(); - state_ = RFBSTATE_TIGHT_AUTH_TYPE; + if (caps.includesOnly(secTypeNone)) { + // Special case - if caps includes nothing else than secTypeNone, we send + // an empty capability list and do not expect security type selection from + // the client. Then, continue the protocol like if the client has selected + // secTypeNone (starting at base protocol version 3.8, "security result" + // will follow). + os->writeU32(0); + os->flush(); + processSecurityType(secTypeNone); + } else { + // Normal case - sending the list of authentication capabilities. + os->writeU32(caps.getSize()); + caps.write(os); + os->flush(); + state_ = RFBSTATE_TIGHT_AUTH_TYPE; + } } void SConnection::processAuthTypeMsg() -- cgit v1.2.3