(address . guix-patches@gnu.org)
---
gnu/packages/patches/x11vnc-gcc10-fix.patch | 42 ++++++++++
...c-scan-limit-access-to-shared-memory.patch | 22 ++++++
.../patches/x11vnc-xfc-null-ptr.patch | 29 +++++++
gnu/packages/x11vnc.scm | 79 +++++++++++++++++++
4 files changed, 172 insertions(+)
create mode 100644 gnu/packages/patches/x11vnc-gcc10-fix.patch
create mode 100644
gnu/packages/patches/x11vnc-scan-limit-access-to-shared-memory.patch
create mode 100644 gnu/packages/patches/x11vnc-xfc-null-ptr.patch
create mode 100644 gnu/packages/x11vnc.scm
Toggle diff (205 lines)
diff --git a/gnu/packages/patches/x11vnc-gcc10-fix.patch
b/gnu/packages/patches/x11vnc-gcc10-fix.patch
new file mode 100644
index 0000000000..a32d5785d9
--- /dev/null
+++ b/gnu/packages/patches/x11vnc-gcc10-fix.patch
@@ -0,0 +1,42 @@
+From a48b0b1cd887d7f3ae67f525d7d334bd2feffe60 Mon Sep 17 00:00:00 2001
+From: Alexander Tsoy <alexander@tsoy.me>
+Date: Tue, 28 Jan 2020 22:21:01 +0300
+Subject: [PATCH] Fix build with -fno-common
+
+GCC 10 defaults to -fno-common
+---
+ src/util.c | 3 +++
+ src/util.h | 6 +++---
+ 2 files changed, 6 insertions(+), 3 deletions(-)
+
+diff --git a/src/util.c b/src/util.c
+index a82a1a42..6a52ebf4 100644
+--- a/src/util.c
++++ b/src/util.c
+@@ -47,6 +47,9 @@ int hxl = 0;
+ #ifdef LIBVNCSERVER_HAVE_LIBPTHREAD
+ MUTEX(x11Mutex);
+ MUTEX(scrollMutex);
++MUTEX(clientMutex);
++MUTEX(inputMutex);
++MUTEX(pointerMutex);
+ #endif
+
+ int nfix(int i, int n);
+diff --git a/src/util.h b/src/util.h
+index 35c1afd2..99b5dd1d 100644
+--- a/src/util.h
++++ b/src/util.h
+@@ -102,9 +102,9 @@ extern struct timeval _mysleep;
+ #ifdef LIBVNCSERVER_HAVE_LIBPTHREAD
+ extern MUTEX(x11Mutex);
+ extern MUTEX(scrollMutex);
+-MUTEX(clientMutex);
+-MUTEX(inputMutex);
+-MUTEX(pointerMutex);
++extern MUTEX(clientMutex);
++extern MUTEX(inputMutex);
++extern MUTEX(pointerMutex);
+ #endif
+
+ #define X_INIT INIT_MUTEX(x11Mutex)
diff --git a/gnu/packages/patches/x11vnc-scan-limit-access-to-shared-memory.patch
b/gnu/packages/patches/x11vnc-scan-limit-access-to-shared-memory.patch
new file mode 100644
index 0000000000..5424094434
--- /dev/null
+++ b/gnu/packages/patches/x11vnc-scan-limit-access-to-shared-memory.patch
@@ -0,0 +1,22 @@
+From 69eeb9f7baa14ca03b16c9de821f9876def7a36a Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Gu=C3=A9nal=20DAVALAN?= <guenal.davalan@uca.fr>
+Date: Wed, 18 Nov 2020 08:40:45 +0100
+Subject: [PATCH] scan: limit access to shared memory segments to current user
+
+---
+ src/scan.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/scan.c b/src/scan.c
+index 43e00d20..12994d52 100644
+--- a/src/scan.c
++++ b/src/scan.c
+@@ -320,7 +320,7 @@ static int shm_create(XShmSegmentInfo *shm,
XImage **ximg_ptr, int w, int h,
+
+ #if HAVE_XSHM
+ shm->shmid = shmget(IPC_PRIVATE,
+- xim->bytes_per_line * xim->height, IPC_CREAT | 0777);
++ xim->bytes_per_line * xim->height, IPC_CREAT | 0600);
+
+ if (shm->shmid == -1) {
+ rfbErr("shmget(%s) failed.\n", name);
diff --git a/gnu/packages/patches/x11vnc-xfc-null-ptr.patch
b/gnu/packages/patches/x11vnc-xfc-null-ptr.patch
new file mode 100644
index 0000000000..65f339d716
--- /dev/null
+++ b/gnu/packages/patches/x11vnc-xfc-null-ptr.patch
@@ -0,0 +1,29 @@
+From 95a10ab64c2dbbec2c8dad91a5ffb73a0d68474b Mon Sep 17 00:00:00 2001
+From: Jonathan Liu <net147@gmail.com>
+Date: Mon, 16 Mar 2020 20:04:06 +1100
+Subject: [PATCH] src/cursor: fix xfc NULL pointer dereference
+
+xfc->width and xfc->height for the XFixes cursor image returned from
+XFixesGetCursorImage(dpy) are accessed without first checking that xfc
+is not NULL. This can result in the server sometimes crashing when
+moving a Google Chrome window.
+
+Fixes: 37c946191a0f ("Broken cursor bugfix for 64 bit systems (#49)")
+Signed-off-by: Jonathan Liu <net147@gmail.com>
+---
+ src/cursor.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/cursor.c b/src/cursor.c
+index 39e73a69..74a08c69 100644
+--- a/src/cursor.c
++++ b/src/cursor.c
+@@ -1311,7 +1311,7 @@ static int get_exact_cursor(int init) {
+
+ /* retrieve the cursor info + pixels from server: */
+ xfc = XFixesGetCursorImage(dpy);
+- {
++ if (xfc) {
+ /* 2017-07-09, Stephan Fuhrmann: This fixes an
implementation flaw for 64 bit systems.
+ * The XFixesCursorImage structure says xfc->pixels is
(unsigned long*) in the structure, but
+ * the protocol spec says it's 32 bit per pixel
diff --git a/gnu/packages/x11vnc.scm b/gnu/packages/x11vnc.scm
new file mode 100644
index 0000000000..55c51305b3
--- /dev/null
+++ b/gnu/packages/x11vnc.scm
@@ -0,0 +1,79 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2022 Mehmet Tekman <mtekman89@gmail.com>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
+
+
+(define-module (gnu packages x11vnc)
+ #:use-module (guix packages)
+ #:use-module (gnu packages)
+ #:use-module (gnu packages perl)
+ #:use-module (gnu packages tcl)
+ #:use-module (gnu packages pkg-config)
+ #:use-module (gnu packages xorg)
+ #:use-module (gnu packages tls)
+ #:use-module (guix git-download)
+ #:use-module (guix build-system gnu)
+ #:use-module ((guix licenses) #:prefix license:)
+ #:use-module (gnu packages autotools)
+ #:use-module (gnu packages avahi)
+ #:use-module (gnu packages vnc)
+ #:use-module (gnu packages compression)
+ #:use-module (gnu packages image))
+
+(define-public x11vnc
+ (let ((commit "4ca006fed80410bd9b061a1519bd5d9366bb0bc8")
+ (version "0.9.16")
+ (revision "1"))
+ (package
+ (name "x11vnc")
+ (version (git-version version revision commit))
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/LibVNC/x11vnc")
+ (commit commit)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "1g652mmi79pfq4p5p7spaswa164rpzjhc5rn2phy5pm71lm0vib1"))
+ (patches
+ (search-patches "x11vnc-xfc-null-ptr.patch"
+ "x11vnc-gcc10-fix.patch"
+
"x11vnc-scan-limit-access-to-shared-memory.patch"))))
+ (build-system gnu-build-system)
+ (arguments
+ '(#:phases
+ (modify-phases
+ %standard-phases
+ (add-before 'bootstrap 'delete-premature-configure
+ (lambda _ (substitute* "./autogen.sh"
+ ((".*/configure") "")))))))
+ (native-inputs (list
+ ;; [optional requirements]
+ ;; perl tk
+ autoconf automake autobuild pkg-config avahi libvnc
+ libx11 libxcomposite libxdamage libxext libxfixes libxi
+ libxinerama libxrandr libxtst
+ openssl xdpyinfo zlib libjpeg-turbo xf86-video-dummy))
+ (synopsis "VNC server for real X displays")
+ (home-page "https://github.com/LibVNC/x11vnc")
+ (description
+ "x11vnc allows one to view remotely and interact with real X
+displays (i.e. a display corresponding to a physical monitor, keyboard, and
+mouse) with any VNC viewer. In this way it plays the role for Unix/X11 that
+WinVNC plays for Windows.")
+ (license license:gpl2))))
--
2.38.0