diff --git a/10-libvnc.conf b/10-libvnc.conf new file mode 100644 index 0000000..343f0c2 --- /dev/null +++ b/10-libvnc.conf @@ -0,0 +1,19 @@ +# This file contains configuration of libvnc.so module +# +# To get libvnc.so module working, do this: +# 1. run "vncpasswd" as root user +# 2. uncomment configuration lines below +# +# Please note you can specify any option which Xvnc accepts. +# Refer to `Xvnc -help` output for detailed list of options. + +#Section "Module" +# Load "vnc" +#EndSection + +#Section "Screen" +# Identifier "Screen0 +# DefaultDepth 16 +# Option "SecurityTypes" "VncAuth" +# Option "PasswordFile" "/root/.vnc/passwd" +#EndSection diff --git a/N_xorg-server-xdmcp.patch b/N_xorg-server-xdmcp.patch new file mode 100644 index 0000000..1815313 --- /dev/null +++ b/N_xorg-server-xdmcp.patch @@ -0,0 +1,30 @@ +Index: xorg-server-1.12.1/os/access.c +=================================================================== +--- xorg-server-1.12.1.orig/os/access.c ++++ xorg-server-1.12.1/os/access.c +@@ -714,7 +714,9 @@ DefineSelf(int fd) + + /* + * ignore 'localhost' entries as they're not useful +- * on the other end of the wire ++ * on the other end of the wire and because on hosts ++ * with shared home dirs they'll result in conflicting ++ * entries in ~/.Xauthority + */ + if (ifr->ifa_flags & IFF_LOOPBACK) + continue; +@@ -735,6 +737,14 @@ DefineSelf(int fd) + else if (family == FamilyInternet6 && + IN6_IS_ADDR_LOOPBACK((struct in6_addr *) addr)) + continue; ++ ++ /* Ignore IPv6 link local addresses (fe80::/10), because ++ * they need a scope identifier, which we have no way ++ * of telling to the other end. ++ */ ++ if (family == FamilyInternet6 && ++ IN6_IS_ADDR_LINKLOCAL((struct in6_addr *)addr)) ++ continue; + #endif + XdmcpRegisterConnection(family, (char *) addr, len); + #if defined(IPv6) && defined(AF_INET6) diff --git a/tigervnc-1.1.0.tar.gz b/tigervnc-1.1.0.tar.gz deleted file mode 100644 index 9386437..0000000 --- a/tigervnc-1.1.0.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:594b70825a2c24863afd7b8dd2a5bc1935807118c6726e1d98396dee44d060f4 -size 2742707 diff --git a/tigervnc-1.2.80-fix-int-to-pointer.patch b/tigervnc-1.2.80-fix-int-to-pointer.patch new file mode 100644 index 0000000..1b48bce --- /dev/null +++ b/tigervnc-1.2.80-fix-int-to-pointer.patch @@ -0,0 +1,13 @@ +Index: unix/xserver/hw/vnc/vncExtInit.cc +=================================================================== +--- xserver/hw/vnc/vncExtInit.cc (revision 5122) ++++ xserver/hw/vnc/vncExtInit.cc (working copy) +@@ -1068,7 +1068,7 @@ + { + REQUEST(xVncExtApproveConnectReq); + REQUEST_SIZE_MATCH(xVncExtApproveConnectReq); +- if (queryConnectId == (void*)stuff->opaqueId) { ++ if ((CARD32)(long)queryConnectId == stuff->opaqueId) { + for (int scr = 0; scr < screenInfo.numScreens; scr++) { + if (desktop[scr]) { + desktop[scr]->approveConnection(queryConnectId, stuff->approve, diff --git a/tigervnc-1.3.0.tar.bz2 b/tigervnc-1.3.0.tar.bz2 new file mode 100644 index 0000000..1970f14 --- /dev/null +++ b/tigervnc-1.3.0.tar.bz2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:61e5a78118c3a4adbc3b3026615a1068aed43839c2ad62815832bbc780f38c5a +size 1069481 diff --git a/tigervnc-newfbsize.patch b/tigervnc-newfbsize.patch new file mode 100644 index 0000000..cbd379a --- /dev/null +++ b/tigervnc-newfbsize.patch @@ -0,0 +1,12 @@ +diff -up a/vncviewer/CConn.cxx.newfbsize b/vncviewer/CConn.cxx +--- a/vncviewer/CConn.cxx.newfbsize 2008-10-23 13:00:59.000000000 +0200 ++++ b/vncviewer/CConn.cxx 2008-10-23 13:01:11.000000000 +0200 +@@ -327,6 +327,8 @@ void CConn::beginRect(const Rect& r, uns + if (encoding != encodingCopyRect) { + lastServerEncoding = encoding; + } ++ if (encoding == pseudoEncodingDesktopSize) ++ setDesktopSize( r.width(), r.height() ); + } + + void CConn::endRect(const Rect& r, int encoding) diff --git a/tigervnc.changes b/tigervnc.changes index b95535a..9f984d1 100644 --- a/tigervnc.changes +++ b/tigervnc.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Mon Nov 18 14:05:44 UTC 2013 - msrb@suse.com + +- Update to 1.3.0. +- Build xorg-x11-Xvnc package from this sources. + ------------------------------------------------------------------- Wed Sep 19 08:08:53 UTC 2012 - werner@suse.de diff --git a/tigervnc.spec b/tigervnc.spec index 9f7dd18..f075226 100644 --- a/tigervnc.spec +++ b/tigervnc.spec @@ -14,20 +14,19 @@ # Please submit bugfixes or comments via http://bugs.opensuse.org/ # -%define tigervnc 1 -%bcond_with Xstatic -%bcond_without dox Name: tigervnc -Version: 1.1.0 +Version: 1.3.0 Release: 0 License: GPL-2.0 and MIT -%if %tigervnc -# BuildRequires: xorg-x11-server-sdk Mesa-devel libopenssl-devel gcc-c++ libjpeg-devel +Conflicts: tightvnc +BuildRequires: xorg-x11-server-sdk Mesa-devel libopenssl-devel gcc-c++ libjpeg-devel fltk-devel BuildRequires: nasm gcc-c++ pkgconfig(xproto) pkgconfig(x11) pkgconfig(xext) pkgconfig(xtst) -BuildRequires: autoconf automake libtool binutils-gold +BuildRequires: cmake autoconf automake libtool binutils-gold +BuildRequires: java-devel jpackage-utils +# Because of keytool to build java client +BuildRequires: mozilla-nss BuildRequires: xorg-x11-libICE-devel xorg-x11-libSM-devel pkgconfig(libtasn1) pkgconfig(gnutls) libgcrypt-devel libgpg-error-devel pam-devel -%if %{with Xstatic} BuildRequires: pkgconfig(fontutil) BuildRequires: pkg-config xmlto pkgconfig(pixman-1) >= 0.15.20 pkgconfig(glproto) pkgconfig(gl) pkgconfig(dri) pkgconfig(openssl) BuildRequires: pkgconfig(fixesproto) >= 4.1 pkgconfig(damageproto) >= 1.1 pkgconfig(xcmiscproto) >= 1.2.0 pkgconfig(xtrans) >= 1.2.2 @@ -36,167 +35,156 @@ BuildRequires: pkgconfig(xextproto) >= 7.0.99.3 pkgconfig(inputproto) >= 1.9.9 BuildRequires: pkgconfig(videoproto) pkgconfig(compositeproto) >= 0.4 pkgconfig(recordproto) >= 1.13.99.1 pkgconfig(scrnsaverproto) >= 1.1 BuildRequires: pkgconfig(resourceproto) pkgconfig(xineramaproto) pkgconfig(xkbfile) pkgconfig(xau) pkgconfig(xdmcp) pkgconfig(xfont) >= 1.4.2 BuildRequires: pkgconfig(pciaccess) >= 0.8.0 -%endif %{nil Xstatic} -%if %{with dox} -BuildRequires: texlive -BuildRequires: texlive-latex -%if 0%{?suse_version} > 1220 -BuildRequires: texlive-amsfonts -BuildRequires: texlive-cm-super -BuildRequires: texlive-ec -%endif -%endif %{nil with dox} -URL: http://sourceforge.net/apps/mediawiki/tigervnc/ -%else -Requires: x11vnc -%endif +URL: http://sourceforge.net/apps/mediawiki/tigervnc/ BuildRoot: %{_tmppath}/%{name}-%{version}-build Group: System/X11/Servers/XF86_4 -%if %tigervnc Summary: A high-performance, platform-neutral implementation of VNC -# _____________*_________*_________*_________*_________*_________*_________* -%else -Summary: Xvnc wrapper script which makes use of Xvfb/x11vnc -%endif -%if %tigervnc -Source1: http://downloads.sf.net/tigervnc/%name-%version.tar.gz -%if %{with Xstatic} -Source2: xorg-server-1.9.3.tar.bz2 -Patch: xorg-server-xdmcp.patch -Patch3: xorg-bug38185.patch -%endif -Patch1: tigervnc-sf3492352.diff -Patch2: tigervnc-sf3492503.patch -Patch4: tigervnc-sf3493012.patch -Patch5: tigervnc-sf3495623.patch -%else -Source0: Xvnc.pl -%endif +Source1: tigervnc-1.3.0.tar.bz2 +Source2: xorg-server-1.13.0.tar.bz2 +Source3: vnc.xinetd +Source4: 10-libvnc.conf +Source5: vnc-server.firewall +Source6: vnc-httpd.firewall +Source7: vnc_inetd_httpd +Source8: vnc.reg + +# Tiger vnc patches +Patch1: u_tigervnc-1.3.0-fix-use-after-free.patch +Patch2: tigervnc-newfbsize.patch + +# Xserver patches +Patch10: tigervnc-1.2.80-fix-int-to-pointer.patch +Patch11: u_aarch64-support.patch +Patch12: N_xorg-server-xdmcp.patch %description -%if %tigervnc TigerVNC is a high-performance, platform-neutral implementation of VNC (Virtual Network Computing), a client/server application that allows users to launch and interact with graphical applications on remote machines. TigerVNC provides the levels of performance necessary to run 3D and video applications; it attempts to maintain a common look and feel and re-use components, where possible, across the various platforms that it supports. -TigerVNC also provides extensions for advanced authentication methods and TLS encryption. -%else -This is a wrapper script, which makes use of Xvfb/x11vnc to implement -a Xvnc server. -%endif +TigerVNC also provides extensions for advanced authentication methods and TLS encryption. + +%package -n xorg-x11-Xvnc +Requires: xinetd +Summary: TigerVNC implementation of Xvnc +Group: System/X11/Servers/XF86_4 + +%description -n xorg-x11-Xvnc +This is the TigerVNC implementation of Xvnc. %prep -%if %tigervnc -%setup -T -n %{name}-%{version}/unix/xserver -b1 \ -%if %{with Xstatic} --b2 -cp -r -t. ../../../xorg-server-*/* -patch -p1 < ../xserver19.patch -%patch -p2 -%patch3 -p1 -%endif +%setup -T -b1 -b2 +cp -r ../xorg-server-*/* unix/xserver/ -cd ../.. %patch1 -p1 %patch2 -p1 -%patch4 -p1 -%patch5 -p1 -cd doc -mv ft-protocol-problems.txt ft-protocol-problems.eml -%endif -%define xcflags -include $PWD/deprec.h -fuse-linker-plugin -%build -%if %tigervnc -pushd ../.. -%if %{with dox} -cd doc -for s in rfbtight -do while [[ ! -r "$s.toc" ]] || grep "^No file .*$s\\.toc" "$s.log" && pdflatex "$s.tex" -do : -done -done -cd .. -%endif %{nil with dox} -autoreconf -fi -echo>deprec.h '#ifdef __cplusplus -#define CDECL118 "C" -#else -#define CDECL118 -#endif -extern CDECL118 struct hostent *gethostbyname (const char *__name) __attribute__ ((deprecated)); -#undef __DATE__ -#undef __TIME__ -#define __DATE__ "(rpm -qif $0)" -#define __TIME__ __DATE__ - -' -%configure --disable-static --with-system-jpeg --with-system-zlib \ -CFLAGS="$CFLAGS %{xcflags}" CXXFLAGS="$CXXFLAGS %{xcflags}" -make %{?_smp_mflags} -%if %{with Xstatic} +pushd unix/xserver +patch -p1 < ../xserver113.patch +%patch10 -p1 +%patch11 -p1 +%patch12 -p1 +popd + +%build +# Build all tigervnc +cmake -DCMAKE_INSTALL_PREFIX:PATH=%{_prefix} +make %{?_smp_mflags} + +# Build Xvnc server +pushd unix/xserver +autoreconf -fi +%configure \ + --disable-xorg --disable-xnest --disable-xvfb --disable-dmx \ + --disable-xwin --disable-xephyr --disable-kdrive --with-pic \ + --disable-static --disable-xinerama \ + --with-xkb-path="/usr/share/X11/xkb" \ + --with-xkb-output="/var/lib/xkb/compiled" \ + --enable-glx --enable-dri --enable-dri2 \ + --disable-config-dbus \ + --disable-config-hal \ + --disable-config-udev \ + --without-dtrace \ + --disable-unit-tests \ + --disable-devel-docs \ + --with-fontrootdir=/usr/share/fonts \ + --disable-selective-werror +make %{?_smp_mflags} +popd + +# Build java client +pushd java +cmake -DCMAKE_INSTALL_PREFIX:PATH=%{_prefix} +make %{?_smp_mflags} popd -: ./autogen.sh -autoreconf -fiv -Werror -%configure --disable-xvfb --disable-xnest --disable-xorg --disable-dmx \ - --disable-xwin --disable-xephyr --disable-kdrive --with-pic \ - --disable-static --disable-xinerama \ - --disable-composite \ - --with-xkb-path="/usr/share/X11/xkb" \ - --with-xkb-output="/var/lib/xkb/compiled" \ - --disable-dri2 \ - --enable-glx \ - --disable-config-dbus \ - --disable-config-hal \ - --disable-config-udev \ - --without-dtrace \ - --with-fontrootdir=/usr/share/fonts -%make %{?_smp_mflags} -%endif %{nil with Xstatic} -%endif %{nil tigervnc} %install -%if %tigervnc -cd ../.. -%makeinstall -%else %{nil tigervnc} -mkdir -p $RPM_BUILD_ROOT/usr/bin -install -m 755 $RPM_SOURCE_DIR/Xvnc.pl $RPM_BUILD_ROOT/usr/bin/Xvnc -%endif %{nil tigervnc} -mkdir -p $RPM_BUILD_ROOT/etc/sysconfig/SuSEfirewall2.d/services -cat > $RPM_BUILD_ROOT/etc/sysconfig/SuSEfirewall2.d/services/%{name} << EOF -## Name: VNC Server -## Description: Opens ports for VNC Server -TCP="5801 5901" -EOF + +%make_install + +pushd unix/xserver +%make_install +popd + +pushd java +mkdir -p $RPM_BUILD_ROOT%{_datadir}/vnc/classes +install -m755 VncViewer.jar $RPM_BUILD_ROOT%{_datadir}/vnc/classes +install -m644 com/tigervnc/vncviewer/index.vnc $RPM_BUILD_ROOT%{_datadir}/vnc/classes +popd + +install -D -m 644 %{SOURCE3} $RPM_BUILD_ROOT/etc/xinetd.d/vnc +install -D -m 644 %{SOURCE4} $RPM_BUILD_ROOT/etc/X11/xorg.conf.d/10-libvnc.conf +install -D -m 644 %{SOURCE5} $RPM_BUILD_ROOT/etc/sysconfig/SuSEfirewall2.d/services/vnc-server +install -D -m 644 %{SOURCE6} $RPM_BUILD_ROOT/etc/sysconfig/SuSEfirewall2.d/services/vnc-httpd +install -D -m 755 %{SOURCE7} $RPM_BUILD_ROOT%{_bindir}/vnc_inetd_httpd +install -D -m 644 %{SOURCE8} $RPM_BUILD_ROOT/etc/slp.reg.d/vnc.reg + %find_lang '%{name}' -%files -f ../../%{name}.lang +%files -f %{name}.lang +%defattr(-,root,root,-) +%{_bindir}/vncviewer +%exclude /usr/share/doc/tigervnc-1.3.0 +%doc LICENCE.TXT +%doc README.txt +%{_mandir}/man1/vncviewer.1* + +%files -n xorg-x11-Xvnc %defattr(-,root,root) -%config /etc/sysconfig/SuSEfirewall2.d/services/%{name} -%{_bindir}/* -%if %tigervnc -%doc %{_mandir}/man1/* -%if %{with Xstatic} + +%{_bindir}/Xvnc +%{_bindir}/vncconfig +%{_bindir}/vncpasswd +%{_bindir}/vncserver +%{_bindir}/x0vncserver +%{_bindir}/vnc_inetd_httpd + %exclude %{_mandir}/man1/Xserver.1* +%{_mandir}/man1/Xvnc.1* +%{_mandir}/man1/vncconfig.1* +%{_mandir}/man1/vncpasswd.1* +%{_mandir}/man1/vncserver.1* +%{_mandir}/man1/x0vncserver.1* + %exclude /usr/%{_lib}/xorg/protocol.txt %exclude /usr/%{_lib}/xorg/modules/extensions/libvnc.la -%exclude /usr/%{_lib}/xorg/modules/extensions/libvnc.so +%{_libdir}/xorg/modules/extensions/libvnc.so + %exclude /var/lib/xkb/compiled/README.compiled -%endif %{nil Xstatic} + +/etc/sysconfig/SuSEfirewall2.d/services/vnc-server +/etc/sysconfig/SuSEfirewall2.d/services/vnc-httpd + +%config(noreplace) /etc/X11/xorg.conf.d/10-libvnc.conf +%config(noreplace) /etc/xinetd.d/vnc +%dir /etc/slp.reg.d +%config(noreplace) /etc/slp.reg.d/vnc.reg + %exclude /usr/lib/debug/* %exclude /usr/lib/debug/.* %exclude /usr/src/debug -%endif -%if %{with Xstatic} -%doc COPYING -%endif %{nil with Xstatic} -%doc ../../README.txt ../../LICENCE.TXT -%doc ../../doc/ft-protocol-problems.eml ../../doc/realvnc-internals.txt ../../doc/registered-codes.txt -%if %{with dox} -%doc ../../doc/rfbtight.pdf -%else %{nil with dox} -%doc ../../doc/rfbtight.tex -%endif %{nil with dox} + +%doc java/com/tigervnc/vncviewer/README +%{_datadir}/vnc %changelog diff --git a/u_aarch64-support.patch b/u_aarch64-support.patch new file mode 100644 index 0000000..3b3d410 --- /dev/null +++ b/u_aarch64-support.patch @@ -0,0 +1,60 @@ +Subject: Basic support for aarch64 +Author: Andreas Schwab + +Index: xorg-server-1.13.2/hw/xfree86/os-support/linux/lnx_video.c +=================================================================== +--- xorg-server-1.13.2.orig/hw/xfree86/os-support/linux/lnx_video.c ++++ xorg-server-1.13.2/hw/xfree86/os-support/linux/lnx_video.c +@@ -58,7 +58,8 @@ static Bool ExtendedEnabled = FALSE; + !defined(__sparc__) && \ + !defined(__mips__) && \ + !defined(__nds32__) && \ +- !defined(__arm__) ++ !defined(__arm__) && \ ++ !defined(__aarch64__) + + /* + * Due to conflicts with "compiler.h", don't rely on to declare +@@ -511,7 +512,7 @@ xf86EnableIO(void) + #endif + } + close(fd); +-#elif !defined(__mc68000__) && !defined(__sparc__) && !defined(__mips__) && !defined(__sh__) && !defined(__hppa__) && !defined(__s390__) && !defined(__arm__) && !defined(__m32r__) && !defined(__nds32__) ++#elif !defined(__mc68000__) && !defined(__sparc__) && !defined(__mips__) && !defined(__sh__) && !defined(__hppa__) && !defined(__s390__) && !defined(__arm__) && !defined(__m32r__) && !defined(__nds32__) && !defined(__aarch64__) + if (ioperm(0, 1024, 1) || iopl(3)) { + if (errno == ENODEV) + ErrorF("xf86EnableIOPorts: no I/O ports found\n"); +@@ -540,7 +541,7 @@ xf86DisableIO(void) + #if defined(__powerpc__) + munmap(ioBase, 0x20000); + ioBase = NULL; +-#elif !defined(__mc68000__) && !defined(__sparc__) && !defined(__mips__) && !defined(__sh__) && !defined(__hppa__) && !defined(__arm__) && !defined(__s390__) && !defined(__m32r__) && !defined(__nds32__) ++#elif !defined(__mc68000__) && !defined(__sparc__) && !defined(__mips__) && !defined(__sh__) && !defined(__hppa__) && !defined(__arm__) && !defined(__s390__) && !defined(__m32r__) && !defined(__nds32__) && !defined(__aarch64__) + iopl(0); + ioperm(0, 1024, 0); + #endif +Index: xorg-server-1.13.2/include/servermd.h +=================================================================== +--- xorg-server-1.13.2.orig/include/servermd.h ++++ xorg-server-1.13.2/include/servermd.h +@@ -286,6 +286,20 @@ SOFTWARE. + #define GLYPHPADBYTES 4 + #endif /* linux/s390 */ + ++#ifdef __aarch64__ ++ ++#ifdef __AARCH64EL__ ++#define IMAGE_BYTE_ORDER LSBFirst ++#define BITMAP_BIT_ORDER LSBFirst ++#endif ++#ifdef __AARCH64EB__ ++#define IMAGE_BYTE_ORDER MSBFirst ++#define BITMAP_BIT_ORDER MSBFirst ++#endif ++#define GLYPHPADBYTES 4 ++ ++#endif /* __aarch64__ */ ++ + /* size of buffer to use with GetImage, measured in bytes. There's obviously + * a trade-off between the amount of heap used and the number of times the + * ddx routine has to be called. diff --git a/u_tigervnc-1.3.0-fix-use-after-free.patch b/u_tigervnc-1.3.0-fix-use-after-free.patch new file mode 100644 index 0000000..d147853 --- /dev/null +++ b/u_tigervnc-1.3.0-fix-use-after-free.patch @@ -0,0 +1,115 @@ +Author: Michal Srb +Subject: Fix use after free in ZRLEEncoder. +Patch-Mainline: To be upstreamed +References: bnc#840433 + +There is use after free crash when client using zrle disconnects: +ZRLEEncoder contains zos variable (rdr::ZlibOutStream) and mos variable (pointer to rdr::MemOutStream). +mos is always allocated in constructor (it could be a copy of static sharedMos pointer if sharedMos != 0, but it is always 0). +When ZRLEEncoder::writeRect is called, any of zrleEncode* functions sets mos as an underlying stream of zos. +When ZRLEEncoder is destructed, mos is deleted (sharedMos is always 0), then zos is implicitly destructed, but zos accesses it's underlying stream in it's destructor! + +We need to destruct mos first and zos second when ZRLEEncoder is destructed. +As sharedMos is never used, we can remove that, simplify ZRLEEncoder and turn zos into a member variable same as mos. They will be both implicitly destructed in reverse order of declaration. + +diff -ur tigervnc-1.3.0-orig/common/rfb/ZRLEEncoder.cxx tigervnc-1.3.0/common/rfb/ZRLEEncoder.cxx +--- tigervnc-1.3.0-orig/common/rfb/ZRLEEncoder.cxx 2013-09-17 00:18:28.557911306 +0300 ++++ tigervnc-1.3.0/common/rfb/ZRLEEncoder.cxx 2013-09-17 00:19:57.487915741 +0300 +@@ -26,7 +26,6 @@ + + using namespace rfb; + +-rdr::MemOutStream* ZRLEEncoder::sharedMos = 0; + int ZRLEEncoder::maxLen = 4097 * 1024; // enough for width 16384 32-bit pixels + + IntParameter zlibLevel("ZlibLevel","Zlib compression level",-1); +@@ -55,33 +54,27 @@ + } + + ZRLEEncoder::ZRLEEncoder(SMsgWriter* writer_) +- : writer(writer_), zos(0,0,zlibLevel) ++ : writer(writer_), zos(0,0,zlibLevel), mos(129*1024) + { +- if (sharedMos) +- mos = sharedMos; +- else +- mos = new rdr::MemOutStream(129*1024); + } + + ZRLEEncoder::~ZRLEEncoder() + { +- if (!sharedMos) +- delete mos; + } + + bool ZRLEEncoder::writeRect(const Rect& r, TransImageGetter* ig, Rect* actual) + { + rdr::U8* imageBuf = writer->getImageBuf(64 * 64 * 4 + 4); +- mos->clear(); ++ mos.clear(); + bool wroteAll = true; + *actual = r; + + switch (writer->bpp()) { + case 8: +- wroteAll = zrleEncode8(r, mos, &zos, imageBuf, maxLen, actual, ig); ++ wroteAll = zrleEncode8(r, &mos, &zos, imageBuf, maxLen, actual, ig); + break; + case 16: +- wroteAll = zrleEncode16(r, mos, &zos, imageBuf, maxLen, actual, ig); ++ wroteAll = zrleEncode16(r, &mos, &zos, imageBuf, maxLen, actual, ig); + break; + case 32: + { +@@ -94,16 +87,16 @@ + if ((fitsInLS3Bytes && pf.isLittleEndian()) || + (fitsInMS3Bytes && pf.isBigEndian())) + { +- wroteAll = zrleEncode24A(r, mos, &zos, imageBuf, maxLen, actual, ig); ++ wroteAll = zrleEncode24A(r, &mos, &zos, imageBuf, maxLen, actual, ig); + } + else if ((fitsInLS3Bytes && pf.isBigEndian()) || + (fitsInMS3Bytes && pf.isLittleEndian())) + { +- wroteAll = zrleEncode24B(r, mos, &zos, imageBuf, maxLen, actual, ig); ++ wroteAll = zrleEncode24B(r, &mos, &zos, imageBuf, maxLen, actual, ig); + } + else + { +- wroteAll = zrleEncode32(r, mos, &zos, imageBuf, maxLen, actual, ig); ++ wroteAll = zrleEncode32(r, &mos, &zos, imageBuf, maxLen, actual, ig); + } + break; + } +@@ -111,8 +104,8 @@ + + writer->startRect(*actual, encodingZRLE); + rdr::OutStream* os = writer->getOutStream(); +- os->writeU32(mos->length()); +- os->writeBytes(mos->data(), mos->length()); ++ os->writeU32(mos.length()); ++ os->writeBytes(mos.data(), mos.length()); + writer->endRect(); + return wroteAll; + } +diff -ur tigervnc-1.3.0-orig/common/rfb/ZRLEEncoder.h tigervnc-1.3.0/common/rfb/ZRLEEncoder.h +--- tigervnc-1.3.0-orig/common/rfb/ZRLEEncoder.h 2013-09-17 00:18:28.558911306 +0300 ++++ tigervnc-1.3.0/common/rfb/ZRLEEncoder.h 2013-09-17 00:20:34.372917581 +0300 +@@ -38,16 +38,11 @@ + // width, in this example about 128 bytes). + static void setMaxLen(int m) { maxLen = m; } + +- // setSharedMos() sets a MemOutStream to be shared amongst all +- // ZRLEEncoders. Should be called before any ZRLEEncoders are created. +- static void setSharedMos(rdr::MemOutStream* mos_) { sharedMos = mos_; } +- + private: + ZRLEEncoder(SMsgWriter* writer); + SMsgWriter* writer; ++ rdr::MemOutStream mos; + rdr::ZlibOutStream zos; +- rdr::MemOutStream* mos; +- static rdr::MemOutStream* sharedMos; + static int maxLen; + }; + } diff --git a/vnc-httpd.firewall b/vnc-httpd.firewall new file mode 100644 index 0000000..be8a18c --- /dev/null +++ b/vnc-httpd.firewall @@ -0,0 +1,4 @@ +## Name: VNC mini-HTTP server +## Description: Opens the VNC HTTP ports so that browsers can connect. + +TCP="5800:5899" diff --git a/vnc-server.firewall b/vnc-server.firewall new file mode 100644 index 0000000..a73b0e7 --- /dev/null +++ b/vnc-server.firewall @@ -0,0 +1,4 @@ +## Name: VNC +## Description: Opens VNC server ports so that viewers can connect. + +TCP="5900:5999" diff --git a/vnc.reg b/vnc.reg new file mode 100644 index 0000000..d32c01d --- /dev/null +++ b/vnc.reg @@ -0,0 +1,42 @@ +############################################################################# +# +# OpenSLP registration file +# +# register VNC remote logins via kdm +# You need also to allow remote logins +# +############################################################################# + +# Register VNC service for krdc (KDE VNC client in kdenetwork) +service:remotedesktop.kde:vnc://$HOSTNAME:5901,en,65535 +tcp-port=5901 +description=VNC remote login [1024x768] + +# Register VNC service for krdc (KDE VNC client in kdenetwork) +service:remotedesktop.kde:vnc://$HOSTNAME:5902,en,65535 +tcp-port=5902 +description=VNC remote login [1280x1024] + +# Register VNC service for krdc (KDE VNC client in kdenetwork) +service:remotedesktop.kde:vnc://$HOSTNAME:5903,en,65535 +tcp-port=5903 +description=VNC remote login [1600x1200] + +# Register VNC service for Java clients +# Can be used with every Web browser with enabled Java +service:remotedesktop.java:http://$HOSTNAME:5801,en,65535 +tcp-port=5801 +description=VNC remote login [1024x768] + +# Register VNC service for Java clients +# Can be used with every Web browser with enabled Java +service:remotedesktop.java:http://$HOSTNAME:5802,en,65535 +tcp-port=5802 +description=VNC remote login [1280x1024] + +# Register VNC service for Java clients +# Can be used with every Web browser with enabled Java +service:remotedesktop.java:http://$HOSTNAME:5803,en,65535 +tcp-port=5803 +description=VNC remote login [1600x1200] + diff --git a/vnc.xinetd b/vnc.xinetd new file mode 100644 index 0000000..c83c8bd --- /dev/null +++ b/vnc.xinetd @@ -0,0 +1,90 @@ +# default: off +# description: This serves out a VNC connection which starts at a KDM login \ +# prompt. This VNC connection has a resolution of 1024x768, 16bit depth. +service vnc1 +{ + type = UNLISTED + port = 5901 + socket_type = stream + protocol = tcp + wait = no + user = nobody + server = /usr/bin/Xvnc + server_args = -noreset -inetd -once -query localhost -geometry 1024x768 -depth 16 -securitytypes none + disable = yes +} +# default: off +# description: This serves out a VNC connection which starts at a KDM login \ +# prompt. This VNC connection has a resolution of 1280x1024, 16bit depth. +service vnc2 +{ + type = UNLISTED + port = 5902 + socket_type = stream + protocol = tcp + wait = no + user = nobody + server = /usr/bin/Xvnc + server_args = -noreset -inetd -once -query localhost -geometry 1280x1024 -depth 16 -securitytypes none + disable = yes +} +# default: off +# description: This serves out a VNC connection which starts at a KDM login \ +# prompt. This VNC connection has a resolution of 1600x1200, 16bit depth. +service vnc3 +{ + type = UNLISTED + port = 5903 + socket_type = stream + protocol = tcp + wait = no + user = nobody + server = /usr/bin/Xvnc + server_args = -noreset -inetd -once -query localhost -geometry 1600x1200 -depth 16 -securitytypes none + disable = yes +} +# default: off +# description: This serves out the vncviewer Java applet for the VNC \ +# server running on port 5901, (vnc port 1). +service vnchttpd1 +{ + type = UNLISTED + port = 5801 + socket_type = stream + protocol = tcp + wait = no + user = nobody + server = /usr/bin/vnc_inetd_httpd + server_args = 1024 768 5901 + disable = yes +} +# default: off +# description: This serves out the vncviewer Java applet for the VNC \ +# server running on port 5902, (vnc port 2). +service vnchttpd2 +{ + type = UNLISTED + port = 5802 + socket_type = stream + protocol = tcp + wait = no + user = nobody + server = /usr/bin/vnc_inetd_httpd + server_args = 1280 1024 5902 + disable = yes +} +# default: off +# description: This serves out the vncviewer Java applet for the VNC \ +# server running on port 5902, (vnc port 3). +service vnchttpd3 +{ + type = UNLISTED + port = 5803 + socket_type = stream + protocol = tcp + wait = no + user = nobody + server = /usr/bin/vnc_inetd_httpd + server_args = 1600 1200 5903 + disable = yes +} diff --git a/vnc_inetd_httpd b/vnc_inetd_httpd new file mode 100644 index 0000000..390b07f --- /dev/null +++ b/vnc_inetd_httpd @@ -0,0 +1,60 @@ +#!/bin/bash +read request url httptype || exit 0 +url="${url/ /}" +httptype="${httptype/ /}" + +width=$1 +height=$2 +port=$3 + +if [ "x$httptype" != "x" ]; then + line="x" + while [ -n "$line" ]; do + read line || exit 0 + line="${line/ /}" + done +fi +case "$url" in +/) + # We need the size of the display for the current applet. + # The VNC menubar is 20 pixels high ... + height=$((height+20)) + ctype="text/html" + content=" +Remote Desktop + + + + +" + ;; +*.jar|*.class) + # Use basename to make sure we have just a filename, not ../../... + url=${url/.*\/} + ctype="application/octet-stream" + cfile="/usr/share/vnc/classes/$url" + content="FILE" + ;; +esac + +if [ "x$httptype" != "x" ]; then + echo "HTTP/1.0 200 OK" + echo "Content-Type: $ctype" + if [ "$content" == "FILE" ]; then + clen=`wc -c "$cfile"` + else + clen=`echo "$content"|wc -c` + fi + echo "Content-Length: $clen" + echo "Connection: close" + echo +fi + +if [ "$request" == "GET" ]; then + if [ "$content" == "FILE" ]; then + cat "$cfile" + else + echo "$content" + fi +fi +exit 0 diff --git a/xorg-server-1.13.0.tar.bz2 b/xorg-server-1.13.0.tar.bz2 new file mode 100644 index 0000000..1a9fc49 --- /dev/null +++ b/xorg-server-1.13.0.tar.bz2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a751cae62dad1f8032613bef96a758c2eceacc0425533e8ee446fc53207174c4 +size 3713571 diff --git a/xorg-server-xdmcp.patch b/xorg-server-xdmcp.patch deleted file mode 100644 index 7b3dc58..0000000 --- a/xorg-server-xdmcp.patch +++ /dev/null @@ -1,28 +0,0 @@ ---- unix/xserver/os/access.c 2012-02-24 15:32:16.683508316 +0100 -+++ unix/xserver/os/access.c 2012-02-24 15:32:16.899508318 +0100 -@@ -802,7 +802,9 @@ - - /* - * ignore 'localhost' entries as they're not useful -- * on the other end of the wire -+ * on the other end of the wire and because on hosts -+ * with shared home dirs they'll result in conflic -+ * entries in ~/.Xauthority - */ - if (ifr->ifa_flags & IFF_LOOPBACK) - continue; -@@ -825,6 +827,14 @@ - else if (family == FamilyInternet6 && - IN6_IS_ADDR_LOOPBACK((struct in6_addr *)addr)) - continue; -+ -+ /* Ignore IPv6 link local addresses (fe80::/10), because -+ * they need a scope identifier, which we have no way -+ * of telling to the other end. -+ */ -+ if (family == FamilyInternet6 && -+ IN6_IS_ADDR_LINKLOCAL((struct in6_addr *)addr)) -+ continue; - #endif - XdmcpRegisterConnection(family, (char *)addr, len); - #if defined(IPv6) && defined(AF_INET6)