blob: 1d3476330049b134dc69be1fd1782e65ee28b3f0 [file] [log] [blame]
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<link rel="stylesheet" href="/styles/main.css?s=1714581448">
<link rel="icon" type="image/svg+xml" href="/images/logos/guac-classic-logo.svg"/>
<link rel="icon" type="image/png" href="/images/logos/guac-classic-logo-64.png"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no, target-densitydpi=device-dpi"/>
<meta charset="UTF-8"/>
<title>Apache Guacamole™: 0.9.13-incubating</title>
</head>
<body class="">
<!-- Header -->
<div id="header">
<div class="readable-content">
<h1><a href="/">Apache Guacamole™</a></h1>
<ul id="navigation" class="menu">
<li>
<a href="/releases/"
class="releases"
>Release Archives</a>
</li>
<li class="dropdown">
<a class="dropdown-toggle "
href="#">Documentation</a>
<ul class="dropdown-menu">
<li>
<a href="/faq/"
>FAQ</a>
</li>
<li>
<a href="/api-documentation/"
>API / Development</a>
</li>
<li>
<a href="/doc/gug/"
>Guacamole Manual</a>
</li>
</ul>
</li>
<li class="dropdown">
<a class="dropdown-toggle "
href="#">Community</a>
<ul class="dropdown-menu">
<li>
<a href="/open-source/"
>Contributing to Guacamole</a>
</li>
<li>
<a href="/support/#mailing-lists"
>Mailing Lists</a>
</li>
<li>
<a href="https://issues.apache.org/jira/browse/GUACAMOLE/"
>Bug/Issue Tracker</a>
</li>
<li>
<a href="https://github.com/search?utf8=%E2%9C%93&q=repo%3Aapache%2Fguacamole-client+repo%3Aapache%2Fguacamole-server+repo%3Aapache%2Fguacamole-manual+repo%3Aapache%2Fguacamole-website&type=repositories&ref=searchresults"
>Source Code</a>
</li>
</ul>
</li>
<li>
<a href="/security/"
>Security Reports</a>
</li>
<li class="dropdown">
<a class="dropdown-toggle "
href="#">Support</a>
<ul class="dropdown-menu">
<li>
<a href="/support/#mailing-lists"
>Mailing Lists</a>
</li>
<li>
<a href="https://issues.apache.org/jira/browse/GUACAMOLE/"
>Bug/Issue Tracker</a>
</li>
<li>
<a href="/support/#commercial-support"
>Commercial Support</a>
</li>
</ul>
</li>
<li class="dropdown">
<a class="dropdown-toggle apache"
href="#">ASF</a>
<ul class="dropdown-menu">
<li>
<a href="http://www.apache.org/"
>ASF Homepage</a>
</li>
<li>
<a href="http://www.apache.org/licenses/"
>License</a>
</li>
<li>
<a href="http://www.apache.org/foundation/thanks.html"
>Thanks</a>
</li>
<li>
<a href="http://www.apache.org/foundation/sponsorship.html"
>Sponsorship</a>
</li>
<li>
<a href="http://www.apache.org/foundation/policies/conduct.html"
>Code of Conduct</a>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- Content -->
<div class="fullwidth-content">
<h1 class="title">
Apache Guacamole 0.9.13-incubating
<span class="release-type">
(Archived)
</span>
</h1>
<div class="readable-content">
<div class="note">
<p>Apache Guacamole 0.9.13-incubating is an archived release, and was
originally released on 2017-07-30. <strong>The
latest release of Apache Guacamole is <a href="/releases/1.5.5/">1.5.5</a>.</strong></p>
</div>
<div id="links">
<h2>Release documentation</h2>
<ul>
<li><a href="/doc/0.9.13-incubating/gug">Manual</a></li>
<li><a href="/doc/0.9.13-incubating/guacamole-common">guacamole-common</a></li>
<li><a href="/doc/0.9.13-incubating/guacamole-common-js">guacamole-common-js</a></li>
<li><a href="/doc/0.9.13-incubating/guacamole-ext">guacamole-ext</a></li>
<li><a href="/doc/0.9.13-incubating/libguac">libguac</a></li>
</ul>
</div>
<p>Apache Guacamole is split into two subprojects: "guacamole-client", the
HTML5 web application which serves the Guacamole client to users, and
"guacamole-server", the remote desktop proxy which the web application
communicates with. The source code for each of these may be downloaded
below.</p>
<p>You <strong>must</strong> <a href="https://www.apache.org/info/verification.html">
verify the integrity of any downloaded files</a> using the OpenPGP signatures
we provide with each release. The signatures should be verified against the
<a href="https://downloads.apache.org/guacamole/KEYS">KEYS</a>
file, which contains the OpenPGP keys of Apache Guacamole's Release Managers.
Checksums of each released file are also provided.</p>
<!-- Source archives -->
<div class="release-downloads">
<table>
<tr>
<th>Filename</th>
<th>Signatures / Hashes</th>
</tr>
<tr>
<td class="filename"><a href="https://archive.apache.org/dist/guacamole/0.9.13-incubating/source/guacamole-client-0.9.13-incubating.tar.gz">guacamole-client-0.9.13-incubating.tar.gz</a></td>
<td class="signatures">
<a href="https://archive.apache.org/dist/guacamole/0.9.13-incubating/source/guacamole-client-0.9.13-incubating.tar.gz.md5">MD5</a>
<a href="https://archive.apache.org/dist/guacamole/0.9.13-incubating/source/guacamole-client-0.9.13-incubating.tar.gz.sha">SHA</a>
<a href="https://archive.apache.org/dist/guacamole/0.9.13-incubating/source/guacamole-client-0.9.13-incubating.tar.gz.asc">PGP</a>
</td>
</tr>
<tr>
<td class="filename"><a href="https://archive.apache.org/dist/guacamole/0.9.13-incubating/source/guacamole-server-0.9.13-incubating.tar.gz">guacamole-server-0.9.13-incubating.tar.gz</a></td>
<td class="signatures">
<a href="https://archive.apache.org/dist/guacamole/0.9.13-incubating/source/guacamole-server-0.9.13-incubating.tar.gz.md5">MD5</a>
<a href="https://archive.apache.org/dist/guacamole/0.9.13-incubating/source/guacamole-server-0.9.13-incubating.tar.gz.sha">SHA</a>
<a href="https://archive.apache.org/dist/guacamole/0.9.13-incubating/source/guacamole-server-0.9.13-incubating.tar.gz.asc">PGP</a>
</td>
</tr>
</table>
</div>
<p>If you do not wish to build Apache Guacamole entirely from source, pre-built
versions of the web application (.war) and all extensions are provided here in
binary form for convenience. <strong>Please note that guacamole-server must
still be built and installed from source.</strong></p>
<!-- All binaries -->
<div class="release-downloads">
<table>
<tr>
<th>Filename</th>
<th>Signatures / Hashes</th>
</tr>
<tr>
<td class="filename"><a href="https://archive.apache.org/dist/guacamole/0.9.13-incubating/binary/guacamole-0.9.13-incubating.war">guacamole-0.9.13-incubating.war</a></td>
<td class="signatures">
<a href="https://archive.apache.org/dist/guacamole/0.9.13-incubating/binary/guacamole-0.9.13-incubating.war.md5">MD5</a>
<a href="https://archive.apache.org/dist/guacamole/0.9.13-incubating/binary/guacamole-0.9.13-incubating.war.sha">SHA</a>
<a href="https://archive.apache.org/dist/guacamole/0.9.13-incubating/binary/guacamole-0.9.13-incubating.war.asc">PGP</a>
</td>
</tr>
<tr>
<td class="filename"><a href="https://archive.apache.org/dist/guacamole/0.9.13-incubating/binary/guacamole-auth-cas-0.9.13-incubating.tar.gz">guacamole-auth-cas-0.9.13-incubating.tar.gz</a></td>
<td class="signatures">
<a href="https://archive.apache.org/dist/guacamole/0.9.13-incubating/binary/guacamole-auth-cas-0.9.13-incubating.tar.gz.md5">MD5</a>
<a href="https://archive.apache.org/dist/guacamole/0.9.13-incubating/binary/guacamole-auth-cas-0.9.13-incubating.tar.gz.sha">SHA</a>
<a href="https://archive.apache.org/dist/guacamole/0.9.13-incubating/binary/guacamole-auth-cas-0.9.13-incubating.tar.gz.asc">PGP</a>
</td>
</tr>
<tr>
<td class="filename"><a href="https://archive.apache.org/dist/guacamole/0.9.13-incubating/binary/guacamole-auth-duo-0.9.13-incubating.tar.gz">guacamole-auth-duo-0.9.13-incubating.tar.gz</a></td>
<td class="signatures">
<a href="https://archive.apache.org/dist/guacamole/0.9.13-incubating/binary/guacamole-auth-duo-0.9.13-incubating.tar.gz.md5">MD5</a>
<a href="https://archive.apache.org/dist/guacamole/0.9.13-incubating/binary/guacamole-auth-duo-0.9.13-incubating.tar.gz.sha">SHA</a>
<a href="https://archive.apache.org/dist/guacamole/0.9.13-incubating/binary/guacamole-auth-duo-0.9.13-incubating.tar.gz.asc">PGP</a>
</td>
</tr>
<tr>
<td class="filename"><a href="https://archive.apache.org/dist/guacamole/0.9.13-incubating/binary/guacamole-auth-jdbc-0.9.13-incubating.tar.gz">guacamole-auth-jdbc-0.9.13-incubating.tar.gz</a></td>
<td class="signatures">
<a href="https://archive.apache.org/dist/guacamole/0.9.13-incubating/binary/guacamole-auth-jdbc-0.9.13-incubating.tar.gz.md5">MD5</a>
<a href="https://archive.apache.org/dist/guacamole/0.9.13-incubating/binary/guacamole-auth-jdbc-0.9.13-incubating.tar.gz.sha">SHA</a>
<a href="https://archive.apache.org/dist/guacamole/0.9.13-incubating/binary/guacamole-auth-jdbc-0.9.13-incubating.tar.gz.asc">PGP</a>
</td>
</tr>
<tr>
<td class="filename"><a href="https://archive.apache.org/dist/guacamole/0.9.13-incubating/binary/guacamole-auth-header-0.9.13-incubating.tar.gz">guacamole-auth-header-0.9.13-incubating.tar.gz</a></td>
<td class="signatures">
<a href="https://archive.apache.org/dist/guacamole/0.9.13-incubating/binary/guacamole-auth-header-0.9.13-incubating.tar.gz.md5">MD5</a>
<a href="https://archive.apache.org/dist/guacamole/0.9.13-incubating/binary/guacamole-auth-header-0.9.13-incubating.tar.gz.sha">SHA</a>
<a href="https://archive.apache.org/dist/guacamole/0.9.13-incubating/binary/guacamole-auth-header-0.9.13-incubating.tar.gz.asc">PGP</a>
</td>
</tr>
<tr>
<td class="filename"><a href="https://archive.apache.org/dist/guacamole/0.9.13-incubating/binary/guacamole-auth-ldap-0.9.13-incubating.tar.gz">guacamole-auth-ldap-0.9.13-incubating.tar.gz</a></td>
<td class="signatures">
<a href="https://archive.apache.org/dist/guacamole/0.9.13-incubating/binary/guacamole-auth-ldap-0.9.13-incubating.tar.gz.md5">MD5</a>
<a href="https://archive.apache.org/dist/guacamole/0.9.13-incubating/binary/guacamole-auth-ldap-0.9.13-incubating.tar.gz.sha">SHA</a>
<a href="https://archive.apache.org/dist/guacamole/0.9.13-incubating/binary/guacamole-auth-ldap-0.9.13-incubating.tar.gz.asc">PGP</a>
</td>
</tr>
<tr>
<td class="filename"><a href="https://archive.apache.org/dist/guacamole/0.9.13-incubating/binary/guacamole-auth-noauth-0.9.13-incubating.tar.gz">guacamole-auth-noauth-0.9.13-incubating.tar.gz</a></td>
<td class="signatures">
<a href="https://archive.apache.org/dist/guacamole/0.9.13-incubating/binary/guacamole-auth-noauth-0.9.13-incubating.tar.gz.md5">MD5</a>
<a href="https://archive.apache.org/dist/guacamole/0.9.13-incubating/binary/guacamole-auth-noauth-0.9.13-incubating.tar.gz.sha">SHA</a>
<a href="https://archive.apache.org/dist/guacamole/0.9.13-incubating/binary/guacamole-auth-noauth-0.9.13-incubating.tar.gz.asc">PGP</a>
</td>
</tr>
</table>
</div>
<!-- Release notes -->
<div id="release-notes">
<h1>Release notes</h1>
<p>The 0.9.13-incubating release features new support for CAS single sign-on,
automatic failover to connections within the same connection group, and fixes
for issues in all supported protocols. The JavaScript API has also been
extended to provide for in-browser playback of screen recordings, and the
extension API now allows custom REST services to be defined.</p>
<p><strong>This release contains changes which break compatibility with past releases.</strong>
Please see the <a href="#deprecation--compatibility-notes">deprecation / compatibility
notes</a> section for more information.</p>
<h2 id="support-for-cas-single-sign-on">Support for CAS single sign-on</h2>
<p><a href="https://en.wikipedia.org/wiki/Central_Authentication_Service">Central Authentication
Service</a> (CAS),
is a single sign-on solution commonly used by universities to unify
authentication across various web applications which are otherwise independent.
The newly-implemented guacamole-auth-cas extension allows Guacamole to delegate
authentication to CAS, relying on CAS to determine the identity and validity
of each user.</p>
<p>Note that this new extension only deals with determining the identity of users
that have authenticated with CAS, and redirecting unauthenticated users to the
CAS system to authenticate. The details of the connections available to each
user must be provided via another extension, such as the <a href="/doc/0.9.13-incubating/gug/jdbc-auth.html">database
authentication</a>.</p>
<ul>
<li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-204">GUACAMOLE-204</a> - Support CAS Single Sign On</li>
</ul>
<h2 id="correction-to-duo-documentation">Correction to Duo documentation</h2>
<p>The documentation for Guacamole’s Duo extension previously stated that Duo’s
“Auth API” was required. This is incorrect; though the “Auth API” will work,
Guacamole actually uses the “Web SDK”. This is particularly important, as Duo
recently ceased offering the “Auth API” for free, whereas the “Web SDK” is
still available for free accounts.</p>
<ul>
<li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-219">GUACAMOLE-219</a> - Duo documentation should point to “Web SDK”, not “Auth API”</li>
</ul>
<h2 id="in-browser-playback-of-screen-recordings">In-browser playback of screen recordings</h2>
<p>Guacamole’s screen recordings are actually copies of the same exact data which
would be fed to the Guacamole client over the course of the connection, thus
the JavaScript API already had much of what was necessary to support in-browser
playback of recordings. The main things lacking were a means of reading a
Guacamole protocol stream from a static resource, and a means of seeking
backward or forward within that stream.</p>
<p>This missing API-level functionality is now provided through the new
<a href="/doc/0.9.13-incubating/guacamole-common-js/Guacamole.StaticHTTPTunnel.html"><code class="language-plaintext highlighter-rouge">Guacamole.StaticHTTPTunnel</code></a> and <a href="/doc/0.9.13-incubating/guacamole-common-js/Guacamole.SessionRecording.html"><code class="language-plaintext highlighter-rouge">Guacamole.SessionRecording</code></a> objects respectively,
and an example demonstrating this use, <a href="https://github.com/apache/guacamole-client/tree/de12b683d746129ddc8b34425ed6e40b618c91d6/doc/guacamole-playback-example">guacamole-playback-example</a>, is provided within the guacamole-client source.</p>
<ul>
<li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-250">GUACAMOLE-250</a> - Implement support for in-browser playback of screen recordings</li>
</ul>
<h2 id="noauth-now-deprecated">NoAuth now deprecated</h2>
<p>Over the years since its introduction, the NoAuth extension has grown to become
a consistent source of issues for both users and the Guacamole development
community, and simply using the extension has become de facto bad practice. As
such, <strong>the NoAuth extension is now deprecated</strong>.</p>
<p>To ease migration away from its use, the extension remains part of the
Guacamole source and a convenience binary of the extension is provided with
this release, but its continued use is not recommended and it will eventually
be removed. <strong>Integrations of Guacamole should instead use the extension API</strong>,
or the core Guacamole API for absolute low-level control.</p>
<ul>
<li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-256">GUACAMOLE-256</a> - Deprecate the NoAuth extension</li>
</ul>
<h2 id="sshtelnet-support-for-256-color-console-codes">SSH/telnet support for 256-color console codes</h2>
<p>Guacamole has historically supported only the subset of console codes
implemented by the Linux kernel’s built-in terminal emulator. As part of a
larger, ongoing effort to <a href="https://issues.apache.org/jira/browse/GUACAMOLE-277">achieve compatibility with
xterm</a>, support for
xterm’s 256-color console codes has been added, along with support for the
console code which changes the window title.</p>
<ul>
<li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-265">GUACAMOLE-265</a> - Support OSC 0 for changing SSH/telnet window title</li>
<li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-278">GUACAMOLE-278</a> - Add support for xterm’s 256-color control codes</li>
<li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-280">GUACAMOLE-280</a> - Add support for the “faint” SGR flag</li>
</ul>
<h2 id="automatic-failover-for-connections-in-groups">Automatic failover for connections in groups</h2>
<p>In past releases, the database authentication would handle connection attempts
to connection groups by selecting the least-used connection, but would
otherwise only make one connection attempt. If that connection attempt fails
due to an error within the remote desktop, the user must manually reconnect (or
wait 15 seconds for the automatic reconnect).</p>
<p>Connection groups provided via the database authentication will now
automatically and transparently switch to the next available connection in the
group for remote desktop errors that occur early in the connection. If
graphical updates are sent prior to the error, automatic failover will not
occur.</p>
<p>This functionality has also been added at the Java API level. Extensions and
applications leveraging the Guacamole API can use the
<a href="/doc/0.9.13-incubating/guacamole-common/org/apache/guacamole/protocol/FailoverGuacamoleSocket.html"><code class="language-plaintext highlighter-rouge">FailoverGuacamoleSocket</code></a> class to automatically detect
and handle upstream (remote desktop) errors during the connection process.</p>
<ul>
<li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-208">GUACAMOLE-208</a> - Expand status codes to represent common remote desktop states</li>
<li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-267">GUACAMOLE-267</a> - Support health checks for connections</li>
</ul>
<h2 id="fixes-for-all-supported-protocols">Fixes for all supported protocols</h2>
<p>Several bugs with each supported protocol have been addressed. Most
significantly, issues with audio stream stability for recent versions of
Windows, and transfer of large files over RDP, the behavior of the “Alt” key
for SSH and telnet, and VNC connection stability have all been fixed.</p>
<ul>
<li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-194">GUACAMOLE-194</a> - Double free() in guac_common_ssh_destroy_user()</li>
<li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-205">GUACAMOLE-205</a> - libguac_common_ssh build fails with OpenSSL 1.1</li>
<li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-206">GUACAMOLE-206</a> - Alt key combinations broken in SSH and telnet</li>
<li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-218">GUACAMOLE-218</a> - Audio stops playing on Windows Server 2016</li>
<li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-222">GUACAMOLE-222</a> - SFTP file handles not closed for downloads</li>
<li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-257">GUACAMOLE-257</a> - Segfault in on VNC/SSH file upload if SFTP is disabled</li>
<li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-262">GUACAMOLE-262</a> - Cannot connect to ESXi 6.5 VNC server</li>
<li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-268">GUACAMOLE-268</a> - RDPDR file size may be truncated to 32 bits</li>
<li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-282">GUACAMOLE-282</a> - Common surface transfer functions incorrect with respect to alpha channel</li>
<li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-306">GUACAMOLE-306</a> - VNC may segfault during the connection process</li>
</ul>
<h2 id="defining-rest-services-via-extensions">Defining REST services via extensions</h2>
<p>Extensions can now define arbitrary REST services by implementing the new
<code class="language-plaintext highlighter-rouge">getResource()</code> function at either the
<a href="/doc/0.9.13-incubating/guacamole-ext/org/apache/guacamole/net/auth/AuthenticationProvider.html"><code class="language-plaintext highlighter-rouge">AuthenticationProvider</code></a>
<a href="/doc/0.9.13-incubating/guacamole-ext/org/apache/guacamole/net/auth/UserContext.html"><code class="language-plaintext highlighter-rouge">UserContext</code></a>
levels, returning objects annotated with JAX-RS (JSR-311) annotations.</p>
<p>REST resources exposed at the <code class="language-plaintext highlighter-rouge">UserContext</code> level are inherently tied to the
user’s session and thus require authentication, while resources exposed at the
<code class="language-plaintext highlighter-rouge">AuthenticationProvider</code> level do not.</p>
<ul>
<li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-289">GUACAMOLE-289</a> - Add support for declaring REST services within extensions</li>
</ul>
<h2 id="user-profile-attributes">User profile attributes</h2>
<p>The database authentication now defines additional, arbitrary attributes for
users which, if specified, are rendered within Guacamole’s user menu. These
attributes are optional - if omitted, the user menu renders as in previous
releases.</p>
<p>The additional attributes are standardized at the API level on the
<a href="/doc/0.9.13-incubating/guacamole-ext/org/apache/guacamole/net/auth/User.Attribute.html"><code class="language-plaintext highlighter-rouge">User.Attribute</code></a>
object, and thus can be leveraged by any extension, producing the same effect.</p>
<ul>
<li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-292">GUACAMOLE-292</a> - Add support for user profiles</li>
</ul>
<h2 id="support-for-filtering-ldap-users">Support for filtering LDAP users</h2>
<p>Guacamole’s LDAP support now provides an additional <code class="language-plaintext highlighter-rouge">ldap-user-search-filter</code>
property which, if specified, reduces the users that can log into Guacamole or
are displayed to administrators within the user management interface (when
combining LDAP with a MySQL or PostgreSQL database).</p>
<p>Note that this filter only affects Guacamole logins if Guacamole has been
configured to search for users prior to binding (with the <code class="language-plaintext highlighter-rouge">ldap-search-bind-dn</code>
property). If a search DN is not being used, Guacamole derives each user’s DN
directly, and thus will not apply the search filter to login attempts.</p>
<ul>
<li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-101">GUACAMOLE-101</a> - Allow arbitrary filtering of LDAP users</li>
<li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-244">GUACAMOLE-244</a> - Allow configuration of LDAP alias dereferencing</li>
</ul>
<h2 id="overriding-guacd-on-a-per-connection-basis">Overriding guacd on a per-connection basis</h2>
<p>The connection to guacd is normally defined globally within
<code class="language-plaintext highlighter-rouge">guacamole.properties</code>, but this is insufficient for deployments involving
multiple distinct guacd instances or multiple implementations of the Guacamole
protocol.</p>
<p>For cases where different instances of guacd may be spread out across the
network of remote desktop servers, or where other applications/drivers may
implement their own internal version of guacd (such as the <a href="https://issues.apache.org/jira/browse/GUACAMOLE-168">work-in-progress
X.Org driver</a>), Guacamole
now supports defining/overriding the guacd hostname, port, and encryption
method on a per-connection basis.</p>
<ul>
<li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-189">GUACAMOLE-189</a> - Add support for per-connection guacd</li>
</ul>
<h2 id="miscellaneous-fixesimprovements">Miscellaneous fixes/improvements</h2>
<p>This latest release of Guacamole also addresses several minor JavaScript
issues, addresses potential disconnects due to system clocks which are not
monotonic (can run backwards), and fixes the Docker image sanity checks such
that database-specific environment variables need not be specified if a custom
<code class="language-plaintext highlighter-rouge">GUACAMOLE_HOME</code> is being used.</p>
<ul>
<li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-40">GUACAMOLE-40</a> - Support TS gateway connections to RDP</li>
<li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-223">GUACAMOLE-223</a> - Locking callbacks not set for guacd+SSL</li>
<li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-229">GUACAMOLE-229</a> - Intervals when polling xmlhttprequests are not always cleared</li>
<li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-239">GUACAMOLE-239</a> - Disconnects due to ‘backwards’ running time</li>
<li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-252">GUACAMOLE-252</a> - Display jumps to top in MS Edge when Guacamole menu is opened</li>
<li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-259">GUACAMOLE-259</a> - Log metrics for gauging user experience</li>
<li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-281">GUACAMOLE-281</a> - GUACAMOLE_HOME not taken into account during Docker image sanity checks</li>
<li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-294">GUACAMOLE-294</a> - Incorrectly positioned bracket in <code class="language-plaintext highlighter-rouge">guacTouchDrag.js</code>.</li>
<li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-295">GUACAMOLE-295</a> - In Parser.js, the <code class="language-plaintext highlighter-rouge">length</code> variable is incorrectly checked for equality against NaN.</li>
<li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-301">GUACAMOLE-301</a> - Login prompt not cleared when visiting unrestricted page</li>
</ul>
<h1 id="deprecation--compatibility-notes">Deprecation / Compatibility notes</h1>
<p>As of 0.9.13-incubating, the following changes have been made which affect
compatibility with past releases:</p>
<h2 id="database-schema-changes">Database schema changes</h2>
<p>The MySQL and PostgreSQL schemas have changed, adding columns to
<code class="language-plaintext highlighter-rouge">guacamole_connection</code> (for defining the connection to guacd service
implementing the Guacamole protocol) and to <code class="language-plaintext highlighter-rouge">guacamole_user</code> (for defining
optional and arbitrary profile information).</p>
<p>Users of the database authentication will need to run the
<code class="language-plaintext highlighter-rouge">upgrade-pre-0.9.13.sql</code> script specific to their chosen database.</p>
<h2 id="deprecation-of-the-noauth-extension">Deprecation of the NoAuth extension</h2>
<p>The NoAuth extension is now deprecated. The extension remains part of the
Guacamole source and a convenience binary of the extension is provided with
this release, but its continued use is not recommended and it will eventually
be removed entirely.</p>
<p><strong>Integrations of Guacamole should instead use the extension API</strong>, or the core
Guacamole API for absolute low-level control.</p>
<h2 id="extension-api-changes">Extension API changes</h2>
<p>Both the
<a href="/doc/0.9.13-incubating/guacamole-ext/org/apache/guacamole/net/auth/AuthenticationProvider.html"><code class="language-plaintext highlighter-rouge">AuthenticationProvider</code></a>
and
<a href="/doc/0.9.13-incubating/guacamole-ext/org/apache/guacamole/net/auth/UserContext.html"><code class="language-plaintext highlighter-rouge">UserContext</code></a>
interfaces now define a <code class="language-plaintext highlighter-rouge">getResource()</code> function. If implemented, the returned
object will be served as a REST resource and must be annotated with JAX-RS
(JSR-311) annotations. Because this new function is defined at the interface
level, implementations of these interfaces will now need to define this
function:</p>
<ul>
<li><a href="/doc/0.9.13-incubating/guacamole-ext/org/apache/guacamole/net/auth/AuthenticationProvider.html#getResource--"><code class="language-plaintext highlighter-rouge">AuthenticationProvider.getResource()</code></a></li>
<li><a href="/doc/0.9.13-incubating/guacamole-ext/org/apache/guacamole/net/auth/UserContext.html#getResource--"><code class="language-plaintext highlighter-rouge">UserContext.getResource()</code></a></li>
</ul>
<p>If your extension does not need to expose its own REST resources, the function
can simply return <code class="language-plaintext highlighter-rouge">null</code>, and no such resources will be exposed:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>@Override
public Object getResource() {
// No associated REST resource
return null;
}
</code></pre></div></div>
</div>
</div>
</div>
<!-- Footer -->
<div id="footer">
<div class="readable-content">
<!-- Copyrights -->
<p class="copyright">
Copyright &copy; 2024 <a href="http://www.apache.org/">The Apache
Software Foundation</a>, Licensed under the <a
href="http://www.apache.org/licenses/LICENSE-2.0">Apache License,
Version 2.0</a>.
</p>
<!-- Trademarks -->
<p class="trademarks">
Apache Guacamole, Guacamole, Apache, the Apache feather logo, and the
Apache Guacamole project logo are trademarks of The Apache Software
Foundation.
</p>
</div>
</div>
<!-- jQuery -->
<script src="/scripts/jquery.min.js" type="text/javascript"></script>
<!-- Dropdown toggle -->
<script src="/scripts/dropdown.js" type="text/javascript"></script>
</body>
</html>