diff options
Diffstat (limited to 'libvncserver')
| -rw-r--r-- | libvncserver/main.c | 6 | ||||
| -rw-r--r-- | libvncserver/rfbserver.c | 22 |
2 files changed, 15 insertions, 13 deletions
diff --git a/libvncserver/main.c b/libvncserver/main.c index 488f09d..3182145 100644 --- a/libvncserver/main.c +++ b/libvncserver/main.c @@ -473,9 +473,11 @@ rfbBool rfbCheckPasswordByList(rfbClientPtr cl,const char* response,int len) int i=0; for(passwds=(char**)cl->screen->rfbAuthPasswdData;*passwds;passwds++,i++) { - vncEncryptBytes(cl->authChallenge, *passwds); + uint8_t auth_tmp[CHALLENGESIZE]; + memcpy((char *)auth_tmp, (char *)cl->authChallenge, CHALLENGESIZE); + vncEncryptBytes(auth_tmp, *passwds); - if (memcmp(cl->authChallenge, response, len) == 0) { + if (memcmp(auth_tmp, response, len) == 0) { if(i>=cl->screen->rfbAuthPasswdFirstViewOnly) cl->viewOnly=TRUE; return(TRUE); diff --git a/libvncserver/rfbserver.c b/libvncserver/rfbserver.c index e22283e..4fe2605 100644 --- a/libvncserver/rfbserver.c +++ b/libvncserver/rfbserver.c @@ -1017,22 +1017,22 @@ rfbProcessClientNormalMessage(cl) return; } - if(!cl->viewOnly) { - msg.cct.length = Swap32IfLE(msg.cct.length); + msg.cct.length = Swap32IfLE(msg.cct.length); - str = (char *)malloc(msg.cct.length); + str = (char *)malloc(msg.cct.length); - if ((n = ReadExact(cl, str, msg.cct.length)) <= 0) { - if (n != 0) - rfbLogPerror("rfbProcessClientNormalMessage: read"); - free(str); - rfbCloseClient(cl); - return; - } + if ((n = ReadExact(cl, str, msg.cct.length)) <= 0) { + if (n != 0) + rfbLogPerror("rfbProcessClientNormalMessage: read"); + free(str); + rfbCloseClient(cl); + return; + } + if(!cl->viewOnly) { cl->screen->setXCutText(str, msg.cct.length, cl); - free(str); } + free(str); return; |
