diff --git a/U_Add-xorg-xserver-1.19-support.patch b/U_Add-xorg-xserver-1.19-support.patch deleted file mode 100644 index 8585724..0000000 --- a/U_Add-xorg-xserver-1.19-support.patch +++ /dev/null @@ -1,550 +0,0 @@ -From 3fed95eda27dfbeee6535f987f5d14a66f64749b Mon Sep 17 00:00:00 2001 -From: Hans de Goede -Date: Wed, 5 Oct 2016 11:15:27 +0200 -Subject: [PATCH] Add xorg-xserver 1.19 support - ---- - unix/xserver/hw/vnc/XserverDesktop.cc | 183 ++++++++++++++++++++++++++++++++++ - unix/xserver/hw/vnc/XserverDesktop.h | 7 ++ - unix/xserver/hw/vnc/vncBlockHandler.c | 19 ++++ - unix/xserver/hw/vnc/vncExtInit.cc | 13 +++ - unix/xserver/hw/vnc/vncExtInit.h | 5 + - unix/xserver/hw/vnc/vncHooks.c | 21 +++- - unix/xserver/hw/vnc/xorg-version.h | 4 +- - unix/xserver119.patch | 95 ++++++++++++++++++ - 8 files changed, 343 insertions(+), 4 deletions(-) - create mode 100644 unix/xserver119.patch - -diff --git a/unix/xserver/hw/vnc/XserverDesktop.cc b/unix/xserver/hw/vnc/XserverDesktop.cc -index 4f82a54..8cc0b0b 100644 ---- a/unix/xserver/hw/vnc/XserverDesktop.cc -+++ b/unix/xserver/hw/vnc/XserverDesktop.cc -@@ -90,6 +90,30 @@ public: - XserverDesktop* desktop; - }; - -+#if XORG >= 119 -+extern "C" { -+/* -+ * xserver NotifyFd callbacks. Note we also expect write notifies to work, -+ * which only works with xserver >= 1.19. -+ */ -+#include "os.h" -+ -+static void HandleListenFd(int fd, int xevents, void *data) -+{ -+ XserverDesktop *desktop = (XserverDesktop *)data; -+ -+ desktop->handleListenFd(fd); -+} -+ -+static void HandleSocketFd(int fd, int xevents, void *data) -+{ -+ XserverDesktop *desktop = (XserverDesktop *)data; -+ -+ desktop->handleSocketFd(fd, xevents); -+} -+ -+} -+#endif - - XserverDesktop::XserverDesktop(int screenIndex_, - std::list listeners_, -@@ -111,15 +135,35 @@ XserverDesktop::XserverDesktop(int screenIndex_, - - if (!httpListeners.empty ()) - httpServer = new FileHTTPServer(this); -+ -+#if XORG >= 119 -+ for (std::list::iterator i = listeners.begin(); -+ i != listeners.end(); -+ i++) { -+ SetNotifyFd((*i)->getFd(), HandleListenFd, X_NOTIFY_READ, this); -+ } -+ -+ for (std::list::iterator i = httpListeners.begin(); -+ i != httpListeners.end(); -+ i++) { -+ SetNotifyFd((*i)->getFd(), HandleListenFd, X_NOTIFY_READ, this); -+ } -+#endif - } - - XserverDesktop::~XserverDesktop() - { - while (!listeners.empty()) { -+#if XORG >= 119 -+ RemoveNotifyFd(listeners.back()->getFd()); -+#endif - delete listeners.back(); - listeners.pop_back(); - } - while (!httpListeners.empty()) { -+#if XORG >= 119 -+ RemoveNotifyFd(listeners.back()->getFd()); -+#endif - delete httpListeners.back(); - httpListeners.pop_back(); - } -@@ -389,6 +433,140 @@ void XserverDesktop::add_copied(const rfb::Region &dest, const rfb::Point &delta - } - } - -+#if XORG >= 119 -+void XserverDesktop::handleListenFd(int fd) -+{ -+ std::list::iterator i; -+ SocketServer *fd_server = NULL; -+ bool is_http = false; -+ -+ for (i = listeners.begin(); i != listeners.end(); i++) { -+ if ((*i)->getFd() == fd) { -+ fd_server = server; -+ break; -+ } -+ } -+ if (httpServer && !fd_server) { -+ for (i = httpListeners.begin(); i != httpListeners.end(); i++) { -+ if ((*i)->getFd() == fd) { -+ fd_server = httpServer; -+ is_http = true; -+ break; -+ } -+ } -+ } -+ if (!fd_server) { -+ vlog.error("XserverDesktop::handleListenFd: Error cannot find fd"); -+ return; -+ } -+ -+ Socket* sock = (*i)->accept(); -+ sock->outStream().setBlocking(false); -+ vlog.debug("new %sclient, sock %d", is_http ? "http " : "", sock->getFd()); -+ fd_server->addSocket(sock); -+ SetNotifyFd(sock->getFd(), HandleSocketFd, X_NOTIFY_READ, this); -+} -+ -+void XserverDesktop::handleSocketFd(int fd, int xevents) -+{ -+ std::list sockets; -+ std::list::iterator i; -+ SocketServer *fd_server = NULL; -+ bool is_http = false; -+ -+ server->getSockets(&sockets); -+ for (i = sockets.begin(); i != sockets.end(); i++) { -+ if ((*i)->getFd() == fd) { -+ fd_server = server; -+ break; -+ } -+ } -+ if (httpServer && !fd_server) { -+ httpServer->getSockets(&sockets); -+ for (i = sockets.begin(); i != sockets.end(); i++) { -+ if ((*i)->getFd() == fd) { -+ fd_server = httpServer; -+ is_http = true; -+ break; -+ } -+ } -+ } -+ if (!fd_server) { -+ vlog.error("XserverDesktop::handleSocketFd: Error cannot find fd"); -+ return; -+ } -+ -+ if (xevents & X_NOTIFY_READ) -+ fd_server->processSocketReadEvent(*i); -+ -+ if (xevents & X_NOTIFY_WRITE) -+ fd_server->processSocketWriteEvent(*i); -+ -+ if ((*i)->isShutdown()) { -+ vlog.debug("%sclient gone, sock %d", is_http ? "http " : "", fd); -+ RemoveNotifyFd(fd); -+ fd_server->removeSocket(*i); -+ if (!is_http) -+ vncClientGone(fd); -+ delete (*i); -+ } -+} -+ -+void XserverDesktop::blockHandler(int* timeout) -+{ -+ // We don't have a good callback for when we can init input devices[1], -+ // so we abuse the fact that this routine will be called first thing -+ // once the dix is done initialising. -+ // [1] Technically Xvnc has InitInput(), but libvnc.so has nothing. -+ vncInitInputDevice(); -+ -+ try { -+ std::list sockets; -+ std::list::iterator i; -+ server->getSockets(&sockets); -+ for (i = sockets.begin(); i != sockets.end(); i++) { -+ int fd = (*i)->getFd(); -+ if ((*i)->isShutdown()) { -+ vlog.debug("client gone, sock %d",fd); -+ server->removeSocket(*i); -+ vncClientGone(fd); -+ delete (*i); -+ } else { -+ /* Update existing NotifyFD to listen for write (or not) */ -+ if ((*i)->outStream().bufferUsage() > 0) -+ SetNotifyFd(fd, HandleSocketFd, X_NOTIFY_READ | X_NOTIFY_WRITE, this); -+ else -+ SetNotifyFd(fd, HandleSocketFd, X_NOTIFY_READ, this); -+ } -+ } -+ if (httpServer) { -+ httpServer->getSockets(&sockets); -+ for (i = sockets.begin(); i != sockets.end(); i++) { -+ int fd = (*i)->getFd(); -+ if ((*i)->isShutdown()) { -+ vlog.debug("http client gone, sock %d",fd); -+ httpServer->removeSocket(*i); -+ delete (*i); -+ } else { -+ /* Update existing NotifyFD to listen for write (or not) */ -+ if ((*i)->outStream().bufferUsage() > 0) -+ SetNotifyFd(fd, HandleSocketFd, X_NOTIFY_READ | X_NOTIFY_WRITE, this); -+ else -+ SetNotifyFd(fd, HandleSocketFd, X_NOTIFY_READ, this); -+ } -+ } -+ } -+ -+ int nextTimeout = server->checkTimeouts(); -+ if (nextTimeout > 0 && (*timeout == -1 || nextTimeout < *timeout)) -+ *timeout = nextTimeout; -+ } catch (rdr::Exception& e) { -+ vlog.error("XserverDesktop::blockHandler: %s",e.str()); -+ } -+} -+ -+#else -+ - void XserverDesktop::readBlockHandler(fd_set* fds, struct timeval ** timeout) - { - // We don't have a good callback for when we can init input devices[1], -@@ -603,10 +781,15 @@ void XserverDesktop::writeWakeupHandler(fd_set* fds, int nfds) - } - } - -+#endif -+ - void XserverDesktop::addClient(Socket* sock, bool reverse) - { - vlog.debug("new client, sock %d reverse %d",sock->getFd(),reverse); - server->addSocket(sock, reverse); -+#if XORG >= 119 -+ SetNotifyFd(sock->getFd(), HandleSocketFd, X_NOTIFY_READ, this); -+#endif - } - - void XserverDesktop::disconnectClients() -diff --git a/unix/xserver/hw/vnc/XserverDesktop.h b/unix/xserver/hw/vnc/XserverDesktop.h -index c069028..9e77627 100644 ---- a/unix/xserver/hw/vnc/XserverDesktop.h -+++ b/unix/xserver/hw/vnc/XserverDesktop.h -@@ -38,6 +38,7 @@ - #include - #include - #include "Input.h" -+#include "xorg-version.h" - - namespace rfb { - class VNCServerST; -@@ -69,10 +70,16 @@ public: - const unsigned char *rgbaData); - void add_changed(const rfb::Region ®ion); - void add_copied(const rfb::Region &dest, const rfb::Point &delta); -+#if XORG >= 119 -+ void handleListenFd(int fd); -+ void handleSocketFd(int fd, int xevents); -+ void blockHandler(int* timeout); -+#else - void readBlockHandler(fd_set* fds, struct timeval ** timeout); - void readWakeupHandler(fd_set* fds, int nfds); - void writeBlockHandler(fd_set* fds, struct timeval ** timeout); - void writeWakeupHandler(fd_set* fds, int nfds); -+#endif - void addClient(network::Socket* sock, bool reverse); - void disconnectClients(); - -diff --git a/unix/xserver/hw/vnc/vncBlockHandler.c b/unix/xserver/hw/vnc/vncBlockHandler.c -index 4e44478..baebc3d 100644 ---- a/unix/xserver/hw/vnc/vncBlockHandler.c -+++ b/unix/xserver/hw/vnc/vncBlockHandler.c -@@ -30,6 +30,23 @@ - - #include "vncExtInit.h" - #include "vncBlockHandler.h" -+#include "xorg-version.h" -+ -+#if XORG >= 119 -+ -+static void vncBlockHandler(void* data, void* timeout) -+{ -+ vncCallBlockHandlers(timeout); -+} -+ -+void vncRegisterBlockHandlers(void) -+{ -+ if (!RegisterBlockAndWakeupHandlers(vncBlockHandler, -+ (ServerWakeupHandlerProcPtr)NoopDDA, 0)) -+ FatalError("RegisterBlockAndWakeupHandlers() failed\n"); -+} -+ -+#else - - static void vncBlockHandler(void * data, OSTimePtr t, void * readmask); - static void vncWakeupHandler(void * data, int nfds, void * readmask); -@@ -144,3 +161,5 @@ static void vncWriteWakeupHandlerFallback(void) - - vncWriteWakeupHandler(ret, &fallbackFds); - } -+ -+#endif -diff --git a/unix/xserver/hw/vnc/vncExtInit.cc b/unix/xserver/hw/vnc/vncExtInit.cc -index dea3cb8..9d70e44 100644 ---- a/unix/xserver/hw/vnc/vncExtInit.cc -+++ b/unix/xserver/hw/vnc/vncExtInit.cc -@@ -249,6 +249,17 @@ int vncExtensionIsActive(int scrIdx) - return (desktop[scrIdx] != NULL); - } - -+#if XORG >= 119 -+ -+void vncCallBlockHandlers(int* timeout) -+{ -+ for (int scr = 0; scr < vncGetScreenCount(); scr++) -+ if (desktop[scr]) -+ desktop[scr]->blockHandler(timeout); -+} -+ -+#else -+ - void vncCallReadBlockHandlers(fd_set * fds, struct timeval ** timeout) - { - for (int scr = 0; scr < vncGetScreenCount(); scr++) -@@ -277,6 +288,8 @@ void vncCallWriteWakeupHandlers(fd_set * fds, int nfds) - desktop[scr]->writeWakeupHandler(fds, nfds); - } - -+#endif -+ - int vncGetAvoidShiftNumLock(void) - { - return (bool)avoidShiftNumLock; -diff --git a/unix/xserver/hw/vnc/vncExtInit.h b/unix/xserver/hw/vnc/vncExtInit.h -index 9785d11..3164528 100644 ---- a/unix/xserver/hw/vnc/vncExtInit.h -+++ b/unix/xserver/hw/vnc/vncExtInit.h -@@ -22,6 +22,7 @@ - #include - #include - #include -+#include "xorg-version.h" - - // Only from C++ - #ifdef __cplusplus -@@ -50,10 +51,14 @@ extern int vncInetdSock; - void vncExtensionInit(void); - int vncExtensionIsActive(int scrIdx); - -+#if XORG >= 119 -+void vncCallBlockHandlers(int* timeout); -+#else - void vncCallReadBlockHandlers(fd_set * fds, struct timeval ** timeout); - void vncCallReadWakeupHandlers(fd_set * fds, int nfds); - void vncCallWriteBlockHandlers(fd_set * fds, struct timeval ** timeout); - void vncCallWriteWakeupHandlers(fd_set * fds, int nfds); -+#endif - - int vncGetAvoidShiftNumLock(void); - -diff --git a/unix/xserver/hw/vnc/vncHooks.c b/unix/xserver/hw/vnc/vncHooks.c -index 22ea9ea..29f3f8b 100644 ---- a/unix/xserver/hw/vnc/vncHooks.c -+++ b/unix/xserver/hw/vnc/vncHooks.c -@@ -128,9 +128,11 @@ static Bool vncHooksDisplayCursor(DeviceIntPtr pDev, - #if XORG <= 112 - static void vncHooksBlockHandler(int i, pointer blockData, pointer pTimeout, - pointer pReadmask); --#else -+#elif XORG <= 118 - static void vncHooksBlockHandler(ScreenPtr pScreen, void * pTimeout, - void * pReadmask); -+#else -+static void vncHooksBlockHandler(ScreenPtr pScreen, void * pTimeout); - #endif - #ifdef RENDER - static void vncHooksComposite(CARD8 op, PicturePtr pSrc, PicturePtr pMask, -@@ -716,9 +718,11 @@ out: - #if XORG <= 112 - static void vncHooksBlockHandler(int i, pointer blockData, pointer pTimeout, - pointer pReadmask) --#else -+#elif XORG <= 118 - static void vncHooksBlockHandler(ScreenPtr pScreen_, void * pTimeout, - void * pReadmask) -+#else -+static void vncHooksBlockHandler(ScreenPtr pScreen_, void * pTimeout) - #endif - { - #if XORG <= 112 -@@ -731,8 +735,10 @@ static void vncHooksBlockHandler(ScreenPtr pScreen_, void * pTimeout, - - #if XORG <= 112 - (*pScreen->BlockHandler) (i, blockData, pTimeout, pReadmask); --#else -+#elif XORG <= 118 - (*pScreen->BlockHandler) (pScreen, pTimeout, pReadmask); -+#else -+ (*pScreen->BlockHandler) (pScreen, pTimeout); - #endif - - vncHooksScreen->ignoreHooks--; -@@ -1033,12 +1039,21 @@ static void vncHooksCopyClip(GCPtr dst, GCPtr src) { - - // Unwrap and rewrap helpers - -+#if XORG >= 116 -+#define GC_OP_PROLOGUE(pGC, name)\ -+ vncHooksGCPtr pGCPriv = vncHooksGCPrivate(pGC);\ -+ const GCFuncs *oldFuncs = pGC->funcs;\ -+ pGC->funcs = pGCPriv->wrappedFuncs;\ -+ pGC->ops = pGCPriv->wrappedOps; \ -+ DBGPRINT((stderr,"vncHooks" #name " called\n")) -+#else - #define GC_OP_PROLOGUE(pGC, name)\ - vncHooksGCPtr pGCPriv = vncHooksGCPrivate(pGC);\ - GCFuncs *oldFuncs = pGC->funcs;\ - pGC->funcs = pGCPriv->wrappedFuncs;\ - pGC->ops = pGCPriv->wrappedOps; \ - DBGPRINT((stderr,"vncHooks" #name " called\n")) -+#endif - - #define GC_OP_EPILOGUE(pGC)\ - pGCPriv->wrappedOps = pGC->ops;\ -diff --git a/unix/xserver/hw/vnc/xorg-version.h b/unix/xserver/hw/vnc/xorg-version.h -index 60610cb..9d1c0eb 100644 ---- a/unix/xserver/hw/vnc/xorg-version.h -+++ b/unix/xserver/hw/vnc/xorg-version.h -@@ -50,8 +50,10 @@ - #define XORG 117 - #elif XORG_VERSION_CURRENT < ((1 * 10000000) + (18 * 100000) + (99 * 1000)) - #define XORG 118 -+#elif XORG_VERSION_CURRENT < ((1 * 10000000) + (19 * 100000) + (99 * 1000)) -+#define XORG 119 - #else --#error "X.Org newer than 1.18 is not supported" -+#error "X.Org newer than 1.19 is not supported" - #endif - - #endif -diff --git a/unix/xserver119.patch b/unix/xserver119.patch -new file mode 100644 -index 0000000..614f104 ---- /dev/null -+++ b/unix/xserver119.patch -@@ -0,0 +1,95 @@ -+diff -up xserver/configure.ac.xserver116-rebased xserver/configure.ac -+--- xserver/configure.ac.xserver116-rebased 2016-09-29 13:14:45.595441590 +0200 -++++ xserver/configure.ac 2016-09-29 13:14:45.631442006 +0200 -+@@ -74,6 +74,7 @@ dnl forcing an entire recompile.x -+ AC_CONFIG_HEADERS(include/version-config.h) -+ -+ AM_PROG_AS -++AC_PROG_CXX -+ AC_PROG_LN_S -+ LT_PREREQ([2.2]) -+ LT_INIT([disable-static win32-dll]) -+@@ -1863,6 +1864,10 @@ if test "x$XVFB" = xyes; then -+ AC_SUBST([XVFB_SYS_LIBS]) -+ fi -+ -++dnl Xvnc DDX -++AC_SUBST([XVNC_CPPFLAGS], ["-DHAVE_DIX_CONFIG_H $XSERVER_CFLAGS"]) -++AC_SUBST([XVNC_LIBS], ["$FB_LIB $FIXES_LIB $XEXT_LIB $CONFIG_LIB $DBE_LIB $RECORD_LIB $GLX_LIBS $RANDR_LIB $RENDER_LIB $DAMAGE_LIB $DRI3_LIB $PRESENT_LIB $MIEXT_SYNC_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $XI_LIB $XKB_LIB $XKB_STUB_LIB $COMPOSITE_LIB $MAIN_LIB"]) -++AC_SUBST([XVNC_SYS_LIBS], ["$GLX_SYS_LIBS"]) -+ -+ dnl Xnest DDX -+ -+@@ -1898,6 +1903,8 @@ if test "x$XORG" = xauto; then -+ fi -+ AC_MSG_RESULT([$XORG]) -+ -++AC_DEFINE_UNQUOTED(XORG_VERSION_CURRENT, [$VENDOR_RELEASE], [Current Xorg version]) -++ -+ if test "x$XORG" = xyes; then -+ XORG_DDXINCS='-I$(top_srcdir)/hw/xfree86 -I$(top_srcdir)/hw/xfree86/include -I$(top_srcdir)/hw/xfree86/common' -+ XORG_OSINCS='-I$(top_srcdir)/hw/xfree86/os-support -I$(top_srcdir)/hw/xfree86/os-support/bus -I$(top_srcdir)/os' -+@@ -2116,7 +2123,6 @@ if test "x$XORG" = xyes; then -+ AC_DEFINE(XORG_SERVER, 1, [Building Xorg server]) -+ AC_DEFINE(XORGSERVER, 1, [Building Xorg server]) -+ AC_DEFINE(XFree86Server, 1, [Building XFree86 server]) -+- AC_DEFINE_UNQUOTED(XORG_VERSION_CURRENT, [$VENDOR_RELEASE], [Current Xorg version]) -+ AC_DEFINE(NEED_XF86_TYPES, 1, [Need XFree86 typedefs]) -+ AC_DEFINE(NEED_XF86_PROTOTYPES, 1, [Need XFree86 helper functions]) -+ AC_DEFINE(__XSERVERNAME__, "Xorg", [Name of X server]) -+@@ -2691,6 +2697,7 @@ hw/dmx/Makefile -+ hw/dmx/man/Makefile -+ hw/vfb/Makefile -+ hw/vfb/man/Makefile -++hw/vnc/Makefile -+ hw/xnest/Makefile -+ hw/xnest/man/Makefile -+ hw/xwin/Makefile -+diff -up xserver/hw/Makefile.am.xserver116-rebased xserver/hw/Makefile.am -+--- xserver/hw/Makefile.am.xserver116-rebased 2016-09-29 13:14:45.601441659 +0200 -++++ xserver/hw/Makefile.am 2016-09-29 13:14:45.631442006 +0200 -+@@ -38,7 +38,8 @@ SUBDIRS = \ -+ $(DMX_SUBDIRS) \ -+ $(KDRIVE_SUBDIRS) \ -+ $(XQUARTZ_SUBDIRS) \ -+- $(XWAYLAND_SUBDIRS) -++ $(XWAYLAND_SUBDIRS) \ -++ vnc -+ -+ DIST_SUBDIRS = dmx xfree86 vfb xnest xwin xquartz kdrive xwayland -+ -+diff -up xserver/mi/miinitext.c.xserver116-rebased xserver/mi/miinitext.c -+--- xserver/mi/miinitext.c.xserver116-rebased 2016-09-29 13:14:45.618441855 +0200 -++++ xserver/mi/miinitext.c 2016-09-29 13:14:45.631442006 +0200 -+@@ -114,6 +114,10 @@ SOFTWARE. -+ #include "micmap.h" -+ #include "globals.h" -+ -++#ifdef TIGERVNC -++extern void vncExtensionInit(INITARGS); -++#endif -++ -+ /* The following is only a small first step towards run-time -+ * configurable extensions. -+ */ -+@@ -238,6 +242,9 @@ EnableDisableExtensionError(const char * -+ -+ /* List of built-in (statically linked) extensions */ -+ static const ExtensionModule staticExtensions[] = { -++#ifdef TIGERVNC -++ {vncExtensionInit, "VNC-EXTENSION", NULL}, -++#endif -+ {GEExtensionInit, "Generic Event Extension", &noGEExtension}, -+ {ShapeExtensionInit, "SHAPE", NULL}, -+ #ifdef MITSHM -+--- xserver/include/os.h~ 2016-10-03 09:07:29.000000000 +0200 -++++ xserver/include/os.h 2016-10-03 14:13:00.013654506 +0200 -+@@ -621,7 +621,7 @@ -+ extern _X_EXPORT void -+ LogClose(enum ExitCode error); -+ extern _X_EXPORT Bool -+-LogSetParameter(LogParameter param, int value); -++LogSetParameter(enum _LogParameter param, int value); -+ extern _X_EXPORT void -+ LogVWrite(int verb, const char *f, va_list args) -+ _X_ATTRIBUTE_PRINTF(2, 0); --- -2.6.6 - diff --git a/U_tigervnc-fix-inetd-not-working-with-xserver-1-19.patch b/U_tigervnc-fix-inetd-not-working-with-xserver-1-19.patch deleted file mode 100644 index 469fa9c..0000000 --- a/U_tigervnc-fix-inetd-not-working-with-xserver-1-19.patch +++ /dev/null @@ -1,43 +0,0 @@ -Git-commit: 712cf8673d6e57442f41636e44020f5e1839c7f8 -Patch-Mainline: Upstream -Author: Hans de Goede -Subject: Fix -inetd not working with xserver >= 1.19 -Signed-off-by: Michal Srb - -xserver 1.19's OsInit will create a pollfd, followed by checking if fd 2 / -stderr is writable and if it is not, replacing fd 2 with /dev/null. - -Since we close stderr in inetd mode to avoid xserver messages being send -to the client as vnc data, the pollfd becomes fd 2, only to be replaced -by /dev/null since a pollfd is not writable. - -This commit fixes this by opening /dev/null directly after the close(2), -avoiding that the pollfd becomes fd 2. - -Alan Coopersmith: Change to use dup2() for atomic switch of fd - -Signed-off-by: Hans de Goede - -diff --git a/unix/xserver/hw/vnc/xvnc.c b/unix/xserver/hw/vnc/xvnc.c -index c5b684d..ef30d69 100644 ---- a/unix/xserver/hw/vnc/xvnc.c -+++ b/unix/xserver/hw/vnc/xvnc.c -@@ -572,9 +572,17 @@ ddxProcessArgument(int argc, char *argv[], int i) - - if (strcmp(argv[i], "-inetd") == 0) - { -+ int nullfd; -+ - dup2(0,3); - vncInetdSock = 3; -- close(2); -+ -+ /* Avoid xserver >= 1.19's epoll-fd becoming fd 2 / stderr only to be -+ replaced by /dev/null by OsInit() because the pollfd is not -+ writable, breaking ospoll_wait(). */ -+ nullfd = open("/dev/null", O_WRONLY); -+ dup2(nullfd, 2); -+ close(nullfd); - - if (!displaySpecified) { - int port = vncGetSocketPort(vncInetdSock); diff --git a/tigervnc-clean-pressed-key-on-exit.patch b/tigervnc-clean-pressed-key-on-exit.patch index 338065d..e7c95ea 100644 --- a/tigervnc-clean-pressed-key-on-exit.patch +++ b/tigervnc-clean-pressed-key-on-exit.patch @@ -1,21 +1,21 @@ -Index: tigervnc-1.7.0/vncviewer/DesktopWindow.cxx +Index: tigervnc-1.8.0/vncviewer/DesktopWindow.cxx =================================================================== ---- tigervnc-1.7.0.orig/vncviewer/DesktopWindow.cxx -+++ tigervnc-1.7.0/vncviewer/DesktopWindow.cxx -@@ -177,6 +177,8 @@ DesktopWindow::~DesktopWindow() +--- tigervnc-1.8.0.orig/vncviewer/DesktopWindow.cxx ++++ tigervnc-1.8.0/vncviewer/DesktopWindow.cxx +@@ -206,6 +206,8 @@ DesktopWindow::~DesktopWindow() - OptionsDialog::removeCallback(handleOptions); + delete statsGraph; + delete viewport; + // FLTK automatically deletes all child widgets, so we shouldn't touch // them ourselves here } -Index: tigervnc-1.7.0/vncviewer/Viewport.cxx +Index: tigervnc-1.8.0/vncviewer/Viewport.cxx =================================================================== ---- tigervnc-1.7.0.orig/vncviewer/Viewport.cxx -+++ tigervnc-1.7.0/vncviewer/Viewport.cxx -@@ -140,6 +140,11 @@ Viewport::Viewport(int w, int h, const r +--- tigervnc-1.8.0.orig/vncviewer/Viewport.cxx ++++ tigervnc-1.8.0/vncviewer/Viewport.cxx +@@ -131,6 +131,11 @@ Viewport::Viewport(int w, int h, const r Viewport::~Viewport() { @@ -27,10 +27,10 @@ Index: tigervnc-1.7.0/vncviewer/Viewport.cxx // Unregister all timeouts in case they get a change tro trigger // again later when this object is already gone. Fl::remove_timeout(handlePointerTimeout, this); -Index: tigervnc-1.7.0/vncviewer/vncviewer.cxx +Index: tigervnc-1.8.0/vncviewer/vncviewer.cxx =================================================================== ---- tigervnc-1.7.0.orig/vncviewer/vncviewer.cxx -+++ tigervnc-1.7.0/vncviewer/vncviewer.cxx +--- tigervnc-1.8.0.orig/vncviewer/vncviewer.cxx ++++ tigervnc-1.8.0/vncviewer/vncviewer.cxx @@ -107,6 +107,8 @@ static const char *about_text() return buffer; } diff --git a/tigervnc.changes b/tigervnc.changes index 3553caa..d995cc1 100644 --- a/tigervnc.changes +++ b/tigervnc.changes @@ -1,3 +1,24 @@ +------------------------------------------------------------------- +Wed May 31 11:33:52 UTC 2017 - msrb@suse.com + +- Update to tigervnc 1.8.0 + * Overhaul of the Java client to match the look and behaviour of the native client + * Initial work for multi-threaded decoding in the Java client + * vncconfig no longer needed for clipboard with Xvnc/libvnc.so + * vncserver has system wide config support + * Full support for alpha cursors in Xvnc/libvnc.so and both viewers + +- Removed patches: + * U_Add-xorg-xserver-1.19-support.patch + * U_tigervnc-fix-inetd-not-working-with-xserver-1-19.patch + * U_tigervnc-better-check-for-screen-visibility.patch + +------------------------------------------------------------------- +Mon Apr 10 14:24:51 UTC 2017 - msrb@suse.com + +- U_tigervnc-better-check-for-screen-visibility.patch + * Crop operations to visible screen. (bnc#1032272) + ------------------------------------------------------------------- Thu Mar 2 14:19:27 UTC 2017 - msrb@suse.com diff --git a/tigervnc.spec b/tigervnc.spec index 52a8b19..d24c97b 100644 --- a/tigervnc.spec +++ b/tigervnc.spec @@ -23,7 +23,7 @@ %define tlscert %{_sysconfdir}/vnc/tls.cert Name: tigervnc -Version: 1.7.1 +Version: 1.8.0 Release: 0 Provides: tightvnc = 1.3.9 Obsoletes: tightvnc < 1.3.9 @@ -120,8 +120,6 @@ Patch6: u_tigervnc-add-autoaccept-parameter.patch Patch7: u_tigervnc_update_default_vncxstartup.patch Patch8: u_build_libXvnc_as_separate_library.patch Patch9: u_tigervnc-show-unencrypted-warning.patch -Patch10: U_Add-xorg-xserver-1.19-support.patch -Patch11: U_tigervnc-fix-inetd-not-working-with-xserver-1-19.patch %description TigerVNC is a high-performance, platform-neutral implementation of VNC (Virtual Network Computing), @@ -180,8 +178,6 @@ cp -r /usr/src/xserver/* unix/xserver/ %patch7 -p1 %patch8 -p1 %patch9 -p1 -%patch10 -p1 -%patch11 -p1 pushd unix/xserver patch -p1 < ../xserver119.patch diff --git a/u_tigervnc-add-autoaccept-parameter.patch b/u_tigervnc-add-autoaccept-parameter.patch index 893b62c..7fb8261 100644 --- a/u_tigervnc-add-autoaccept-parameter.patch +++ b/u_tigervnc-add-autoaccept-parameter.patch @@ -1,10 +1,10 @@ -Index: tigervnc-1.6.0/java/com/tigervnc/rfb/CSecurityTLS.java +Index: tigervnc-1.8.0/java/com/tigervnc/rfb/CSecurityTLS.java =================================================================== ---- tigervnc-1.6.0.orig/java/com/tigervnc/rfb/CSecurityTLS.java -+++ tigervnc-1.6.0/java/com/tigervnc/rfb/CSecurityTLS.java +--- tigervnc-1.8.0.orig/java/com/tigervnc/rfb/CSecurityTLS.java ++++ tigervnc-1.8.0/java/com/tigervnc/rfb/CSecurityTLS.java @@ -64,6 +64,9 @@ public class CSecurityTLS extends CSecur - public static StringParameter x509crl - = new StringParameter("x509crl", + public static StringParameter X509CRL + = new StringParameter("X509CRL", "X509 CRL file", "", Configuration.ConfigurationObject.ConfViewer); + public static StringParameter x509autoaccept + = new StringParameter("x509autoaccept", @@ -14,8 +14,8 @@ Index: tigervnc-1.6.0/java/com/tigervnc/rfb/CSecurityTLS.java { @@ -82,6 +85,7 @@ public class CSecurityTLS extends CSecur setDefaults(); - cafile = x509ca.getData(); - crlfile = x509crl.getData(); + cafile = X509CA.getData(); + crlfile = X509CRL.getData(); + certautoaccept = x509autoaccept.getData(); } @@ -41,24 +41,16 @@ Index: tigervnc-1.6.0/java/com/tigervnc/rfb/CSecurityTLS.java private FdInStream is; private FdOutStream os; -Index: tigervnc-1.6.0/java/com/tigervnc/vncviewer/VncViewer.java +Index: tigervnc-1.8.0/java/com/tigervnc/vncviewer/VncViewer.java =================================================================== ---- tigervnc-1.6.0.orig/java/com/tigervnc/vncviewer/VncViewer.java -+++ tigervnc-1.6.0/java/com/tigervnc/vncviewer/VncViewer.java -@@ -353,6 +353,8 @@ public class VncViewer extends javax.swi - parent.setFocusTraversalKeysEnabled(false); +--- tigervnc-1.8.0.orig/java/com/tigervnc/vncviewer/VncViewer.java ++++ tigervnc-1.8.0/java/com/tigervnc/vncviewer/VncViewer.java +@@ -368,6 +368,8 @@ public class VncViewer extends javax.swi + // Called right after zero-arg constructor in applet mode setLookAndFeel(); setBackground(Color.white); + + SecurityClient.setDefaults(); - } - - private void getTimestamp() { -@@ -374,6 +376,7 @@ public class VncViewer extends javax.swi - if (embed.getValue() && nViewers == 0) { - alwaysShowServerDialog.setParam(false); - Configuration.global().readAppletParams(this); -+ Configuration.viewer().readAppletParams(this); - fullScreen.setParam(false); - scalingFactor.setParam("100"); - String host = getCodeBase().getHost(); + applet = this; + vncServerName.put(loadAppletParameters(applet).toCharArray()).flip(); + if (embed.getValue()) { diff --git a/u_tigervnc-cve-2014-8240.patch b/u_tigervnc-cve-2014-8240.patch index 50dd2e3..47a6cec 100644 --- a/u_tigervnc-cve-2014-8240.patch +++ b/u_tigervnc-cve-2014-8240.patch @@ -2,10 +2,10 @@ Patch-Mainline: To be upstreamed References: bnc#900896 CVE-2014-8240 Signed-off-by: Michal Srb -Index: tigervnc-1.4.1/unix/x0vncserver/Image.cxx +Index: tigervnc-1.8.0/unix/x0vncserver/Image.cxx =================================================================== ---- tigervnc-1.4.1.orig/unix/x0vncserver/Image.cxx -+++ tigervnc-1.4.1/unix/x0vncserver/Image.cxx +--- tigervnc-1.8.0.orig/unix/x0vncserver/Image.cxx ++++ tigervnc-1.8.0/unix/x0vncserver/Image.cxx @@ -80,6 +80,14 @@ void Image::Init(int width, int height) xim = XCreateImage(dpy, vis, DefaultDepth(dpy, DefaultScreen(dpy)), ZPixmap, 0, 0, width, height, BitmapPad(dpy), 0); @@ -39,40 +39,3 @@ Index: tigervnc-1.4.1/unix/x0vncserver/Image.cxx } shminfo->shmid = shmget(IPC_PRIVATE, -Index: tigervnc-1.4.1/vncviewer/X11PixelBuffer.cxx -=================================================================== ---- tigervnc-1.4.1.orig/vncviewer/X11PixelBuffer.cxx -+++ tigervnc-1.4.1/vncviewer/X11PixelBuffer.cxx -@@ -106,6 +106,15 @@ X11PixelBuffer::X11PixelBuffer(int width - if (!xim) - throw rfb::Exception(_("Could not create framebuffer image")); - -+ if (xim->bytes_per_line <= 0 || -+ xim->height <= 0 || -+ xim->height >= INT_MAX / xim->bytes_per_line) { -+ if (xim) -+ XDestroyImage(xim); -+ xim = NULL; -+ throw rfb::Exception("Invalid display size"); -+ } -+ - xim->data = (char*)malloc(xim->bytes_per_line * xim->height); - if (!xim->data) - throw rfb::Exception(_("Not enough memory for framebuffer")); -@@ -172,6 +181,16 @@ int X11PixelBuffer::setupShm() - if (!xim) - goto free_shminfo; - -+ if (xim->bytes_per_line <= 0 || -+ xim->height <= 0 || -+ xim->height >= INT_MAX / xim->bytes_per_line) { -+ XDestroyImage(xim); -+ xim = NULL; -+ delete shminfo; -+ shminfo = NULL; -+ throw rfb::Exception("Invalid display size"); -+ } -+ - shminfo->shmid = shmget(IPC_PRIVATE, - xim->bytes_per_line * xim->height, - IPC_CREAT|0777); diff --git a/v1.7.1.tar.gz b/v1.7.1.tar.gz deleted file mode 100644 index 6d9e022..0000000 --- a/v1.7.1.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3c021ec0bee4611020c0bcbab995b0ef2f6f1a46127a52b368827f3275527ccc -size 1406032 diff --git a/v1.8.0.tar.gz b/v1.8.0.tar.gz new file mode 100644 index 0000000..13afa89 --- /dev/null +++ b/v1.8.0.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9951dab0e10f8de03996ec94bec0d938da9f36d48dca8c954e8bbc95c16338f8 +size 1433830