summaryrefslogtreecommitdiff
path: root/app/libs/libvncserver-LibVNCServer-0.9.11.patch
diff options
context:
space:
mode:
Diffstat (limited to 'app/libs/libvncserver-LibVNCServer-0.9.11.patch')
-rw-r--r--app/libs/libvncserver-LibVNCServer-0.9.11.patch236
1 files changed, 236 insertions, 0 deletions
diff --git a/app/libs/libvncserver-LibVNCServer-0.9.11.patch b/app/libs/libvncserver-LibVNCServer-0.9.11.patch
new file mode 100644
index 0000000..71adf2a
--- /dev/null
+++ b/app/libs/libvncserver-LibVNCServer-0.9.11.patch
@@ -0,0 +1,236 @@
+diff -rup a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt 2016-12-30 14:01:28.000000000 +0100
++++ b/CMakeLists.txt 2018-11-03 23:17:24.323450995 +0100
+@@ -18,7 +18,6 @@ set(VERSION_PATCHLEVEL "11")
+ set(VERSION_SO "0")
+ set(PACKAGE_VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCHLEVEL}")
+ set(PROJECT_BUGREPORT_PATH "http://sourceforge.net/projects/libvncserver")
+-set(CMAKE_C_FLAGS "-O2 -W -Wall -g")
+ set(LIBVNCSERVER_DIR ${CMAKE_CURRENT_SOURCE_DIR}/libvncserver)
+ set(COMMON_DIR ${CMAKE_CURRENT_SOURCE_DIR}/common)
+ set(LIBVNCCLIENT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/libvncclient)
+@@ -192,7 +191,7 @@ TEST_BIG_ENDIAN(LIBVNCSERVER_WORDS_BIGEN
+ # LIBVNCSERVER_ENOENT_WORKAROUND
+ # inline
+
+-configure_file(${CMAKE_CURRENT_SOURCE_DIR}/rfb/rfbconfig.h.cmake ${CMAKE_BINARY_DIR}/rfb/rfbconfig.h)
++configure_file(${CMAKE_CURRENT_SOURCE_DIR}/rfb/rfbconfig.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/rfb/rfbconfig.h)
+
+ set(LIBVNCSERVER_SOURCES
+ ${LIBVNCSERVER_DIR}/main.c
+@@ -315,6 +314,11 @@ target_link_libraries(vncserver
+ ${WEBSOCKET_LIBRARIES}
+ )
+
++target_include_directories(vncserver
++ INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}
++ INTERFACE ${CMAKE_CURRENT_BINARY_DIR}
++ )
++
+ SET_TARGET_PROPERTIES(vncclient vncserver
+ PROPERTIES SOVERSION "${VERSION_SO}" VERSION "${PACKAGE_VERSION}"
+ )
+@@ -378,19 +382,6 @@ if(HAVE_FFMPEG)
+ )
+ endif(HAVE_FFMPEG)
+
+-
+-file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/examples)
+-foreach(test ${LIBVNCSERVER_TESTS})
+- add_executable(examples_${test} ${LIBVNCSRVTEST_DIR}/${test}.c)
+- target_link_libraries(examples_${test} vncserver ${CMAKE_THREAD_LIBS_INIT})
+-endforeach(test ${LIBVNCSERVER_TESTS})
+-
+-file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/client_examples)
+-foreach(test ${LIBVNCCLIENT_TESTS})
+- add_executable(client_examples_${test} ${LIBVNCCLITEST_DIR}/${test}.c ${LIBVNCCLITEST_DIR}/${${test}_EXTRA_SOURCES} )
+- target_link_libraries(client_examples_${test} vncclient ${CMAKE_THREAD_LIBS_INIT} ${X11_LIBRARIES} ${SDL_LIBRARY} ${FFMPEG_LIBRARIES})
+-endforeach(test ${LIBVNCCLIENT_TESTS})
+-
+ install_targets(/lib vncserver)
+ install_targets(/lib vncclient)
+ install_files(/include/rfb FILES
+diff -rup a/libvncclient/listen.c b/libvncclient/listen.c
+--- a/libvncclient/listen.c 2016-12-30 14:01:28.000000000 +0100
++++ b/libvncclient/listen.c 2018-11-03 23:17:24.318450981 +0100
+@@ -85,7 +85,7 @@ listenForIncomingConnections(rfbClient*
+ int r;
+ /* reap any zombies */
+ int status, pid;
+- while ((pid= wait3(&status, WNOHANG, (struct rusage *)0))>0);
++ while ((pid = waitpid(-1, &status, WNOHANG))>0);
+
+ /* TODO: callback for discard any events (like X11 events) */
+
+diff -rup a/libvncclient/tls_openssl.c b/libvncclient/tls_openssl.c
+--- a/libvncclient/tls_openssl.c 2016-12-30 14:01:28.000000000 +0100
++++ b/libvncclient/tls_openssl.c 2018-11-03 23:17:24.318450981 +0100
+@@ -189,7 +189,7 @@ ssl_verify (int ok, X509_STORE_CTX *ctx)
+
+ ssl = X509_STORE_CTX_get_ex_data (ctx, SSL_get_ex_data_X509_STORE_CTX_idx ());
+
+- client = SSL_CTX_get_app_data (ssl->ctx);
++ client = SSL_CTX_get_app_data (SSL_get_SSL_CTX (ssl));
+
+ cert = X509_STORE_CTX_get_current_cert (ctx);
+ err = X509_STORE_CTX_get_error (ctx);
+@@ -287,11 +287,10 @@ open_ssl_connection (rfbClient *client,
+ {
+ if (wait_for_data(ssl, n, 1) != 1)
+ {
+- finished = 1;
+- if (ssl->ctx)
+- SSL_CTX_free (ssl->ctx);
+- SSL_free(ssl);
++ finished = 1;
+ SSL_shutdown (ssl);
++ SSL_free(ssl);
++ SSL_CTX_free (ssl_ctx);
+
+ return NULL;
+ }
+@@ -365,10 +364,11 @@ return TRUE;
+ static rfbBool
+ ReadVeNCryptSecurityType(rfbClient* client, uint32_t *result)
+ {
++ static const unsigned int max_auth = 256;
+ uint8_t count=0;
+ uint8_t loop=0;
+ uint8_t flag=0;
+- uint32_t tAuth[256], t;
++ uint32_t tAuth[max_auth], t;
+ char buf1[500],buf2[10];
+ uint32_t authScheme;
+
+@@ -380,9 +380,9 @@ ReadVeNCryptSecurityType(rfbClient* clie
+ return FALSE;
+ }
+
+- if (count>sizeof(tAuth))
++ if (count>=max_auth)
+ {
+- rfbClientLog("%d security types are too many; maximum is %d\n", count, sizeof(tAuth));
++ rfbClientLog("%d security types are too many; maximum is %d\n", count, max_auth);
+ return FALSE;
+ }
+
+diff -rup a/libvncserver/main.c b/libvncserver/main.c
+--- a/libvncserver/main.c 2016-12-30 14:01:28.000000000 +0100
++++ b/libvncserver/main.c 2018-11-03 23:17:24.320450987 +0100
+@@ -561,6 +561,7 @@ clientInput(void *data)
+ }
+ }
+
++ rfbLog("input: waiting for output thread");
+ /* Get rid of the output thread. */
+ LOCK(cl->updateMutex);
+ TSIGNAL(cl->updateCond);
+@@ -569,6 +570,8 @@ clientInput(void *data)
+
+ rfbClientConnectionGone(cl);
+
++ rfbLog("input: exit thread");
++
+ return NULL;
+ }
+
+@@ -945,7 +948,7 @@ rfbScreenInfoPtr rfbGetScreen(int* argc,
+ void rfbNewFramebuffer(rfbScreenInfoPtr screen, char *framebuffer,
+ int width, int height,
+ int bitsPerSample, int samplesPerPixel,
+- int bytesPerPixel)
++ int bytesPerPixel, int bytesPerRow)
+ {
+ rfbPixelFormat old_format;
+ rfbBool format_changed = FALSE;
+@@ -962,7 +965,7 @@ void rfbNewFramebuffer(rfbScreenInfoPtr
+ screen->width = width;
+ screen->height = height;
+ screen->bitsPerPixel = screen->depth = 8*bytesPerPixel;
+- screen->paddedWidthInBytes = width*bytesPerPixel;
++ screen->paddedWidthInBytes = bytesPerRow;
+
+ rfbInitServerFormat(screen, bitsPerSample);
+
+@@ -1062,22 +1065,30 @@ void rfbInitServer(rfbScreenInfoPtr scre
+ #endif
+ }
+
+-void rfbShutdownServer(rfbScreenInfoPtr screen,rfbBool disconnectClients) {
++void rfbShutdownServer(rfbScreenInfoPtr screen, rfbBool disconnectClients) {
++ rfbShutdownSockets(screen);
++ rfbHttpShutdownSockets(screen);
++
+ if(disconnectClients) {
+ rfbClientPtr cl;
+- rfbClientIteratorPtr iter = rfbGetClientIterator(screen);
+- while( (cl = rfbClientIteratorNext(iter)) ) {
+- if (cl->sock > -1) {
+- /* we don't care about maxfd here, because the server goes away */
+- rfbCloseClient(cl);
+- rfbClientConnectionGone(cl);
+- }
++
++ cl = screen->clientHead;
++
++ while (cl) {
++ rfbClientPtr next = cl->next;
++ if (cl->sock != -1) {
++ rfbCloseClient(cl);
++ if (screen->backgroundLoop) {
++ pthread_join(cl->client_thread, NULL);
++ } else {
++ rfbClientConnectionGone(cl);
++ }
++ }
++ cl = next;
+ }
+- rfbReleaseClientIterator(iter);
+ }
+
+- rfbShutdownSockets(screen);
+- rfbHttpShutdownSockets(screen);
++
+ }
+
+ #ifndef LIBVNCSERVER_HAVE_GETTIMEOFDAY
+diff -rup a/libvncserver/rfbserver.c b/libvncserver/rfbserver.c
+--- a/libvncserver/rfbserver.c 2016-12-30 14:01:28.000000000 +0100
++++ b/libvncserver/rfbserver.c 2018-11-03 23:17:24.320450987 +0100
+@@ -552,8 +552,10 @@ rfbClientConnectionGone(rfbClientPtr cl)
+ do {
+ LOCK(cl->refCountMutex);
+ i=cl->refCount;
+- if(i>0)
+- WAIT(cl->deleteCond,cl->refCountMutex);
++ if(i>0) {
++ rfbLog("Client %s still has %d refs\n",cl->host, i);
++ WAIT(cl->deleteCond, cl->refCountMutex);
++ }
+ UNLOCK(cl->refCountMutex);
+ } while(i>0);
+ }
+diff -rup a/libvncserver/rfbssl_openssl.c b/libvncserver/rfbssl_openssl.c
+--- a/libvncserver/rfbssl_openssl.c 2016-12-30 14:01:28.000000000 +0100
++++ b/libvncserver/rfbssl_openssl.c 2018-11-03 23:17:24.320450987 +0100
+@@ -56,7 +56,7 @@ int rfbssl_init(rfbClientPtr cl)
+ rfbErr("OOM\n");
+ } else if (!cl->screen->sslcertfile || !cl->screen->sslcertfile[0]) {
+ rfbErr("SSL connection but no cert specified\n");
+- } else if (NULL == (ctx->ssl_ctx = SSL_CTX_new(TLSv1_server_method()))) {
++ } else if (NULL == (ctx->ssl_ctx = SSL_CTX_new(TLS_server_method()))) {
+ rfbssl_error();
+ } else if (SSL_CTX_use_PrivateKey_file(ctx->ssl_ctx, keyfile, SSL_FILETYPE_PEM) <= 0) {
+ rfbErr("Unable to load private key file %s\n", keyfile);
+diff -rup a/rfb/rfb.h b/rfb/rfb.h
+--- a/rfb/rfb.h 2016-12-30 14:01:28.000000000 +0100
++++ b/rfb/rfb.h 2018-11-03 23:17:24.320450987 +0100
+@@ -1034,7 +1034,7 @@ extern void rfbInitServer(rfbScreenInfoP
+ extern void rfbShutdownServer(rfbScreenInfoPtr rfbScreen,rfbBool disconnectClients);
+ extern void rfbNewFramebuffer(rfbScreenInfoPtr rfbScreen,char *framebuffer,
+ int width,int height, int bitsPerSample,int samplesPerPixel,
+- int bytesPerPixel);
++ int bytesPerPixel, int bytesPerRow);
+
+ extern void rfbScreenCleanup(rfbScreenInfoPtr screenInfo);
+ extern void rfbSetServerVersionIdentity(rfbScreenInfoPtr screen, char *fmt, ...);