diff --git a/SOURCES/tigervnc-tolerate-specifying-boolparam.patch b/SOURCES/tigervnc-tolerate-specifying-boolparam.patch new file mode 100644 index 0000000..70ddef3 --- /dev/null +++ b/SOURCES/tigervnc-tolerate-specifying-boolparam.patch @@ -0,0 +1,149 @@ +From 38c6848b30cb1908171f2b4628e345fbf6727b39 Mon Sep 17 00:00:00 2001 +From: Pierre Ossman +Date: Fri, 18 Sep 2020 10:44:32 +0200 +Subject: [PATCH] Tolerate specifying -BoolParam 0 and similar + +This is needed by vncserver which doesn't know which parameters are +boolean, and it cannot use the -Param=Value form as that isn't tolerated +by the Xorg code. +--- + unix/vncserver/vncserver.in | 8 ++++---- + unix/xserver/hw/vnc/RFBGlue.cc | 16 ++++++++++++++++ + unix/xserver/hw/vnc/RFBGlue.h | 1 + + unix/xserver/hw/vnc/xvnc.c | 14 ++++++++++++++ + vncviewer/vncviewer.cxx | 20 ++++++++++++++++++++ + 5 files changed, 55 insertions(+), 4 deletions(-) + +diff --git a/unix/vncserver/vncserver.in b/unix/vncserver/vncserver.in +index 25fbbd315..261b258f1 100755 +--- a/unix/vncserver/vncserver.in ++++ b/unix/vncserver/vncserver.in +@@ -107,7 +107,7 @@ $default_opts{rfbwait} = 30000; + $default_opts{rfbauth} = "$vncUserDir/passwd"; + $default_opts{rfbport} = $vncPort; + $default_opts{fp} = $fontPath if ($fontPath); +-$default_opts{pn} = ""; ++$default_opts{pn} = undef; + + # Load user-overrideable system defaults + LoadConfig($vncSystemConfigDefaultsFile); +@@ -242,13 +242,13 @@ push(@cmd, "@CMAKE_INSTALL_FULL_BINDIR@/Xvnc", ":$displayNumber"); + + foreach my $k (sort keys %config) { + push(@cmd, "-$k"); +- push(@cmd, $config{$k}) if $config{$k}; ++ push(@cmd, $config{$k}) if defined($config{$k}); + delete $default_opts{$k}; # file options take precedence + } + + foreach my $k (sort keys %default_opts) { + push(@cmd, "-$k"); +- push(@cmd, $default_opts{$k}) if $default_opts{$k}; ++ push(@cmd, $default_opts{$k}) if defined($default_opts{$k}); + } + + warn "\nNew '$desktopName' desktop is $host:$displayNumber\n\n"; +@@ -291,7 +291,7 @@ sub LoadConfig { + # current config file being loaded defined the logical opposite setting + # (NeverShared vs. AlwaysShared, etc etc). + $toggle = lc($1); # must normalize key case +- $config{$toggle} = $k; ++ $config{$toggle} = undef; + } + } + close(IN); +diff --git a/unix/xserver/hw/vnc/RFBGlue.cc b/unix/xserver/hw/vnc/RFBGlue.cc +index f108fae43..7c32bea8f 100644 +--- a/unix/xserver/hw/vnc/RFBGlue.cc ++++ b/unix/xserver/hw/vnc/RFBGlue.cc +@@ -143,6 +143,22 @@ const char* vncGetParamDesc(const char *name) + return param->getDescription(); + } + ++int vncIsParamBool(const char *name) ++{ ++ VoidParameter *param; ++ BoolParameter *bparam; ++ ++ param = rfb::Configuration::getParam(name); ++ if (param == NULL) ++ return false; ++ ++ bparam = dynamic_cast(param); ++ if (bparam == NULL) ++ return false; ++ ++ return true; ++} ++ + int vncGetParamCount(void) + { + int count; +diff --git a/unix/xserver/hw/vnc/RFBGlue.h b/unix/xserver/hw/vnc/RFBGlue.h +index 112405b84..695cea105 100644 +--- a/unix/xserver/hw/vnc/RFBGlue.h ++++ b/unix/xserver/hw/vnc/RFBGlue.h +@@ -41,6 +41,7 @@ int vncSetParam(const char *name, const char *value); + int vncSetParamSimple(const char *nameAndValue); + char* vncGetParam(const char *name); + const char* vncGetParamDesc(const char *name); ++int vncIsParamBool(const char *name); + + int vncGetParamCount(void); + char *vncGetParamList(void); +diff --git a/unix/xserver/hw/vnc/xvnc.c b/unix/xserver/hw/vnc/xvnc.c +index 4eb0b0b13..5744acac8 100644 +--- a/unix/xserver/hw/vnc/xvnc.c ++++ b/unix/xserver/hw/vnc/xvnc.c +@@ -618,6 +618,20 @@ ddxProcessArgument(int argc, char *argv[], int i) + exit(0); + } + ++ /* We need to resolve an ambiguity for booleans */ ++ if (argv[i][0] == '-' && i+1 < argc && ++ vncIsParamBool(&argv[i][1])) { ++ if ((strcasecmp(argv[i+1], "0") == 0) || ++ (strcasecmp(argv[i+1], "1") == 0) || ++ (strcasecmp(argv[i+1], "true") == 0) || ++ (strcasecmp(argv[i+1], "false") == 0) || ++ (strcasecmp(argv[i+1], "yes") == 0) || ++ (strcasecmp(argv[i+1], "no") == 0)) { ++ vncSetParam(&argv[i][1], argv[i+1]); ++ return 2; ++ } ++ } ++ + if (vncSetParamSimple(argv[i])) + return 1; + +diff --git a/vncviewer/vncviewer.cxx b/vncviewer/vncviewer.cxx +index d4dd3063c..77ba3d3f4 100644 +--- a/vncviewer/vncviewer.cxx ++++ b/vncviewer/vncviewer.cxx +@@ -556,6 +556,26 @@ int main(int argc, char** argv) + } + + for (int i = 1; i < argc;) { ++ /* We need to resolve an ambiguity for booleans */ ++ if (argv[i][0] == '-' && i+1 < argc) { ++ VoidParameter *param; ++ ++ param = Configuration::getParam(&argv[i][1]); ++ if ((param != NULL) && ++ (dynamic_cast(param) != NULL)) { ++ if ((strcasecmp(argv[i+1], "0") == 0) || ++ (strcasecmp(argv[i+1], "1") == 0) || ++ (strcasecmp(argv[i+1], "true") == 0) || ++ (strcasecmp(argv[i+1], "false") == 0) || ++ (strcasecmp(argv[i+1], "yes") == 0) || ++ (strcasecmp(argv[i+1], "no") == 0)) { ++ param->setParam(argv[i+1]); ++ i += 2; ++ continue; ++ } ++ } ++ } ++ + if (Configuration::setParam(argv[i])) { + i++; + continue; diff --git a/SPECS/tigervnc.spec b/SPECS/tigervnc.spec index d78ce25..820d7f7 100644 --- a/SPECS/tigervnc.spec +++ b/SPECS/tigervnc.spec @@ -1,6 +1,6 @@ Name: tigervnc Version: 1.10.1 -Release: 7%{?dist} +Release: 9%{?dist} Summary: A TigerVNC remote display system %global _hardened_build 1 @@ -27,6 +27,7 @@ Patch14: tigervnc-provide-correct-dimensions-for-xshm-setup.patch # Upstream patches Patch50: tigervnc-systemd-support.patch Patch51: tigervnc-remove-trailing-spaces-in-user-name.patch +Patch52: tigervnc-tolerate-specifying-boolparam.patch # This is tigervnc-%%{version}/unix/xserver116.patch rebased on the latest xorg Patch100: tigervnc-xserver120.patch @@ -184,6 +185,7 @@ popd %patch50 -p1 -b .tigervnc-systemd-support %patch51 -p1 -b .remove-trailing-spaces-in-user-name +%patch52 -p1 -b .tolerate-specifying-boolparam %build %ifarch sparcv9 sparc64 s390 s390x @@ -349,6 +351,14 @@ fi %changelog +* Tue Oct 6 2020 Jan Grulich - 1.10.1-9 +- Bump build for gating issue + Resolves: bz#1883432 + +* Wed Sep 30 2020 Jan Grulich - 1.10.1-8 +- Tolerate specifying -BoolParam 0 and similar + Resolves: bz#1883432 + * Wed Jul 08 2020 Jan Grulich - 1.10.1-7 - Enable server module on s390x Resolves: bz#1854925