Browse Source

[Development] Client now uses security types from -SecurityTypes parameter instead of hardcoded list.


git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@4094 3789f03b-4d11-0410-bbf8-ca57d06f2519
tags/v1.0.90
Adam Tkac 14 years ago
parent
commit
05a0cd6628
4 changed files with 23 additions and 38 deletions
  1. 23
    24
      common/rfb/CConnection.cxx
  2. 0
    8
      common/rfb/CConnection.h
  3. 0
    3
      unix/vncviewer/CConn.cxx
  4. 0
    3
      win/vncviewer/CConn.cxx

+ 23
- 24
common/rfb/CConnection.cxx View File

@@ -33,7 +33,7 @@ static LogWriter vlog("CConnection");

CConnection::CConnection()
: csecurity(0), is(0), os(0), reader_(0), writer_(0),
shared(false), nSecTypes(0),
shared(false),
state_(RFBSTATE_UNINITIALISED), useProtocol3_3(false)
{
security = new Security();
@@ -59,13 +59,6 @@ void CConnection::setStreams(rdr::InStream* is_, rdr::OutStream* os_)
os = os_;
}

void CConnection::addSecType(rdr::U8 secType)
{
if (nSecTypes == maxSecTypes)
throw Exception("too many security types");
secTypes[nSecTypes++] = secType;
}

void CConnection::initialiseProtocol()
{
state_ = RFBSTATE_PROTOCOL_VERSION;
@@ -129,6 +122,9 @@ void CConnection::processSecurityTypesMsg()

int secType = secTypeInvalid;

std::list<rdr::U8> secTypes;
secTypes = security->GetEnabledSecTypes();

if (cp.isVersion(3,3)) {

// legacy 3.3 server may only offer "vnc authentication" or "none"
@@ -138,10 +134,14 @@ void CConnection::processSecurityTypesMsg()
throwConnFailedException();

} else if (secType == secTypeNone || secType == secTypeVncAuth) {
int j;
for (j = 0; j < nSecTypes; j++)
if (secTypes[j] == secType) break;
if (j == nSecTypes)
std::list<rdr::U8>::iterator i;
for (i = secTypes.begin(); i != secTypes.end(); i++)
if (*i == secType) {
secType = *i;
break;
}

if (i == secTypes.end())
secType = secTypeInvalid;
} else {
vlog.error("Unknown 3.3 security type %d", secType);
@@ -156,25 +156,24 @@ void CConnection::processSecurityTypesMsg()
if (nServerSecTypes == 0)
throwConnFailedException();

int secTypePos = nSecTypes;
std::list<rdr::U8>::iterator j;
int secTypePos, secTypePosMin;

secTypePosMin = secTypes.size();

for (int i = 0; i < nServerSecTypes; i++) {
rdr::U8 serverSecType = is->readU8();
vlog.debug("Server offers security type %s(%d)",
secTypeName(serverSecType),serverSecType);

// If we haven't already chosen a secType, try this one
// If we are using the client's preference for types,
// we keep trying types, to find the one that matches and
// We keep trying types, to find the one that matches and
// which appears first in the client's list of supported types.
if (secType == secTypeInvalid) {
for (int j = 0; j < nSecTypes; j++) {
if (secTypes[j] == serverSecType && j < secTypePos) {
secType = secTypes[j];
secTypePos = j;
break;
}
for (j = secTypes.begin(), secTypePos = 0; j != secTypes.end(); j++, secTypePos++) {
if (*j == serverSecType && secTypePos < secTypePosMin) {
secType = *j;
secTypePosMin = secTypePos;
break;
}
// NB: Continue reading the remaining server secTypes, but ignore them
}
}


+ 0
- 8
common/rfb/CConnection.h View File

@@ -59,11 +59,6 @@ namespace rfb {
// (i.e. SConnection will not delete them).
void setStreams(rdr::InStream* is, rdr::OutStream* os);

// addSecType() should be called once for each security type which the
// client supports. The order in which they're added is such that the
// first one is most preferred.
void addSecType(rdr::U8 secType);

// setShared sets the value of the shared flag which will be sent to the
// server upon initialisation.
void setShared(bool s) { shared = s; }
@@ -157,9 +152,6 @@ namespace rfb {
CMsgWriter* writer_;
bool deleteStreamsWhenDone;
bool shared;
enum { maxSecTypes = 8 };
int nSecTypes;
rdr::U8 secTypes[maxSecTypes];
stateEnum state_;

CharArray serverName;

+ 0
- 3
unix/vncviewer/CConn.cxx View File

@@ -69,9 +69,6 @@ CConn::CConn(Display* dpy_, int argc_, char** argv_, network::Socket* sock_,
menuKeysym = XStringToKeysym(menuKeyStr.buf);

setShared(shared);
addSecType(secTypeNone);
addSecType(secTypeVncAuth);
addSecType(secTypeVeNCrypt);
CSecurity::upg = this; /* Security instance is created in CConnection costructor. */

CharArray encStr(preferredEncoding.getData());

+ 0
- 3
win/vncviewer/CConn.cxx View File

@@ -98,9 +98,6 @@ bool CConn::initialise(network::Socket* s, bool reverse) {
// Initialise the viewer options
applyOptions(options);

// - Set which auth schemes we support, in order of preference
addSecType(secTypeVncAuth);
addSecType(secTypeNone);
CSecurity::upg = this;

// Start the RFB protocol

Loading…
Cancel
Save