From e66eeecd62f62acc3d86f737d979f97a529686b0 Mon Sep 17 00:00:00 2001 From: dscho Date: Tue, 23 Apr 2002 12:34:50 +0000 Subject: [PATCH] sync with TightVNC 1.2.3 --- CHANGES | 1 + classes/VncViewer.jar | Bin 0 -> 36406 bytes classes/index.vnc | 3 +- classes/vncviewer.jar | Bin 31205 -> 0 bytes httpd.c | 126 ++++++++++++++++++++++++++---------------- rfbserver.c | 3 +- sockets.c | 17 ++++++ 7 files changed, 99 insertions(+), 51 deletions(-) create mode 100644 classes/VncViewer.jar delete mode 100644 classes/vncviewer.jar diff --git a/CHANGES b/CHANGES index 53cfde3..8d5e187 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,4 @@ + synced with TightVNC 1.2.3 solaris compile cleanups many x11vnc improvements added backchannel, an encoding which needs special clients to pass diff --git a/classes/VncViewer.jar b/classes/VncViewer.jar new file mode 100644 index 0000000000000000000000000000000000000000..ac3586503c3e0c2d90bffb7ebf87b29d5795d36b GIT binary patch literal 36406 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 AeE $USER's $DESKTOP desktop ($DISPLAY) - +
www.TightVNC.com diff --git a/classes/vncviewer.jar b/classes/vncviewer.jar deleted file mode 100644 index 993613a3fa673f7ce04b08d317510376ac7f126c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31205 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 B-KGEl diff --git a/httpd.c b/httpd.c index 37be4f3..7a738a4 100644 --- a/httpd.c +++ b/httpd.c @@ -39,6 +39,10 @@ #include #include +#ifdef USE_LIBWRAP +#include +#endif + #include "rfb.h" #define NOT_FOUND_STR "HTTP/1.0 404 Not found\n\n" \ @@ -62,6 +66,7 @@ FILE* httpFP = NULL; #define BUF_SIZE 32768 static char buf[BUF_SIZE]; +static size_t buf_filled=0; /* @@ -137,6 +142,7 @@ httpCheckFds(rfbScreenInfoPtr rfbScreen) } if (FD_ISSET(rfbScreen->httpListenSock, &fds)) { + int flags; if (rfbScreen->httpSock >= 0) close(rfbScreen->httpSock); if ((rfbScreen->httpSock = accept(rfbScreen->httpListenSock, @@ -144,12 +150,27 @@ httpCheckFds(rfbScreenInfoPtr rfbScreen) rfbLogPerror("httpCheckFds: accept"); return; } +#ifdef USE_LIBWRAP + if(!hosts_ctl("vnc",STRING_UNKNOWN,inet_ntoa(addr.sin_addr), + STRING_UNKNOWN)) { + rfbLog("Rejected connection from client %s\n", + inet_ntoa(addr.sin_addr)); +#else if ((rfbScreen->httpFP = fdopen(rfbScreen->httpSock, "r+")) == NULL) { rfbLogPerror("httpCheckFds: fdopen"); +#endif close(rfbScreen->httpSock); rfbScreen->httpSock = -1; return; } + flags=fcntl(rfbScreen->httpSock,F_GETFL); + if(flags==-1 || + fcntl(rfbScreen->httpSock,F_SETFL,flags|O_NONBLOCK)==-1) { + rfbLogPerror("httpCheckFds: fcntl"); + close(rfbScreen->httpSock); + rfbScreen->httpSock=-1; + return; + } /*AddEnabledDevice(httpSock);*/ } @@ -180,11 +201,10 @@ httpProcessInput(rfbScreenInfoPtr rfbScreen) char *fname; unsigned int maxFnameLen; FILE* fd; - Bool gotGet = FALSE; Bool performSubstitutions = FALSE; char str[256]; #ifndef WIN32 - struct passwd *user = getpwuid(getuid());; + struct passwd *user = getpwuid(getuid()); #endif cl.sock=rfbScreen->httpSock; @@ -198,66 +218,74 @@ httpProcessInput(rfbScreenInfoPtr rfbScreen) fname = &fullFname[strlen(fullFname)]; maxFnameLen = 255 - strlen(fullFname); - buf[0] = '\0'; - + /* Read data from the HTTP client until we get a complete request. */ while (1) { - - /* Read lines from the HTTP client until a blank line. The only - line we need to parse is the line "GET ..." */ - - if (!fgets(buf, BUF_SIZE, rfbScreen->httpFP)) { - rfbLogPerror("httpProcessInput: fgets"); + ssize_t got = read (rfbScreen->httpSock, buf + buf_filled, + sizeof (buf) - buf_filled - 1); + + if (got <= 0) { + if (got == 0) { + rfbLog("httpd: premature connection close\n"); + } else { + if (errno == EAGAIN) { + return; + } + rfbLogPerror("httpProcessInput: read"); + } httpCloseSock(rfbScreen); return; } - if ((strcmp(buf,"\n") == 0) || (strcmp(buf,"\r\n") == 0) - || (strcmp(buf,"\r") == 0) || (strcmp(buf,"\n\r") == 0)) - /* end of client request */ + buf_filled += got; + buf[buf_filled] = '\0'; + + /* Is it complete yet (is there a blank line)? */ + if (strstr (buf, "\r\r") || strstr (buf, "\n\n") || + strstr (buf, "\r\n\r\n") || strstr (buf, "\n\r\n\r")) break; + } - if (strncmp(buf, "GET ", 4) == 0) { - gotGet = TRUE; - if (strlen(buf) > maxFnameLen) { - rfbLog("GET line too long\n"); - httpCloseSock(rfbScreen); - return; - } - - if (sscanf(buf, "GET %s HTTP/1.0", fname) != 1) { - rfbLog("couldn't parse GET line\n"); - httpCloseSock(rfbScreen); - return; - } + /* Process the request. */ + if (strncmp(buf, "GET ", 4)) { + rfbLog("no GET line\n"); + httpCloseSock(rfbScreen); + return; + } else { + /* Only use the first line. */ + buf[strcspn(buf, "\n\r")] = '\0'; + } - if (fname[0] != '/') { - rfbLog("filename didn't begin with '/'\n"); - WriteExact(&cl, NOT_FOUND_STR, strlen(NOT_FOUND_STR)); - httpCloseSock(rfbScreen); - return; - } + if (strlen(buf) > maxFnameLen) { + rfbLog("GET line too long\n"); + httpCloseSock(rfbScreen); + return; + } - if (strchr(fname+1, '/') != NULL) { - rfbLog("asking for file in other directory\n"); - WriteExact(&cl, NOT_FOUND_STR, strlen(NOT_FOUND_STR)); - httpCloseSock(rfbScreen); - return; - } + if (sscanf(buf, "GET %s HTTP/1.0", fname) != 1) { + rfbLog("couldn't parse GET line\n"); + httpCloseSock(rfbScreen); + return; + } - getpeername(rfbScreen->httpSock, (struct sockaddr *)&addr, &addrlen); - rfbLog("httpd: get '%s' for %s\n", fname+1, - inet_ntoa(addr.sin_addr)); - continue; - } + if (fname[0] != '/') { + rfbLog("filename didn't begin with '/'\n"); + WriteExact(&cl, NOT_FOUND_STR, strlen(NOT_FOUND_STR)); + httpCloseSock(rfbScreen); + return; } - if (!gotGet) { - rfbLog("no GET line\n"); + if (strchr(fname+1, '/') != NULL) { + rfbLog("asking for file in other directory\n"); + WriteExact(&cl, NOT_FOUND_STR, strlen(NOT_FOUND_STR)); httpCloseSock(rfbScreen); return; } + getpeername(rfbScreen->httpSock, (struct sockaddr *)&addr, &addrlen); + rfbLog("httpd: get '%s' for %s\n", fname+1, + inet_ntoa(addr.sin_addr)); + /* If we were asked for '/', actually read the file index.vnc */ if (strcmp(fname, "/") == 0) { @@ -274,10 +302,10 @@ httpProcessInput(rfbScreenInfoPtr rfbScreen) /* Open the file */ if ((fd = fopen(fullFname, "r")) <= 0) { - rfbLogPerror("httpProcessInput: open"); - WriteExact(&cl, NOT_FOUND_STR, strlen(NOT_FOUND_STR)); - httpCloseSock(rfbScreen); - return; + rfbLogPerror("httpProcessInput: open"); + WriteExact(&cl, NOT_FOUND_STR, strlen(NOT_FOUND_STR)); + httpCloseSock(rfbScreen); + return; } WriteExact(&cl, OK_STR, strlen(OK_STR)); diff --git a/rfbserver.c b/rfbserver.c index dbbf226..024b851 100644 --- a/rfbserver.c +++ b/rfbserver.c @@ -1208,7 +1208,8 @@ rfbSendRectEncodingRaw(cl, x, y, w, h) char *fbptr = (cl->screen->frameBuffer + (cl->screen->paddedWidthInBytes * y) + (x * (cl->screen->bitsPerPixel / 8))); - if (cl->ublen + sz_rfbFramebufferUpdateRectHeader > UPDATE_BUF_SIZE) { + /* Flush the buffer to guarantee correct alignment for translateFn(). */ + if (cl->ublen > 0) { if (!rfbSendUpdateBuf(cl)) return FALSE; } diff --git a/sockets.c b/sockets.c index 812e4f8..7164904 100644 --- a/sockets.c +++ b/sockets.c @@ -67,6 +67,13 @@ struct timeval #include #include +#ifdef USE_LIBWRAP +#include +#include +int allow_severity=LOG_INFO; +int deny_severity=LOG_WARNING; +#endif + #include "rfb.h" /*#ifndef WIN32 @@ -223,6 +230,16 @@ rfbCheckFds(rfbScreenInfoPtr rfbScreen,long usec) return; } +#ifdef USE_LIBWRAP + if(!hosts_ctl("vnc",STRING_UNKNOWN,inet_ntoa(addr.sin_addr), + STRING_UNKNOWN)) { + rfbLog("Rejected connection from client %s\n", + inet_ntoa(addr.sin_addr)); + close(sock); + return; + } +#endif + rfbLog("Got connection from client %s\n", inet_ntoa(addr.sin_addr)); rfbNewClient(rfbScreen,sock);