Package: x2goclient; Maintainer for x2goclient is X2Go Developers <x2go-dev@lists.x2go.org>; Source for x2goclient is src:x2goclient.
Reported by: Mike Gabriel <mike.gabriel@das-netzwerkteam.de>
Date: Thu, 26 Mar 2015 13:05:02 UTC
Severity: minor
Tags: pending
Found in version 4.0.4.0
Fixed in version 4.0.4.0
Done: X2Go Release Manager <git-admin@x2go.org>
Bug is archived. No further changes may be made.
Message #39 received at control@bugs.x2go.org (full text, mbox, reply):
Received: (at control) by bugs.x2go.org; 27 May 2015 06:49:40 +0000 From x2go@ymir.das-netzwerkteam.de Wed May 27 08:49:30 2015 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on ymir.das-netzwerkteam.de X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,NO_RELAYS, URIBL_BLOCKED autolearn=ham version=3.3.2 Received: by ymir.das-netzwerkteam.de (Postfix, from userid 1005) id 0346A5DA92; Wed, 27 May 2015 08:48:19 +0200 (CEST) From: X2Go Release Manager <git-admin@x2go.org> To: 830-submitter@bugs.x2go.org Cc: control@bugs.x2go.org, 830@bugs.x2go.org Subject: X2Go issue (in src:x2goclient) has been marked as closed Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit Message-Id: <20150527064820.0346A5DA92@ymir.das-netzwerkteam.de> Date: Wed, 27 May 2015 08:48:19 +0200 (CEST)
close #830 thanks Hello, we are very hopeful that X2Go issue #830 reported by you has been resolved in the new release (4.0.4.0) of the X2Go source project »src:x2goclient«. You can view the complete changelog entry of src:x2goclient (4.0.4.0) below, and you can use the following link to view all the code changes between this and the last release of src:x2goclient. http://code.x2go.org/gitweb?p=x2goclient.git;a=commitdiff;h=827bc20093cb929729c0c996860c28bb9fe7b6a0;hp=9f92b4c68ee4cc120a13063187ef009b6aa33245 If you feel that the issue has not been resolved satisfyingly, feel free to reopen this bug report or submit a follow-up report with further observations described based on the new released version of src:x2goclient. Thanks a lot for contributing to X2Go!!! light+love X2Go Git Admin (on behalf of the sender of this mail) --- X2Go Component: src:x2goclient Version: 4.0.4.0-0x2go1 Status: RELEASE Date: Tue, 26 May 2015 21:09:14 +0200 Fixes: 389 584 625 792 793 794 797 798 804 811 827 828 830 845 851 868 869 871 Changes: x2goclient (4.0.4.0-0x2go1) RELEASED; urgency=low . [ Mike DePaulo ] * New upstream release (4.0.4.0): - Windows: Do not delete saved PuTTY sessions when Kerberos 5 (GSSAPI) authentication is enabled (Fixes: #625/#789) - Windows: Fix "Connection failed" "pscp" error with folder sharing when Kerberos 5 (GSSAPI) auth is used, and the server-side home dir is at a path other than /home/$USER (Fixes: #868) - Windows: Fix audio (PulseAudio) when Kerberos 5 (GSSAPI) authentication is used (Fixes: #869) - Windows: Include debug build in the regular installer. It is an optional component during the install. It is not installed by default. - Windows: Include Pageant and PuTTYgen in the installer. They are optional components during the install. They are installed by default. - Windows: Add descriptions for the "components" in the installer (English language only at this time) - Windows: You can now view the version and some other info by: right-click on the installer -> Properties -> Details (English language only at this time) - Windows: Upgrade bundled PulseAudio from 5.0-rev18 to 6.0-11.1 (No known impacts to X2Go, except for the fact that many needed patches are now included in upstream PulseAudio.) - Windows: Upgrade bundled VcXsrv from 1.15.2.2-xp+vc2013+x2go1 to 1.17.0.0-1 (X2Go/Arctica Build) Note that X2Go Client for Windows 4.0.3.2-20150508 has an update to 1.15.2.6 (X2Go/Arctica), which fixes all the CVEs. The differences relevant to X2Go are: + Numerous X.org components were upgraded to new major/minor versions. + CVE-2015-0255 was fixed in VcXsrv itself + CVE-2015-3418 was fixed in VcXsrv itself + Font files no longer differ in each build due to timestamp differences + VcXsrv's bundled version of openssl was upgraded from 1.0.1k to 1.0.2a (fixes the multiple CVEs announced on 2015-03-19) + VcXsrv's bundled version of libXfont was upgraded from 1.4.8 to 1.5.1 (Fixes CVE-2015-1802 through CVE-2015-1804) + VcXsrv's bundled version of freetype was updated from 2.5.3 to 2.5.5 (fixes CVE-2014-9656 through CVE-2014-9675) - Windows: Update bundled Win32 OpenSSL from 1.0.1L to 1.0.1m, which fixes the multiple CVEs announced on 2015-03-19. Note that X2Go Client for Windows 4.0.3.2-20150329 has this update also. - Windows: Update bundled PuTTY from 0.63 to 0.64. In addition to other changes, CVE-2015-2157 has been fixed. - Windows: Upgrade libssh from 0.6.4 to 0.7.0 (while maintaining Pageant support). The differences relevant to X2Go are: + CVE-2015-3146 was fixed + Added support for ed25519 keys + Added SHA2 algorithms for HMAC Note that X2Go Client for Windows 4.0.3.2-20150508 has the update to 0.6.5, which fixes the CVE also. - Windows: Update bundled nxproxy (nx-libs-lite) from 3.5.0.27 to 3.5.0.31. (bugfix & feature update) - Windows: Update/Upgrade bundled Cygwin components to latest versions as of 2015-04-25 (except for the Cygwin DLL, which was upgraded but not to the latest version). Note that all the security fixes were included in updates to X2Go Client for Windows 4.0.3.2 + openssl 1.0.1k-1 -> 1.0.2a-1 (upgrade. includes security fixes for the multiple CVEs announced on 2015-03-19.) + libjpeg-turbo 1.8.1-1 -> 1.8.1-3 (security update for CVE-2014-9092) + libpng 1.5.21-2 -> libpng16 1.6.17-1 (upgrade, may improve X2Go performance when PNG compression is selected. Also includes the fix for CVE-2013-6954) + gcc 4.8.3-3 -> 4.9.2-3 (upgrade, may improve X2Go performance a little bit) + openssh 6.6p1-3-x2go1 -> 6.8p1-1-x2go1 (upgrade, probably not relevant to X2Go) + cygwin (DLL) 1.7.32-1 -> 1.7.33-1 (upgrade, probably not relevant to X2Go) + dash 0.5.8-2 -> 0.5.8-3 (feature update, not relevant to X2Go) + ncurses 5.9-20140524-1 -> 5.9-20150404-1 (update, probably not relevant to X2Go) + zlib 1.2.8-1 -> 1.2.8-3 (update, undocumented by Cygwin project) - Windows: Copy the exact version of each cygwin DLL from the cygwin binary tarballs rather than copying the "rebased" version from an X2Go developer's cygwin installation. What effect this will have on users is TBD. However, it does mean that we are distributing the exact DLLs that the Cygwin project provides, which is desirable for security. . [ Mihai Moldovan ] * New upstream version (4.0.4.0): - Move *.cpp and *.h files to src/ and *.ts files to src/i18n/. - Reference src/ in Doxyfile. - Reference src/ and src/i18n/ in x2goclient.pro. - Move *.ui files to src/ui/ and reference in x2goclient.pro. - Translate and simplify header in x2goclient.pro. - Add x2goclientconfig.pri only containing a comment to override specific entries in x2goclient.pro in x2goclientconfig.pri. - Move resource files to src/res/ and reference in x2goclient.pro. - Reference changes in shipped Makefile. - Rename SRC_DIR to TOP_DIR in shipped Makefile. - Rename qtbrowserplugin-<ver>-opensource to x2gobrowserplugin-<ver> and reference in x2goclient.pro. - Move x2goplugin.rc to x2gobrowserplugin-*/src/res/ and reference in x2goclient.pro. - Remove executability from x2goclient.pro. - Fix typos and update URL's in INSTALL file. - Fix typos and grammar in HOWTO.GPGCARD. - Add "X2Go Project" copyright to LICENSE file. - Replace backticks with $() and change spaces to tabs in Makefile.man2html. - Reformat README.OpenSSL-Exception. - Grammar fix in README.i18n. - Update .gitignore with more temporary files. - Make x2goclient.pro consistent: replace tabs with spaces, put quotes around messages, remove or add whitespace where applicable. - Move *.rc and *.rcc files back to top directory for now. Resources must be in the resource file's base directory or a sub-directory. - Move icons/ to img/icons/ and update references in + resources.rcc + COPYRIGHT.x2go-logos + Makefile + debian/x2goclient.install + macbuild.sh + nsis/x2goclient.nsi + src/onmainwindow.cpp + src/appdialog.cpp + src/folderbutton.cpp + src/folderexplorer.cpp + src/sessionbutton.cpp + src/sessionexplorer.cpp + src/sessionmanagedialog.cpp + src/sessionwidget.cpp + src/ui/helpdialog.ui + src/xsettingswidget.cpp - Move png/ to img/png/ and update references in resources.rcc and src/onmainwindow.cpp. - Move svg/ to img/svg/ and update references in resources.rcc, src/folderbutton.cpp, src/onmainwindow.cpp and src/sessionbutton.cpp. - Move *.ts files back to the top directory (they are resources.) - Move *.ts and *.qm files to i18n/ and update references in resources.rcc, x2goclient.pro and debian/rules. - Fix formatting errors in nsis/gpl.txt. - Fix whitespace errors in nsis/x2goclient.nsi. - Don't change the icons path in nsis/x2goclient.nsi. - Make nsis files non-executable. - Move x2go-logos/ to img/x2go-logos and update references in COPYRIGHT.x2go-logos. - Fix whitespace errors in x2gobrowserplugin-2.4_1/src/res/x2goplugin.rc. - Move i18n/ to res/i18n/ and update references in debian/rules and x2goclient.pro. - Remove executability bit from src/sshmasterconnection.cpp and src/sshprocess.cpp. - Move img/ to res/img/ and update references in + COPYRIGHT.x2go-logos + Makefile + debian/x2goclient.install + macbuild.sh + x2goclient.pro + x2goclient.rc - Move + git.rcc + changelog.rcc + x2goclient.rc + resources.rcc to res/ and update references in x2goclient.pro and src/ui/helpdialog.ui. - Reference new src directory as include dir in x2goclient.pro. - Move txt/ to res/text/ and update references in + x2goclient.pro + Makefile + debian/rules + x2goclient.spec - Whitespace fix in Info.plist. - Use more quoting and curly braces for referencing variables in macbuild.sh. - Define TOP_DIR variable in macbuild.sh -- set to $PWD. - Define the new variables $SDK and $MACOSX_DEPLOYMENT_TARGET in macbuild.sh which can also be (pre-)set through the environment. Default to the 10.7 SDK and deployment target. Use the variables when calling qmake. - Specify -spec macx-g++ when using qmake in macbuild.sh. - Directly reference project file for qmake in macbuild.sh. - Use out-of-source build and do not overwrite the default shipped Makefile in macbuild.sh. - Also also specify the top dir when defining the path to the generated appbundle and dmg file in macbuild.sh. - Move Info.plist to res/ and update reference in x2goclient.pro. - Fix references of resources in macbuild.sh to access files from TOP_DIR. - Work around a bug in qmake generating incorrect make rules for embedding the OS X app bundle Info.plist file. - Work around another bug in qmake and copy icon "manually". - Define wrap_legacy_resources() function and use it to wrap legacy resource locations stored in old session config files. - Add some debugging output to sessionbuttons/userbutton to see what file path is being used as a pixmap (user photo/session icon.) - Add myself to copyright section in the x2goutils headers. - Change four spaces per indentation level to two spaces in x2goutils.cpp. - Add fixup_resources() to x2goutils to fix "broken" resource URI's. - Rename fixup_resources() and wrap_legacy_resources() to fixup_resource_URIs() and wrap_legacy_resource_URIs(). Update references. - Move res/Info.plist and macdmg.DS_Store to res/osxbundle/ and update references in x2goclient.pro and macbuild.sh. - Add debug mode selector via DEBUG env variable to macbuild.sh. - Enable more debugging if needed: change -g flag to -g3 -ggdb3 -gdwarf-4. - Select stdlib on OS X based on the passed or default SDK value. - Fix TOP_DIR handling in macbuild.sh. - Switch to BASH interpreter for macbuild.sh. - Also accept "FALSE" and "false" as binary values in macbuild.sh. - Make bundling optional (but enabled by default) via the new BUNDLE environment variable in macbuild.sh. - Enable -O2 in debug mode. Otherwise, debug mode would test different execution paths than release mode. - Add new UNUSED() macro to x2goutils.h and silence compiler warnings. - Fix some QMessageBox usages. There are many more places that need fixing... - Remove config_mac.sh. macbuild.sh handles this now. - Use the correct client build dir in macbuild.sh: client_build. - Only use --stdlib compiler flag on 10.7+. Unsupported on 10.6 and below. - Use sh default assignment instead of default value in macbuild.sh. Removes the need to redundantly specify the variable name. - App bundle and dmg file will be automatically removed when removing the client build directory. Remove redundancy from macbuild.sh. - Remove 'function' keyword in macbuild.sh, as it's causing undefined behavior according to SUS. - Define and implement new function 'make_boolean()' in macbuild.sh. Takes a pseudo-boolean value and outputs either 0 or 1. Use this function. - Move functions to the start of the macbuild.sh script. - New env var/parameter UNIVERSAL in macbuild.sh. Switches the build architecture to either exclusively x86_64 (UNIVERSAL=0) or both x86_64 and x86 (UNIVERSAL=1). - Add usage message to macbuild.sh obtainable via -h or --help. - x2goclient.pro.maemo: cleanup. + Reorder sections so that they match x2goclient.pro. + Adapt to new directory structure. + Various whitespace fixes. - Move OS X-specific stuff from general section to macx section in x2goclient.pro. - Move ICON definition up before it's actually used in the macx section in x2goclient.pro. - Windows: move building into client_build subdirectory. Also needs the changes in buildscripts.git. - Windows: convert and delete the other config or build scripts. Delete obsolete ones. - Windows: correctly reference windows icon. - x2goclient.spec: fix builds on Fedora and related due to failing removal of browserplugin directory. That's non-critical. - onmainwindow.cpp: actually call slotTunnelOk(int), do not generate a run time error by calling the non-existent function slotTunnelOk(). Fixes: #804. - onmainwindow.cpp: clarify message regarding missing SSH daemon host keys. Fixes: #793. - non_modal_messagebox.{cpp,h}: Add new Non_Modal_MessageBox class for non-modal message boxes. - onmainwindow.cpp: use Non_Modal_MessageBox::critical function to display errors relating to missing sshd host keys. Fixes: #794. - onmainwindow.cpp: also make the message about a non-running sshd non-modal. - {x2goclient.pro,res/osxbundle/{Info.plist,postbuild.sh}}: + Add new postbuild script to set the correct version in the processed Info.plist output file. + Use this script in x2goclient.pro as QMAKE_POST_LINK command. + Move Icon copying into that script. + Define version in x2goclient.pro. - onmainwindow.cpp: consolidate Windows and non-Windows sshd startup error message. - onmainwindow.cpp: typo fix (authoized_keys.) - onmainwindow.cpp: stop exporting directories (Printing, File Sharing) on sshd error. - onmainwindow.cpp: fix session icon not being displayed as tray icon (missed legacy resource URI wrapper call.) - configdialog.cpp: update XQuartz outdated version info message and links. Add MacPorts reference. - configdialog.cpp: reformat code, add MacPorts and XQuartz references, URL's and installation instructions, don't show outdated version warning when no XQuartz server is installed. Fixes: #792. - x2goutils.{h,cpp}: use QString references. - x2goutils.{h,cpp}: add new helper function show_RichText_WarningMsgBox. - configdialog.cpp: use new helper function show_RichText_WarningMsgBox to show proper errors. Format as HTML. Use hyperlinks. Rephrase XQuartz warning messages. - configdialog.cpp: return empty strings as paths to the XQuartz application if no valid one could be found in order to show the proper error message. - configdialog.cpp: rephrase another error message, use the new helper and reformat code. - onmainwindow.{cpp,h}: make slotTunnelOk parameter optional and use the non-parameter call for the QSingleShotTimer::timeout() signal. - x2goutils.{h,cpp}: split up show_RichText_WarningMsgBox() into the aforementioned function and a new convert_to_rich_text() helper function. - non_modal_messagebox.{h,cpp}: add new Non_Modal_MessageBox::critical() overloaded functions to be able to use informative text and a (forceful, if requested) conversion to rich text. - onmainwindow.cpp: prettify non-running sshd error message. - onmainwindow.cpp: prettify non-available host key error message. - onmainwindow.cpp: also use usermode sshd on OS X, if no global daemon is running. - onmainwindow.cpp: on OS X, specify sshd's PID file location in its server config. - onmainwindow.cpp: wait 3 seconds before checking sshd startup state to allow it to come up. - onmainwindow.cpp: adapt SSH host key warning message to new usermode sshd possibilities. - configdialog.cpp: make XQuartz detection algorithm QStringList-based and add MacPorts location. - onmainwindow.cpp: do not define Ctrl+Q two times. Made it unusable on Linux and Windows. (Fixes: #830). - onmainwindow:cpp: correctly pass escaped single quote when writing remote xinerama config file. Post-fixup for #797. - {onmainwindow.cpp,README.i18n}: fix localization -- resource strings were not correctly updated. Fixes: #828. - onmainwindow.cpp: quote commands for generating pulse-client.conf correctly, add more quotes and use absolute file path for pulse cookie. - version.h: add include guard. - help.{cpp,h}: add skeleton for new help system. - help.{cpp,h}: add sanitizing helpers. - help.cpp: populate pretty_print: fetch max length of params. - help.cpp: get terminal window sizes on UNIX-based and Windows operating systems. - help.cpp: complete pretty printer function. - help.cpp: "copy" old command line parameters. - help.cpp: document broker options. Fixes: #851. - help.cpp: actually output the help message. - help.{cpp,h}: also pass the help message on (for display in graphical mode.) - x2goclient.pro{,.maemo}: add new help.{cpp,h} files. - onmainwindow.cpp: replace old help system with new one. - {{onmainwindow,help}.cpp},help.h}: fix misc. build errors. - help.h: fix run time error by actually giving QTextStream a "device" to write to. - help.cpp: clear current string if completely written onto one line. - help.cpp: enable debugging for pretty_print(). --debug must be supplied before --help for this to work. - help.cpp: fix splitting algorithm to step over a space character, but include hyphens correctly into the current line. - help.cpp: don't let qCritical() add even more spaces or quotes around the help message. - help.cpp: add support for newlines within descriptions. - help.cpp: use new newline feature for some options. - help.cpp: trying to split at hyphens was a bad idea. Remove that part. - help.cpp: fix a compile warning (by including winsock2.h) and error (caused by a typo) on Windows. - help.cpp: hardcode indentation value to 2 (for the first spaces) + maximum length of parameters + 4 (for the trailing 4 spaces). Calculations via terminal_cols and remaining do not work, if terminal_cols is unknown. - x2goutils.{cpp,h}: implement new git_changelog_extract_commit_sha helper, extracting the most recent commit shasum from a git changelog string. - help.cpp: use new git_changelog_extract_commit_sha() helper while building the help prelude. - helpdialog.cpp: change to monospaced font. - helpdialog.cpp: use QT_VERSION macro to select either a monospaced or typewriter font (Qt < 4.7.0 only supports TypeWriter.) - x2goutils.{cpp,h}: add new font_is_monospaced() helper. - helpdialog.cpp: try harder to set a monospaced font. - helpdialog.cpp: lower font size to have more space for text. - ui/helpdialog.ui: almost double the window size. - help.cpp: typo fix for --git-info. - help.{cpp,h}: provide string splitting logic as separate split_long_line() function. Use this in pretty_print(). - help.cpp: simplify pretty_print() and make it also split lines for non-terminal output or when the terminal width is unknown. - help.{cpp,h}: add a boolean terminal_output parameter to the pretty_print() function family. Controls terminal width auto-detection and automatic printing to stderr. - onmainwindow.cpp: don't let a potential terminal affect the help string shown in the GUI. - help.h: lower default splitting length to 100 characters. - onmainwindow.cpp: fix up pulse config file generation and PULSE_CLIENTCONFIG setting once more. - {macbuild,res/osxbundle/postbuild}.sh: add support for git information if not building from a tag. Also includes build date. - {{configdialog,onmainwindow}.cpp,x2goutils.{cpp,h}}: new helper functions show_XQuartz_not_found_error(), show_XQuartz_start_error() and show_XQuartz_generic_error(). The first two are calling the latter one. Replace previous messages in configdialog.cpp and onmainwindow.cpp with the helpers, because they are supposed to pop up a dialog showing almost the same message. - x2goutils.cpp: fix compile error. tr () is a member of QObject and must be explicitly marked as such in a free function. - {configdialog.{cpp,h},onmainwindow.cpp}: miscellaneous typo fixes - no functional changes. - onmainwindow.cpp: whitespace changes to installTranslator() only. - onmainwindow.cpp: correctly let Qt fetch the UI display language for Qt 4.8.0 and higher. The old "compat" behavior is retained for older versions of Qt, which do not have the semantics of a UI display language. Fixes: #845. - config_win.bat: enable release by default, fetch command line parameter and compare against debug. Enable debug and console features in that case. - onmainwindow.{cpp,h}: follow-up to last translation fix. Actually handle English locales correctly and don't duplicate code too much. - onmainwindow.{cpp,h}: make new get_translator() function static. Correct typo in implementation. - onmainwindow.h: include used types/headers. - onmainwindow.cpp: correctly call QLocale::uiLanguages (). - onmainwindow.cpp: copy strings before manipulating them. - onmainwindow.h: make get_translator() const. Does not change any state. - onmainwindow.cpp: fix compile error triggered by a missing parenthesis/typo. - onmainwindow.cpp: workaround https://bugreports.qt.io/browse/QTBUG-25973. - onmainwindow.h: revert const-qualifier for get_translator(). It's static and can't have any cv-qualifier. - copy-deps-win32.bat: actually let xcopy error correctly. - general: improve debug output and error messages. Affects: + LDAPSession.cpp + configdialog.cpp + contest.cpp + cupsprintersettingsdialog.cpp + exportdialog.cpp + folderexplorer.cpp + httpbrokerclient.cpp + onmainwindow.cpp + onmainwindow.h + printdialog.cpp + printprocess.cpp + printwidget.cpp + sessionbutton.cpp + sessionexplorer.cpp + sessionmanagedialog.cpp + sessionwidget.cpp + settingswidget.cpp + sharewidget.cpp + sshmasterconnection.cpp + sshprocess.cpp + wapi.cpp - sshmasterconnection.cpp: fix typo in last commit leading to a compile failure, correct content, remove superfluous newlines. - sessionexplorer.cpp: use a better shared logic for generating an arguments list for calling x2goclient.exe from a desktop shortcut. Respect the tray icon option also on Windows. Fixes: #871. . [ Fernando Pedemonte ] * New upstream release (4.0.4.0): - onmainwindow.cpp: fix bad quoting when writing remote xinerama config file. Fixes: #797. . [ René Genz ] * New upstream release (4.0.4.0): - {LICENSE,debian/copyright}: fix typo in URL of obviously-nice.de. Fixes: #811. . [ Mike Gabriel ] * New upstream release (4.0.4.0): - onmainwindow.cpp: fix desktop sharing via session broker. Fixes: #584. . [ Jason Alavaliant ] * New upstream release (4.0.4.0): - onmainwindow.cpp: handle %i and %c format flags in desktop files correctly: remove the %i flag and replace %c with the application name. Fixes: #827. . [ Nicolas Husson ] * New upstream release (4.0.4.0): - src/{onmainwindow,sshmasterconnection}.cpp: enable use of SSH proxy configuration with x2goplugin. Fixes: #798. + v2: refactor patch, fix whitespace issues. (Mihai Moldovan) . [ Stefan Baur ] * New upstream release (4.0.4.0): - general: fix spelling and English language syntax issues. Fixes: #389. + v2: apply more fixes in the original changes context. (Mihai Moldovan)
Send a report that this bug log contains spam.
Debbugs is free software and licensed under the terms of the GNU Public License version 2. The current version can be obtained from https://bugs.debian.org/debbugs-source/.
Copyright © 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson, 2005-2017 Don Armstrong, and many other contributors.