diff --git a/0001-Return-Success-from-generate_modkeymap-when-max_keys.patch b/0001-Return-Success-from-generate_modkeymap-when-max_keys.patch new file mode 100644 index 0000000..1c03169 --- /dev/null +++ b/0001-Return-Success-from-generate_modkeymap-when-max_keys.patch @@ -0,0 +1,60 @@ +From 3fae47581a47613f1117b8794ae37b75ace73f3e Mon Sep 17 00:00:00 2001 +From: Adam Tkac +Date: Tue, 24 Aug 2010 17:21:30 +0200 +Subject: [PATCH] Return Success from generate_modkeymap() when max_keys_per_mod is zero. + +max_keys_per_mod equal to zero is a valid situation so generate_modkeymap +should not return BadAlloc in this case. + +Signed-off-by: Adam Tkac +--- + dix/inpututils.c | 24 +++++++++++++----------- + 1 files changed, 13 insertions(+), 11 deletions(-) + +diff --git a/dix/inpututils.c b/dix/inpututils.c +index 8ec80b5..6693c67 100644 +--- a/dix/inpututils.c ++++ b/dix/inpututils.c +@@ -286,7 +286,7 @@ int generate_modkeymap(ClientPtr client, DeviceIntPtr dev, + { + CARD8 keys_per_mod[8]; + int max_keys_per_mod; +- KeyCode *modkeymap; ++ KeyCode *modkeymap = NULL; + int i, j, ret; + + ret = XaceHook(XACE_DEVICE_ACCESS, client, dev, DixGetAttrAccess); +@@ -310,18 +310,20 @@ int generate_modkeymap(ClientPtr client, DeviceIntPtr dev, + } + } + +- modkeymap = calloc(max_keys_per_mod * 8, sizeof(KeyCode)); +- if (!modkeymap) +- return BadAlloc; ++ if (max_keys_per_mod != 0) { ++ modkeymap = calloc(max_keys_per_mod * 8, sizeof(KeyCode)); ++ if (!modkeymap) ++ return BadAlloc; + +- for (i = 0; i < 8; i++) +- keys_per_mod[i] = 0; ++ for (i = 0; i < 8; i++) ++ keys_per_mod[i] = 0; + +- for (i = 8; i < MAP_LENGTH; i++) { +- for (j = 0; j < 8; j++) { +- if (dev->key->xkbInfo->desc->map->modmap[i] & (1 << j)) { +- modkeymap[(j * max_keys_per_mod) + keys_per_mod[j]] = i; +- keys_per_mod[j]++; ++ for (i = 8; i < MAP_LENGTH; i++) { ++ for (j = 0; j < 8; j++) { ++ if (dev->key->xkbInfo->desc->map->modmap[i] & (1 << j)) { ++ modkeymap[(j * max_keys_per_mod) + keys_per_mod[j]] = i; ++ keys_per_mod[j]++; ++ } + } + } + } +-- +1.7.2.2 + diff --git a/tigervnc.spec b/tigervnc.spec index c8b9b22..8ef01ee 100644 --- a/tigervnc.spec +++ b/tigervnc.spec @@ -2,7 +2,7 @@ Name: tigervnc Version: 1.0.90 -Release: 0.18.%{snap}%{?dist} +Release: 0.19.%{snap}%{?dist} Summary: A TigerVNC remote display system Group: User Interface/Desktops @@ -31,7 +31,8 @@ BuildRequires: nasm Requires(post): coreutils Requires(postun):coreutils -Requires: hicolor-icon-theme +Requires: hicolor-icon-theme +Requires: tigervnc-license Provides: vnc = 4.1.3-2, vnc-libs = 4.1.3-2 Obsoletes: vnc < 4.1.3-2, vnc-libs < 4.1.3-2 @@ -42,6 +43,8 @@ Patch0: tigervnc-102434.patch Patch4: tigervnc-cookie.patch Patch8: tigervnc-viewer-reparent.patch Patch10: tigervnc11-ldnow.patch +Patch11: 0001-Return-Success-from-generate_modkeymap-when-max_keys.patch +Patch12: tigervnc11-rh611677.patch %description Virtual Network Computing (VNC) is a remote display system which @@ -58,21 +61,35 @@ Provides: vnc-server = 4.1.3-2, vnc-libs = 4.1.3-2 Obsoletes: vnc-server < 4.1.3-2, vnc-libs < 4.1.3-2 Provides: tightvnc-server = 1.5.0-0.15.20090204svn3586 Obsoletes: tightvnc-server < 1.5.0-0.15.20090204svn3586 +Requires: perl +Requires: tigervnc-server-minimal +Requires: xorg-x11-xauth + +%description server +The VNC system allows you to access the same desktop from a wide +variety of platforms. This package includes set of utilities +which make usage of TigerVNC server more user friendly. It also +contains x0vncserver program which can export your active +X session. + +%package server-minimal +Summary: A minimal installation of TigerVNC server +Group: User Interface/X Requires(post): chkconfig Requires(preun):chkconfig Requires(preun):initscripts Requires(postun):initscripts -Requires: perl # Check you don't reintroduce #498184 again Requires: xorg-x11-fonts-misc -Requires: xorg-x11-xauth Requires: mesa-dri-drivers, xkeyboard-config, xorg-x11-xkb-utils +Requires: tigervnc-license -%description server +%description server-minimal The VNC system allows you to access the same desktop from a wide -variety of platforms. This package is a TigerVNC server, allowing -others to access the desktop on your machine. +variety of platforms. This package contains minimal installation +of TigerVNC server, allowing others to access the desktop on your +machine. %ifnarch s390 s390x %package server-module @@ -83,6 +100,7 @@ Obsoletes: vnc-server < 4.1.3-2, vnc-libs < 4.1.3-2 Provides: tightvnc-server-module = 1.5.0-0.15.20090204svn3586 Obsoletes: tightvnc-server-module < 1.5.0-0.15.20090204svn3586 Requires: xorg-x11-server-Xorg +Requires: tigervnc-license %description server-module This package contains libvnc.so module to X server, allowing others @@ -99,6 +117,14 @@ BuildArch: noarch The Java TigerVNC viewer applet for web browsers. Install this package to allow clients to use web browser when connect to the TigerVNC server. +%package license +Summary: License of TigerVNC suite +Group: User Interface/X +BuildArch: noarch + +%description license +This package contains license of the TigerVNC suite + %prep %setup -q -n %{name}-%{version}-%{snap} @@ -106,6 +132,7 @@ clients to use web browser when connect to the TigerVNC server. %patch4 -p1 -b .cookie %patch8 -p1 -b .viewer-reparent %patch10 -p1 -b .ldnow +%patch12 -p1 -b .rh611677 cp -r /usr/share/xorg-x11-server-source/* unix/xserver pushd unix/xserver @@ -113,6 +140,7 @@ for all in `find . -type f -perm -001`; do chmod -x "$all" done patch -p1 -b --suffix .vnc < ../xserver19.patch +%patch11 -p1 -b .rh611677-xorg popd # Use newer gettext @@ -236,7 +264,7 @@ fi %files -f %{name}.lang %defattr(-,root,root,-) -%doc LICENCE.TXT unix/README +%doc unix/README %{_bindir}/vncviewer %{_datadir}/icons/hicolor/*/apps/* %{_datadir}/applications/* @@ -244,18 +272,21 @@ fi %files server %defattr(-,root,root,-) -%{_initddir}/vncserver %config(noreplace) %{_sysconfdir}/sysconfig/vncservers +%{_initddir}/vncserver +%{_bindir}/x0vncserver +%{_bindir}/vncserver +%{_mandir}/man1/vncserver.1* +%{_mandir}/man1/x0vncserver.1* + +%files server-minimal +%defattr(-,root,root,-) %{_bindir}/vncconfig %{_bindir}/vncpasswd -%{_bindir}/x0vncserver %{_bindir}/Xvnc -%{_bindir}/vncserver %{_mandir}/man1/Xvnc.1* %{_mandir}/man1/vncpasswd.1* %{_mandir}/man1/vncconfig.1* -%{_mandir}/man1/vncserver.1* -%{_mandir}/man1/x0vncserver.1* %ifnarch s390 s390x %files server-module @@ -268,7 +299,15 @@ fi %doc java/src/com/tigervnc/vncviewer/README %{_datadir}/vnc/classes/* +%files license +%doc LICENCE.TXT + %changelog +* Wed Aug 25 2010 Adam Tkac 1.0.90-0.19.20100813svn4123 +- separate Xvnc, vncpasswd and vncconfig to -server-minimal subpkg (#626946) +- move license to separate subpkg and Requires it from main subpkgs +- Xvnc: handle situations when no modifiers exist well (#611677) + * Fri Aug 13 2010 Adam Tkac 1.0.90-0.18.20100813svn4123 - update to r4123 (#617973) - add perl requires to -server subpkg (#619791) diff --git a/tigervnc11-rh611677.patch b/tigervnc11-rh611677.patch new file mode 100644 index 0000000..029854b --- /dev/null +++ b/tigervnc11-rh611677.patch @@ -0,0 +1,98 @@ +diff -up tigervnc-1.0.90-20100420svn4030/unix/xserver/hw/vnc/Input.cc.rh611677 tigervnc-1.0.90-20100420svn4030/unix/xserver/hw/vnc/Input.cc +--- tigervnc-1.0.90-20100420svn4030/unix/xserver/hw/vnc/Input.cc.rh611677 2010-08-24 17:40:00.511860227 +0200 ++++ tigervnc-1.0.90-20100420svn4030/unix/xserver/hw/vnc/Input.cc 2010-08-24 17:49:23.169007409 +0200 +@@ -322,6 +322,11 @@ public: + return; + } + ++ if (maxKeysPerMod == 0) { ++ vlog.debug("Keyboard has no modifiers"); ++ return; ++ } ++ + keycode = modmap[modIndex * maxKeysPerMod]; + xfree(modmap); + #else +@@ -355,6 +360,11 @@ public: + vlog.error("generate_modkeymap failed"); + return; + } ++ ++ if (maxKeysPerMod == 0) { ++ vlog.debug("Keyboard has no modifiers"); ++ return; ++ } + #else + maxKeysPerMod = keyc->maxKeysPerModifier; + #endif +@@ -530,6 +540,9 @@ void InputDevice::keyEvent(rdr::U32 keys + return; + } + ++ if (maxKeysPerMod == 0) ++ vlog.debug("Keyboard has no modifiers"); ++ + state = XkbStateFieldFromRec(&keyc->xkbInfo->state); + #else + keyc = keyboardDev->key; +@@ -565,11 +578,13 @@ void InputDevice::keyEvent(rdr::U32 keys + ModeSwitchFound: + + int col = 0; +- if ((state & (1 << ShiftMapIndex)) != 0) +- col |= 1; +- if (modeSwitchMapIndex != 0 && +- ((state & (1 << modeSwitchMapIndex))) != 0) +- col |= 2; ++ if (maxKeysPerMod != 0) { ++ if ((state & (1 << ShiftMapIndex)) != 0) ++ col |= 1; ++ if (modeSwitchMapIndex != 0 && ++ ((state & (1 << modeSwitchMapIndex))) != 0) ++ col |= 2; ++ } + + int kc = KeysymToKeycode(keymap, keysym, &col); + +@@ -581,7 +596,8 @@ ModeSwitchFound: + * We never get ISO_Left_Tab here because it's already been translated + * in VNCSConnectionST. + */ +- if (keysym == XK_Tab && ((state & (1 << ShiftMapIndex))) != 0) ++ if (maxKeysPerMod != 0 && keysym == XK_Tab && ++ ((state & (1 << ShiftMapIndex))) != 0) + col |= 1; + + if (kc == 0) { +@@ -662,18 +678,20 @@ ModeSwitchFound: + } + } + +- ModifierState shift(keyboardDev, ShiftMapIndex); +- ModifierState modeSwitch(keyboardDev, modeSwitchMapIndex); +- if (down) { +- if (col & 1) +- shift.press(); +- else +- shift.release(); +- if (modeSwitchMapIndex) { +- if (col & 2) +- modeSwitch.press(); ++ if (maxKeysPerMod != 0) { ++ ModifierState shift(keyboardDev, ShiftMapIndex); ++ ModifierState modeSwitch(keyboardDev, modeSwitchMapIndex); ++ if (down) { ++ if (col & 1) ++ shift.press(); + else +- modeSwitch.release(); ++ shift.release(); ++ if (modeSwitchMapIndex) { ++ if (col & 2) ++ modeSwitch.press(); ++ else ++ modeSwitch.release(); ++ } + } + } +