[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