[packages/rdesktop] Up to 1.9.0

arekm arekm at pld-linux.org
Tue Oct 20 21:31:45 CEST 2026


commit aeadf104ef0c31d05a5bb6dc05fc1f0a02b55ec6
Author: Arkadiusz Miśkiewicz <arekm at maven.pl>
Date:   Tue Oct 20 20:58:32 2026 +0200

    Up to 1.9.0
    
    - fixes CVE-2019-15682
    - switch sound backend to PulseAudio

 rdesktop-credssp-linux.patch |  15 +++++
 rdesktop-heimdal.patch       |  21 ------
 rdesktop-ssl-exp-mod.patch   |  18 ++++++
 rdesktop-xinerama.patch      | 148 +++++++++++++++++++++++++------------------
 rdesktop.spec                |  25 +++++---
 5 files changed, 136 insertions(+), 91 deletions(-)
---
diff --git a/rdesktop.spec b/rdesktop.spec
index d158128..ef9ac50 100644
--- a/rdesktop.spec
+++ b/rdesktop.spec
@@ -1,25 +1,29 @@
 Summary:	RDP client for accessing Windows NT Terminal Server
 Summary(pl.UTF-8):	Klient RDP umożliwiający dostęp do Terminal Serwera WinNT
 Name:		rdesktop
-Version:	1.8.4
-Release:	2
+Version:	1.9.0
+Release:	1
 License:	GPL v3+
 Group:		X11/Applications/Networking
-Source0:	https://github.com/rdesktop/rdesktop/releases/download/v1.8.4/rdesktop-1.8.4.tar.gz
-# Source0-md5:	7273f9dad833f6899a3e5b39d7fdd6f2
+Source0:	https://github.com/rdesktop/rdesktop/releases/download/v%{version}/rdesktop-%{version}.tar.gz
+# Source0-md5:	c67767f5a329f902291a56d22ae4303a
 Patch0:		%{name}-xinerama.patch
-Patch1:		%{name}-heimdal.patch
-Patch2:		no-strip.patch
+Patch1:		no-strip.patch
+Patch2:		%{name}-ssl-exp-mod.patch
+Patch3:		%{name}-credssp-linux.patch
 URL:		http://www.rdesktop.org/
-BuildRequires:	alsa-lib-devel
 BuildRequires:	autoconf >= 2.50
 BuildRequires:	automake
+BuildRequires:	gnutls-devel
 BuildRequires:	heimdal-devel
 BuildRequires:	libsamplerate-devel
-BuildRequires:	openssl-devel >= 0.9.7d
+BuildRequires:	libtasn1-devel
+BuildRequires:	nettle-devel
 BuildRequires:	pcsc-lite-devel
 BuildRequires:	pkgconfig
+BuildRequires:	pulseaudio-devel
 BuildRequires:	xorg-lib-libX11-devel
+BuildRequires:	xorg-lib-libXcursor-devel
 BuildRequires:	xorg-lib-libXinerama-devel
 BuildRequires:	xorg-lib-libXrandr-devel
 BuildRoot:	%{tmpdir}/%{name}-%{version}-root-%(id -u -n)
@@ -41,6 +45,7 @@ wymagane żadne rozszerzenia po stronie serwera.
 %patch -P0 -p1
 %patch -P1 -p1
 %patch -P2 -p1
+%patch -P3 -p1
 
 %build
 %{__aclocal}
@@ -49,7 +54,7 @@ wymagane żadne rozszerzenia po stronie serwera.
 	--enable-credssp \
 	--enable-smartcard \
 	--with-ipv6 \
-	--with-sound=alsa
+	--with-sound=pulse
 # note: --with-libvncserver requires vnc/ code, which don't exist
 
 %{__make}
@@ -65,7 +70,7 @@ rm -rf $RPM_BUILD_ROOT
 
 %files
 %defattr(644,root,root,755)
-%doc README doc/
+%doc README.md doc/
 %attr(755,root,root) %{_bindir}/rdesktop
 %{_datadir}/rdesktop
 %{_mandir}/man1/rdesktop.1*
diff --git a/rdesktop-credssp-linux.patch b/rdesktop-credssp-linux.patch
new file mode 100644
index 0000000..7625294
--- /dev/null
+++ b/rdesktop-credssp-linux.patch
@@ -0,0 +1,15 @@
+# CredSSP probing skipped Linux when OSTYPE is not exported by the build shell
+--- a/configure.ac
++++ b/configure.ac
+@@ -83,6 +83,11 @@
+ 					PKG_CHECK_MODULES(GSSAPI, gss, [WITH_CREDSSP=1], [WITH_CREDSSP=0])
+ 				fi
+ 				;;
++				*-*-linux*)
++				if test -n "$PKG_CONFIG"; then
++					PKG_CHECK_MODULES(GSSAPI, krb5-gssapi, [WITH_CREDSSP=1], [WITH_CREDSSP=0])
++				fi
++				;;
+ 			*)
+ 				;;
+ 			esac
diff --git a/rdesktop-heimdal.patch b/rdesktop-heimdal.patch
deleted file mode 100644
index 5866f86..0000000
--- a/rdesktop-heimdal.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-diff -urN rdesktop-1.8.0.org/configure.ac rdesktop-1.8.0/configure.ac
---- rdesktop-1.8.0.org/configure.ac	2013-08-09 08:11:22.000000000 +0200
-+++ rdesktop-1.8.0/configure.ac	2013-10-24 09:12:32.000000000 +0200
-@@ -126,7 +128,7 @@
- 	      [static_gssglue=yes], [static_gssglue=no])
- AS_IF([test "x$enable_credssp" != "xno"], [
- 	  if test -n "$PKG_CONFIG"; then
--	    PKG_CHECK_MODULES(GSSGLUE, libgssglue, [WITH_CREDSSP=1], [WITH_CREDSSP=0])
-+	    PKG_CHECK_MODULES(GSSGLUE, heimdal-gssapi, [WITH_CREDSSP=1], [WITH_CREDSSP=0])
- 	  fi
- 
- 	  if test x"$WITH_CREDSSP" = "x1"; then
-@@ -136,7 +138,7 @@
- 	      AS_IF([test "x$static_gssglue" != "xno"], [
- 	          LIBS="$LIBS -Wl,-Bstatic -lgssglue -Wl,-Bdynamic"
- 	      ], [
--	          LIBS="$LIBS -lgssglue"
-+	          LIBS="$LIBS $GSSGLUE_LIBS"
- 	      ])
- 
- 	      AC_DEFINE(WITH_CREDSSP)
diff --git a/rdesktop-ssl-exp-mod.patch b/rdesktop-ssl-exp-mod.patch
new file mode 100644
index 0000000..b0dac02
--- /dev/null
+++ b/rdesktop-ssl-exp-mod.patch
@@ -0,0 +1,18 @@
+# rdssl_rkey_get_exp_mod() sized its output from unrelated variables (upstream 53ba87dc)
+diff --git a/ssl.c b/ssl.c
+index 930c7f9..0681a89 100644
+--- a/ssl.c
++++ b/ssl.c
+@@ -307,10 +307,10 @@ rdssl_rkey_get_exp_mod(RDSSL_RKEY * rkey, uint8 * exponent, uint32 max_exp_len,
+ {
+ 	size_t outlen;
+ 
+-	outlen = (mpz_sizeinbase(modulus, 2) + 7) / 8;
++	outlen = (mpz_sizeinbase(rkey->n, 2) + 7) / 8;
+ 	if (outlen > max_mod_len)
+ 		return 1;
+-	outlen = (mpz_sizeinbase(exponent, 2) + 7) / 8;
++	outlen = (mpz_sizeinbase(rkey->e, 2) + 7) / 8;
+ 	if (outlen > max_exp_len)
+ 		return 1;
+ 
diff --git a/rdesktop-xinerama.patch b/rdesktop-xinerama.patch
index 27c60f0..ba33bc3 100644
--- a/rdesktop-xinerama.patch
+++ b/rdesktop-xinerama.patch
@@ -1,6 +1,7 @@
---- rdesktop/configure.ac
-+++ rdesktop/configure.ac
-@@ -30,6 +30,8 @@
+# fullscreen and default size follow the Xinerama screen under the cursor
+--- a/configure.ac
++++ b/configure.ac
+@@ -35,6 +35,8 @@
  AC_SEARCH_LIBS(socket, socket)
  AC_SEARCH_LIBS(inet_aton, resolv)
  
@@ -9,9 +10,9 @@
  AC_CHECK_HEADER(sys/select.h, AC_DEFINE(HAVE_SYS_SELECT_H))
  AC_CHECK_HEADER(sys/modem.h, AC_DEFINE(HAVE_SYS_MODEM_H))
  AC_CHECK_HEADER(sys/filio.h, AC_DEFINE(HAVE_SYS_FILIO_H))
---- rdesktop/xwin.c
-+++ rdesktop/xwin.c
-@@ -31,6 +31,9 @@
+--- a/xwin.c
++++ b/xwin.c
+@@ -37,6 +37,9 @@
  #ifdef HAVE_XRANDR
  #include <X11/extensions/Xrandr.h>
  #endif
@@ -19,9 +20,9 @@
 +#include <X11/extensions/Xinerama.h>
 +#endif
  
- extern int g_sizeopt;
- extern int g_width;
-@@ -816,6 +819,66 @@
+ #ifdef __APPLE__
+ #include <sys/param.h>
+@@ -872,6 +875,67 @@
  #define LOUT24(o, x) { *(o++) = x; *(o++) = x >> 8; *(o++) = x >> 16; }
  #define LOUT32(o, x) { *(o++) = x; *(o++) = x >> 8; *(o++) = x >> 16; *(o++) = x >> 24; }
  
@@ -48,10 +49,11 @@
 +
 +		/* Search for the appropriate screen */
 +		i = 0;
-+		while (!  (screeninfo[i].x_org <= x
-+			&& screeninfo[i].y_org <= y
-+			&& screeninfo[i].x_org + screeninfo[i].width >= x
-+			&& screeninfo[i].y_org + screeninfo[i].height >= y ))
++		while (i < screens
++			&& !(screeninfo[i].x_org <= x
++				&& screeninfo[i].y_org <= y
++				&& screeninfo[i].x_org + screeninfo[i].width >= x
++				&& screeninfo[i].y_org + screeninfo[i].height >= y))
 +			i++;
 +		if (i >= screens)
 +			i = 0;
@@ -88,58 +90,84 @@
  static uint32
  translate_colour(uint32 colour)
  {
-@@ -1912,17 +1975,26 @@
- 	 */
- 	if (g_fullscreen)
- 	{
--		g_width = WidthOfScreen(g_screen);
--		g_height = HeightOfScreen(g_screen);
+@@ -2046,8 +2110,11 @@
+ void
+ ui_get_screen_size(uint32 * width, uint32 * height)
+ {
+-	*width = WidthOfScreen(g_screen);
+-	*height = HeightOfScreen(g_screen);
++	XRectangle screen;
++
++	ScreenSize(&screen);
++	*width = screen.width;
++	*height = screen.height;
+ }
+ 
+ void
+@@ -2209,10 +2276,20 @@
+ 	logger(GUI, Debug, "ui_create_window() width = %d, height = %d", width, height);
+ 
+ 	/* Handle -x-y portion of geometry string */
+-	if (g_xpos < 0 || (g_xpos == 0 && (g_pos & 2)))
+-		g_xpos = WidthOfScreen(g_screen) + g_xpos - width;
+-	if (g_ypos < 0 || (g_ypos == 0 && (g_pos & 4)))
+-		g_ypos = HeightOfScreen(g_screen) + g_ypos - height;
++	{
 +		XRectangle screen;
-+		ScreenSize(&screen);
 +
-+		g_width = screen.width;
-+		g_height = screen.height;
- 		g_using_full_workarea = True;
- 	}
- 	else if (g_sizeopt < 0)
++		ScreenSize(&screen);
++		if (g_fullscreen)
++		{
++			g_xpos = screen.x;
++			g_ypos = screen.y;
++		}
++		if (g_xpos < 0 || (g_xpos == 0 && (g_pos & 2)))
++			g_xpos = screen.width + g_xpos - width;
++		if (g_ypos < 0 || (g_ypos == 0 && (g_pos & 4)))
++			g_ypos = screen.height + g_ypos - height;
++	}
+ 
+ 	value_mask = get_window_attribs(&attribs);
+ 
+@@ -2444,10 +2521,13 @@
+ 	if (g_fullscreen)
  	{
+ 		/* Since we need to create a fullscreen window we need to know screen size */
+-		x = 0;
+-		y = 0;
+-		width = WidthOfScreen(g_screen);
+-		height = HeightOfScreen(g_screen);
 +		XRectangle screen;
-+		ScreenSize(&screen);
 +
-+		g_width = screen.width;
-+		g_height = screen.height;
-+
- 		/* Percent of screen */
- 		if (-g_sizeopt >= 100)
- 			g_using_full_workarea = True;
--		g_height = HeightOfScreen(g_screen) * (-g_sizeopt) / 100;
--		g_width = WidthOfScreen(g_screen) * (-g_sizeopt) / 100;
-+               g_width = screen.width * (-g_width) / 100;
-+               g_height = screen.height * (-g_width) / 100;
++		ScreenSize(&screen);
++		x = screen.x;
++		y = screen.y;
++		width = screen.width;
++		height = screen.height;
  	}
- 	else if (g_sizeopt == 1)
+ 	else
  	{
-@@ -2005,14 +2077,19 @@
- 	long input_mask, ic_input_mask;
- 	XEvent xevent;
- 
--	wndwidth = g_fullscreen ? WidthOfScreen(g_screen) : g_width;
--	wndheight = g_fullscreen ? HeightOfScreen(g_screen) : g_height;
-+	XRectangle screen;
-+	ScreenSize(&screen);
- 
-+	wndwidth = g_fullscreen ? screen.width : g_width;
-+	wndheight = g_fullscreen ? screen.height : g_height;
-+	g_xpos = g_fullscreen ? screen.x : g_xpos;
-+	g_ypos = g_fullscreen ? screen.y : g_ypos;
+@@ -3174,9 +3254,20 @@
+ 	/* Set up width and height for new session */
+ 	if (g_fullscreen || g_seamless_rdp)
+ 	{
+-		/* follow root window size */
+-		g_requested_session_width = WidthOfScreen(g_screen);
+-		g_requested_session_height = HeightOfScreen(g_screen);
++		if (g_seamless_rdp)
++		{
++			/* seamless windows span the whole root window */
++			g_requested_session_width = WidthOfScreen(g_screen);
++			g_requested_session_height = HeightOfScreen(g_screen);
++		}
++		else
++		{
++			XRectangle screen;
 +
- 	/* Handle -x-y portion of geometry string */
- 	if (g_xpos < 0 || (g_xpos == 0 && (g_pos & 2)))
--		g_xpos = WidthOfScreen(g_screen) + g_xpos - g_width;
-+		g_xpos = screen.width + g_xpos - g_width;
- 	if (g_ypos < 0 || (g_ypos == 0 && (g_pos & 4)))
--		g_ypos = HeightOfScreen(g_screen) + g_ypos - g_height;
-+		g_ypos = screen.height + g_ypos - g_height;
- 
- 	get_window_attribs(&attribs);
- 
++			ScreenSize(&screen);
++			g_requested_session_width = screen.width;
++			g_requested_session_height = screen.height;
++		}
+ 		if (g_window_size_type == PercentageOfScreen)
+ 		{
+ 			/* TODO: Implement percentage of screen */
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/rdesktop.git/commitdiff/aeadf104ef0c31d05a5bb6dc05fc1f0a02b55ec6



More information about the pld-cvs-commit mailing list