guix-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[bug#58341] [PATCH] Add x11vnc recipe


From: Mehmet Tekman
Subject: [bug#58341] [PATCH] Add x11vnc recipe
Date: Mon, 10 Oct 2022 18:05:49 +0200

Hello, thank you for the review!

I've put the recipe into vnc.scm and built to a newer commit that
makes the patches redundant (thanks for the tip, I was basing my
recipe off one from another distro).

I've fixed the commit message and linted and styled the vnc.scm file.

I created a new branch and put my changes there, so please disregard
the above changes.

I attach here the patch file, as I don't quite trust myself to paste
the changes into this email.

Looking forward to the next review,

Best,
Mehmet

On Sat, 8 Oct 2022 at 06:33, Maxim Cournoyer <maxim.cournoyer@gmail.com> wrote:
>
> Hello, and thank you for your contribution!
>
> Mehmet Tekman <mtekman89@gmail.com> writes:
>
> > ---
> >  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
>
> Would it be possible to send the patch complete with the commit message,
> as can be produced with 'git format-patch'?  You can read 'info "(guix)
> Submitting Patches".  The git commit message should use the GNU
> ChangeLog format, as mentioned there.  You can look at the git history
> to learn.
>
> The patches should be registered in the gnu/local.mk file, in the
> dist_patch_DATA section.  Please mind the sorting in the file.
>
> > 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
>
> Since we are using a recent commit, shouldn't these (upstream?) patches
> be unnecessary?  Perhaps we can use an even newer commit that includes
> them?
>
> > --- /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)
>
> There already is a (gnu packages vnc) module; that'd be a better home.
> We can group all VNC-related packages there.
>
> > +  #: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))
>
> Imports should be lexicographically sorted.
>
> > +(define-public x11vnc
>
> When using an unreleased version, it's good to mention why (issues it
> fixes, a very old release, etc.).
> > +  (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"))))
>
> Odd blank line here.  You can try './pre-inst-env guix style x11vnc' to
> see how it would do it, else I'd do it like to avoid breaking the 80
> chars max width:
>
> (search-patches
>  "patch1"
>  "patch2"
>  ...)
>
> > +      (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))
>
> The libraries that are used at run time should appear as inputs, not
> native-inputs.  Native-inputs are for build tools or tests.
>
> > +      (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.")
>
> I'd remove the useless comparison with windows, perhaps stress that this
> provides a VNC *server* in the description as well.
>
> > +      (license license:gpl2))))
>
> --
> Thanks,
> Maxim

Attachment: 0001-gnu-Add-x11vnc.patch
Description: Text Data


reply via email to

[Prev in Thread] Current Thread [Next in Thread]