| <!DOCTYPE html> |
| <html xmlns="http://www.w3.org/1999/xhtml"> |
| |
| <head> |
| <link rel="stylesheet" href="/styles/main.css?s=1712697967"> |
| <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™: 1.0.0</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 1.0.0 |
| <span class="release-type"> |
| |
| |
| (Archived) |
| |
| </span> |
| </h1> |
| |
| <div class="readable-content"> |
| |
| |
| |
| |
| |
| <div class="note"> |
| <p>Apache Guacamole 1.0.0 is an archived release, and was |
| originally released on 2019-01-08. <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/1.0.0/gug">Manual</a></li> |
| |
| <li><a href="/doc/1.0.0/guacamole-common">guacamole-common</a></li> |
| |
| <li><a href="/doc/1.0.0/guacamole-common-js">guacamole-common-js</a></li> |
| |
| <li><a href="/doc/1.0.0/guacamole-ext">guacamole-ext</a></li> |
| |
| <li><a href="/doc/1.0.0/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/1.0.0/source/guacamole-client-1.0.0.tar.gz">guacamole-client-1.0.0.tar.gz</a></td> |
| <td class="signatures"> |
| |
| |
| <a href="https://archive.apache.org/dist/guacamole/1.0.0/source/guacamole-client-1.0.0.tar.gz.asc">PGP</a> |
| |
| |
| <a href="https://archive.apache.org/dist/guacamole/1.0.0/source/guacamole-client-1.0.0.tar.gz.sha256">SHA-256</a> |
| |
| </td> |
| </tr> |
| |
| <tr> |
| |
| |
| <td class="filename"><a href="https://archive.apache.org/dist/guacamole/1.0.0/source/guacamole-server-1.0.0.tar.gz">guacamole-server-1.0.0.tar.gz</a></td> |
| <td class="signatures"> |
| |
| |
| <a href="https://archive.apache.org/dist/guacamole/1.0.0/source/guacamole-server-1.0.0.tar.gz.asc">PGP</a> |
| |
| |
| <a href="https://archive.apache.org/dist/guacamole/1.0.0/source/guacamole-server-1.0.0.tar.gz.sha256">SHA-256</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/1.0.0/binary/guacamole-1.0.0.war">guacamole-1.0.0.war</a></td> |
| <td class="signatures"> |
| |
| |
| <a href="https://archive.apache.org/dist/guacamole/1.0.0/binary/guacamole-1.0.0.war.asc">PGP</a> |
| |
| |
| <a href="https://archive.apache.org/dist/guacamole/1.0.0/binary/guacamole-1.0.0.war.sha256">SHA-256</a> |
| |
| </td> |
| </tr> |
| |
| <tr> |
| |
| |
| <td class="filename"><a href="https://archive.apache.org/dist/guacamole/1.0.0/binary/guacamole-auth-cas-1.0.0.tar.gz">guacamole-auth-cas-1.0.0.tar.gz</a></td> |
| <td class="signatures"> |
| |
| |
| <a href="https://archive.apache.org/dist/guacamole/1.0.0/binary/guacamole-auth-cas-1.0.0.tar.gz.asc">PGP</a> |
| |
| |
| <a href="https://archive.apache.org/dist/guacamole/1.0.0/binary/guacamole-auth-cas-1.0.0.tar.gz.sha256">SHA-256</a> |
| |
| </td> |
| </tr> |
| |
| <tr> |
| |
| |
| <td class="filename"><a href="https://archive.apache.org/dist/guacamole/1.0.0/binary/guacamole-auth-duo-1.0.0.tar.gz">guacamole-auth-duo-1.0.0.tar.gz</a></td> |
| <td class="signatures"> |
| |
| |
| <a href="https://archive.apache.org/dist/guacamole/1.0.0/binary/guacamole-auth-duo-1.0.0.tar.gz.asc">PGP</a> |
| |
| |
| <a href="https://archive.apache.org/dist/guacamole/1.0.0/binary/guacamole-auth-duo-1.0.0.tar.gz.sha256">SHA-256</a> |
| |
| </td> |
| </tr> |
| |
| <tr> |
| |
| |
| <td class="filename"><a href="https://archive.apache.org/dist/guacamole/1.0.0/binary/guacamole-auth-header-1.0.0.tar.gz">guacamole-auth-header-1.0.0.tar.gz</a></td> |
| <td class="signatures"> |
| |
| |
| <a href="https://archive.apache.org/dist/guacamole/1.0.0/binary/guacamole-auth-header-1.0.0.tar.gz.asc">PGP</a> |
| |
| |
| <a href="https://archive.apache.org/dist/guacamole/1.0.0/binary/guacamole-auth-header-1.0.0.tar.gz.sha256">SHA-256</a> |
| |
| </td> |
| </tr> |
| |
| <tr> |
| |
| |
| <td class="filename"><a href="https://archive.apache.org/dist/guacamole/1.0.0/binary/guacamole-auth-jdbc-1.0.0.tar.gz">guacamole-auth-jdbc-1.0.0.tar.gz</a></td> |
| <td class="signatures"> |
| |
| |
| <a href="https://archive.apache.org/dist/guacamole/1.0.0/binary/guacamole-auth-jdbc-1.0.0.tar.gz.asc">PGP</a> |
| |
| |
| <a href="https://archive.apache.org/dist/guacamole/1.0.0/binary/guacamole-auth-jdbc-1.0.0.tar.gz.sha256">SHA-256</a> |
| |
| </td> |
| </tr> |
| |
| <tr> |
| |
| |
| <td class="filename"><a href="https://archive.apache.org/dist/guacamole/1.0.0/binary/guacamole-auth-ldap-1.0.0.tar.gz">guacamole-auth-ldap-1.0.0.tar.gz</a></td> |
| <td class="signatures"> |
| |
| |
| <a href="https://archive.apache.org/dist/guacamole/1.0.0/binary/guacamole-auth-ldap-1.0.0.tar.gz.asc">PGP</a> |
| |
| |
| <a href="https://archive.apache.org/dist/guacamole/1.0.0/binary/guacamole-auth-ldap-1.0.0.tar.gz.sha256">SHA-256</a> |
| |
| </td> |
| </tr> |
| |
| <tr> |
| |
| |
| <td class="filename"><a href="https://archive.apache.org/dist/guacamole/1.0.0/binary/guacamole-auth-openid-1.0.0.tar.gz">guacamole-auth-openid-1.0.0.tar.gz</a></td> |
| <td class="signatures"> |
| |
| |
| <a href="https://archive.apache.org/dist/guacamole/1.0.0/binary/guacamole-auth-openid-1.0.0.tar.gz.asc">PGP</a> |
| |
| |
| <a href="https://archive.apache.org/dist/guacamole/1.0.0/binary/guacamole-auth-openid-1.0.0.tar.gz.sha256">SHA-256</a> |
| |
| </td> |
| </tr> |
| |
| <tr> |
| |
| |
| <td class="filename"><a href="https://archive.apache.org/dist/guacamole/1.0.0/binary/guacamole-auth-quickconnect-1.0.0.tar.gz">guacamole-auth-quickconnect-1.0.0.tar.gz</a></td> |
| <td class="signatures"> |
| |
| |
| <a href="https://archive.apache.org/dist/guacamole/1.0.0/binary/guacamole-auth-quickconnect-1.0.0.tar.gz.asc">PGP</a> |
| |
| |
| <a href="https://archive.apache.org/dist/guacamole/1.0.0/binary/guacamole-auth-quickconnect-1.0.0.tar.gz.sha256">SHA-256</a> |
| |
| </td> |
| </tr> |
| |
| <tr> |
| |
| |
| <td class="filename"><a href="https://archive.apache.org/dist/guacamole/1.0.0/binary/guacamole-auth-totp-1.0.0.tar.gz">guacamole-auth-totp-1.0.0.tar.gz</a></td> |
| <td class="signatures"> |
| |
| |
| <a href="https://archive.apache.org/dist/guacamole/1.0.0/binary/guacamole-auth-totp-1.0.0.tar.gz.asc">PGP</a> |
| |
| |
| <a href="https://archive.apache.org/dist/guacamole/1.0.0/binary/guacamole-auth-totp-1.0.0.tar.gz.sha256">SHA-256</a> |
| |
| </td> |
| </tr> |
| |
| </table> |
| |
| |
| </div> |
| |
| <!-- Release notes --> |
| <div id="release-notes"> |
| <h1>Release notes</h1> |
| <p>The 1.0.0 release features support for user groups, improved clipboard |
| integration leveraging the Asynchronous Clipboard API, as well as support for |
| TOTP (Google Authenticator), RADIUS, and dead keys.</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="new-features-and-improvements">New features and improvements</h2> |
| |
| <h3 id="support-for-user-groups">Support for user groups</h3> |
| |
| <p>Guacamole now supports <a href="/doc/1.0.0/gug/administration.html#user-group-management">granting permissions based on group |
| membership</a>. While |
| this has been supported to a degree for some time via LDAP and the <code class="language-plaintext highlighter-rouge">seeAlso</code> |
| attribute, groups can now be defined and used within a database, with LDAP and |
| a database combined, or within other extensions using Guacamole’s extension |
| API.</p> |
| |
| <ul> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-220">GUACAMOLE-220</a> - Implement user groups</li> |
| </ul> |
| |
| <h3 id="clipboard-integration-with-the-asynchronous-clipboard-api">Clipboard integration with the Asynchronous Clipboard API</h3> |
| |
| <p>For browsers which implement the <a href="https://www.w3.org/TR/clipboard-apis/#async-clipboard-api">Asynchronous Clipboard |
| API</a>, Guacamole will |
| now automatically synchronize the local and remote clipboards. Users will be |
| prompted to grant clipboard access upon opening Guacamole, and Guacamole will |
| synchronize the clipboard if access is granted.</p> |
| |
| <p>This API <a href="https://developers.google.com/web/updates/2018/03/clipboardapi">has been implemented in Google Chrome since version |
| 66</a>, and other |
| browsers will likely follow suit. The legacy synchronous clipboard API will |
| continue to be used as a fallback for browsers that support clipboard access |
| but lack support for the newer API (Internet Explorer).</p> |
| |
| <ul> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-559">GUACAMOLE-559</a> - Add support for the new Asynchronous Clipboard API</li> |
| </ul> |
| |
| <h3 id="multi-factor-authentication-with-google-authenticator--totp">Multi-factor authentication with Google Authenticator / TOTP</h3> |
| |
| <p>Guacamole now has support for TOTP as an additional authentication factor. |
| TOTP (<a href="https://en.wikipedia.org/wiki/Time-based_One-time_Password_algorithm">Time-based One-Time Password</a>) |
| is a <a href="https://tools.ietf.org/html/rfc6238">standardized algorithm</a> used for |
| multi-factor authentication. With this new support, Guacamole may be used with |
| any application or authentication device which supports the TOTP standard, |
| including the popular Google Authenticator.</p> |
| |
| <ul> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-96">GUACAMOLE-96</a> - Two factor authentication with Google Authenticator</li> |
| </ul> |
| |
| <h3 id="support-for-radius-authentication">Support for RADIUS authentication</h3> |
| |
| <p>RADIUS support has been added, allowing Guacamole to delegate authentication to |
| a RADIUS service like FreeRADIUS for validating credentials, enforcing multiple |
| authentication factors, etc.</p> |
| |
| <p>Because the RADIUS library used by this support is licensed under the LGPL, a |
| convenience binary for this extension is not provided. If you wish to use the |
| RADIUS support, you will need to <a href="/doc/1.0.0/gug/installing-guacamole.html">build guacamole-client from |
| source</a> and explicitly enable that |
| part of the build with <code class="language-plaintext highlighter-rouge">-P</code>:</p> |
| |
| <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>mvn package -Plgpl-extensions |
| </code></pre></div></div> |
| |
| <p>Instructions for building this support are <a href="/doc/1.0.0/gug/radius-auth.html">provided in the |
| manual</a>.</p> |
| |
| <ul> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-197">GUACAMOLE-197</a> - Implement Support for RADIUS Authentication</li> |
| </ul> |
| |
| <h3 id="support-for-creating-ad-hoc-connections">Support for creating ad-hoc connections</h3> |
| |
| <p>An extension is now provided which allows users to create arbitrary, temporary |
| connections through entering a URL. This ability can be quite convenient, as |
| users need not create new connections through the administrative interface in |
| order to quickly access a particular machine.</p> |
| |
| <p>Be sure you understand the <a href="/doc/1.0.0/gug/adhoc-connections.html">security implications of providing this level of |
| access</a>. A Guacamole connection |
| implicitly has network and filesystem access to the Guacamole server, thus |
| providing this ability is equivalent to granting your users those privileges.</p> |
| |
| <ul> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-38">GUACAMOLE-38</a> - On-Demand connection</li> |
| </ul> |
| |
| <h3 id="improved-keyboard-handling--support-for-dead-keys">Improved keyboard handling / Support for dead keys</h3> |
| |
| <p>Multiple improvements have been made to keyboard handling, including bug fixes |
| for Mac and iOS and support for dead keys.</p> |
| |
| <ul> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-161">GUACAMOLE-161</a> - Handle CapsLock events properly on Mac OS</li> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-232">GUACAMOLE-232</a> - Stuck keys iPad/Bluetooth keyboard (Return/Backspace/Space)</li> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-352">GUACAMOLE-352</a> - Add support for dead keys</li> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-447">GUACAMOLE-447</a> - Certain keys fail for external keyboards on iOS Safari</li> |
| </ul> |
| |
| <h3 id="automatic-connection-behavior">Automatic connection behavior</h3> |
| |
| <p>Guacamole will automatically connect upon login for users that have access to |
| only a single connection, skipping the home screen. This feature has been |
| tweaked slightly so that it applies only to non-administrative users. Users |
| with access to Guacamole’s administrative interface will now see the home |
| screen and will not be automatically connected.</p> |
| |
| <ul> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-508">GUACAMOLE-508</a> - Automatically connect only if user lacks access to settings</li> |
| </ul> |
| |
| <h3 id="support-for-renaming-rdp-drive-and-printer">Support for renaming RDP drive and printer</h3> |
| |
| <p>By default, the filesystem and printer made available within RDP connections |
| are named “Guacamole Filesystem” and “Guacamole Printer” respectively. Support |
| has been added to override these names with <a href="/doc/1.0.0/gug/configuring-guacamole.html#rdp-device-redirection">the <code class="language-plaintext highlighter-rouge">drive-name</code> and |
| <code class="language-plaintext highlighter-rouge">printer-name</code> |
| parameters</a> |
| respectively.</p> |
| |
| <ul> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-445">GUACAMOLE-445</a> - Allow RDP printer name to be configured</li> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-446">GUACAMOLE-446</a> - Allow RDP drive name to be configured</li> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-523">GUACAMOLE-523</a> - Use client_name for redirected devices</li> |
| </ul> |
| |
| <h3 id="configurable-terminal-color-schemes">Configurable terminal color schemes</h3> |
| |
| <p>The Guacamole terminal now allows for finer control of terminal color |
| schemes by allowing for the individual colors of a scheme to be customized |
| through <a href="/doc/1.0.0/gug/configuring-guacamole.html#ssh-display-settings">the existing <code class="language-plaintext highlighter-rouge">color-scheme</code> |
| parameter</a>. The |
| behavior of this parameter is the same for both SSH and telnet.</p> |
| |
| <ul> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-470">GUACAMOLE-470</a> - Make individual terminal colors configurable through “color-scheme” parameter</li> |
| </ul> |
| |
| <h3 id="optional-recording-of-input-events">Optional recording of input events</h3> |
| |
| <p>Guacamole has supported session recording for quite some time, but did not |
| record input events (mouse movement/clicks, keyboard input, etc.). This meant |
| that the mouse cursor could not be rendered in recording playback (as the mouse |
| position information from mouse events was not included) and session recording |
| could not be used for some auditing purposes that required logging of key |
| events.</p> |
| |
| <p>Options are now available for capturing input events during session |
| recording. For security and privacy reasons, only mouse events are captured |
| within session recordings by default. Capture of keyboard events can be |
| manually enabled, and capture of mouse events can be manually disabled.</p> |
| |
| <ul> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-313">GUACAMOLE-313</a> - Allow input events within session recording</li> |
| </ul> |
| |
| <h3 id="ssh-host-key-verification">SSH host key verification</h3> |
| |
| <p>SSH host key verification is now implemented and can be enabled and configured |
| within Guacamole. In the past, Guacamole has not performed any SSH host key |
| checking, and version 1.0.0 introduces this capability.</p> |
| |
| <p>For compatibility with past releases, this functionality is still disabled by |
| default. If known host keys are not provided, Guacamole will continue to behave |
| as it has in the past and will allow the connection to succeed, though a |
| warning will be logged.</p> |
| |
| <p>If host keys <em>are</em> provided (either in <a href="/doc/1.0.0/gug/configuring-guacamole.html#ssh-host-verification">an <code class="language-plaintext highlighter-rouge">ssh_known_hosts</code> file within the |
| <code class="language-plaintext highlighter-rouge">GUACAMOLE_HOME</code> directory</a> |
| on the server running guacd, or by passing <a href="/doc/1.0.0/gug/configuring-guacamole.html#ssh-network-parameters">the <code class="language-plaintext highlighter-rouge">host-key</code> |
| parameter</a> to |
| the connection with the key of the specific server), host key checking will be |
| strictly enforced and the connection will only succeed if the host key matches.</p> |
| |
| <ul> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-527">GUACAMOLE-527</a> - Add parameter for specifying known SSH/SFTP server host key</li> |
| </ul> |
| |
| <h3 id="automatic-detection-of-network-issues">Automatic detection of network issues</h3> |
| |
| <p>The Guacamole web application will now periodically check the responsiveness of |
| the network connection, displaying a warning if the network appears unstable.</p> |
| |
| <p>Downstream web applications which leverage the Guacamole API should handle the |
| <code class="language-plaintext highlighter-rouge">Guacamole.Tunnel.State.UNSTABLE</code> tunnel state in their tunnel’s |
| <a href="/doc/guacamole-common-js/Guacamole.Tunnel.html#event:onstatechange"><code class="language-plaintext highlighter-rouge">onstatechange</code></a> |
| handler to provide similar behavior, if desired.</p> |
| |
| <ul> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-567">GUACAMOLE-567</a> - Network connection problem acknowledgement/feedback</li> |
| </ul> |
| |
| <h3 id="support-for-configuring-guacamole-with-environment-variables">Support for configuring Guacamole with environment variables</h3> |
| |
| <p>Support has been added for specifying any of the properties supported in the |
| <a href="/doc/1.0.0/gug/configuring-guacamole.html#initial-setup"><code class="language-plaintext highlighter-rouge">GUACAMOLE_HOME/guacamole.properties</code></a> |
| file by setting environment variables that correspond to those properties. The |
| name of the environment variable for any particular property is the name of the |
| property in uppercase with all dashes replaced with underscores.</p> |
| |
| <p>For security reasons, the <code class="language-plaintext highlighter-rouge">enable-environment-properties</code> property must be set |
| to <code class="language-plaintext highlighter-rouge">true</code> for reading of properties from environment variables to be enabled.</p> |
| |
| <ul> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-464">GUACAMOLE-464</a> - Extension configuration properties from the OS environment</li> |
| </ul> |
| |
| <h3 id="improvements-to-guacamoleguacd-and-guacamoleguacamole-docker-images">Improvements to <code class="language-plaintext highlighter-rouge">guacamole/guacd</code> and <code class="language-plaintext highlighter-rouge">guacamole/guacamole</code> Docker images</h3> |
| |
| <p>Many improvements have been made to the Docker support files for building and |
| running Guacamole within Docker containers. Most notable among these is that |
| the base for the guacd Docker image has been changed from CentOS 7 to the |
| latest Debian stable. This allows for more recent, but still stable, versions |
| of libraries to be used to support the various protocols and features of guacd.</p> |
| |
| <ul> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-42">GUACAMOLE-42</a> - Support setting guacd log level on Docker container</li> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-407">GUACAMOLE-407</a> - Update guacd Docker image to build against more recent dependencies</li> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-450">GUACAMOLE-450</a> - Change Tomcat Version in Dockerfile to major release</li> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-553">GUACAMOLE-553</a> - Docker image need a new MySQL JDBC driver for MySQL 8.0</li> |
| </ul> |
| |
| <h3 id="general-usability-improvements">General usability improvements</h3> |
| |
| <p>Improvements to usability have been made in order to address issues reported by |
| users. Guacamole now supports Ctrl-Alt-End as an alternative shortcut for |
| sending Ctrl-Alt-Delete to remote systems. The zoom level of the client display |
| can be specified more granularly, connections are easier to select within in |
| the web interface, and guacd now provides a flag for printing the build |
| version.</p> |
| |
| <ul> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-113">GUACAMOLE-113</a> - Add Ctrl+Alt+Del hotkey</li> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-152">GUACAMOLE-152</a> - Difficult to reach specific zoom levels</li> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-304">GUACAMOLE-304</a> - Clicking area to open connection</li> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-351">GUACAMOLE-351</a> - Version parameter for guacd</li> |
| </ul> |
| |
| <h3 id="general-improvements-to-terminal-behavior">General improvements to terminal behavior</h3> |
| |
| <p>Compatibility of Guacamole’s terminal emulator has been improved, particularly |
| when dealing with non-Linux operating systems. Parameters have been added for |
| configuring the terminal type reported to the remote system, and for adjusting |
| the control code sent for backspace. The terminal has also been adjusted to hide |
| escape sequences and control codes that need not be supported but which were |
| previously incorrectly printed to the screen.</p> |
| |
| <ul> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-269">GUACAMOLE-269</a> - Add support for alternative backspace/delete control codes</li> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-564">GUACAMOLE-564</a> - Hide APC escape sequence for terminal</li> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-565">GUACAMOLE-565</a> - Add terminal type parameter</li> |
| </ul> |
| |
| <h3 id="support-for-systemd">Support for systemd</h3> |
| |
| <p>The guacamole-server build now includes an optional systemd init script to |
| allow for automatic startup on distributions that have moved from traditional |
| init scripts to systemd.</p> |
| |
| <ul> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-30">GUACAMOLE-30</a> - Add Systemd init script for guacd-server</li> |
| </ul> |
| |
| <h3 id="control-of-rdp-bitmap-and-glyph-caching">Control of RDP bitmap and glyph caching</h3> |
| |
| <p>Parameters have been added to RDP connections that allow for <a href="/doc/1.0.0/gug/configuring-guacamole.html#rdp-perf-flags">controlling how |
| the RDP protocol behaves for caching bitmaps, glyphs, and other off-screen |
| data</a>. The default |
| behavior remains unchanged, with caching of all of these items enabled, however |
| these parameters are available to workaround issues if your RDP server handles |
| such caching incorrectly.</p> |
| |
| <ul> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-448">GUACAMOLE-448</a> - Add parameters for controlling RDP bitmap/glyph/off-screen caching</li> |
| </ul> |
| |
| <h2 id="internationalization">Internationalization</h2> |
| |
| <h3 id="additional-rdp-keymaps">Additional RDP keymaps</h3> |
| |
| <p>Several keymaps have been added or updated to better support RDP servers with |
| differing keyboard layouts. As always, bear in mind that <a href="/faq/#does-guacamole-support-my-keyboard-layout">the client side of |
| Guacamole is always independent of keyboard layout</a>. |
| Additional keyboard layouts for RDP are mainly of benefit for enabling the |
| typing of certain characters if your RDP server does not support Unicode |
| events, and to ensure correct translation of key event to RDP scancode if the |
| keyboard layout of the RDP server is not the default (US English).</p> |
| |
| <ul> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-233">GUACAMOLE-233</a> - Add Spanish keymap for RDP</li> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-273">GUACAMOLE-273</a> - Add Portuguese Brazilian keymap for RDP</li> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-434">GUACAMOLE-434</a> - Add UK English keymap for RDP</li> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-481">GUACAMOLE-481</a> - Add Turkish Q keymap for RDP</li> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-517">GUACAMOLE-517</a> - Print screen key definition missing from RDP base keymap</li> |
| </ul> |
| |
| <h3 id="spanish-translation-of-web-interface">Spanish translation of web interface</h3> |
| |
| <p>The entire web interface has been translated into Spanish, including the |
| on-screen keyboard. Spanish will automatically be selected if accessing |
| Guacamole from a browser whose default language is set to Spanish. The language |
| can also be <a href="/doc/gug/using-guacamole.html#display-language">manually selected</a> |
| within Guacamole’s preferences.</p> |
| |
| <ul> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-463">GUACAMOLE-463</a> - Spanish translation for Guacamole client</li> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-530">GUACAMOLE-530</a> - Add Spanish on screen keyboard</li> |
| </ul> |
| |
| <h2 id="bug-fixes">Bug fixes</h2> |
| |
| <h3 id="hostname--desktop-name-regression">Hostname / desktop name regression</h3> |
| |
| <p>An issue was corrected where the hostname or desktop name of VNC and RDP |
| connections replaced the connection name on the tab or window title in the |
| browser. The connection name is now always displayed for VNC and RDP.</p> |
| |
| <ul> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-502">GUACAMOLE-502</a> - Hostname / desktop name replaces connection name</li> |
| </ul> |
| |
| <h3 id="general-connection-stability">General connection stability</h3> |
| |
| <p>Several issues potentially affecting connection stability have been addressed. |
| Additional safeguard measures have also been put in place to ensure that |
| connection processes are automatically killed and cleaned up if an unknown |
| issue causes the process to become unresponsive.</p> |
| |
| <ul> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-324">GUACAMOLE-324</a> - Incorrect buffer used in socket write</li> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-384">GUACAMOLE-384</a> - Terminal writes during disconnect may segfault</li> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-424">GUACAMOLE-424</a> - VNC client segfaults if provided password is incorrect</li> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-489">GUACAMOLE-489</a> - Secondary socket of “tee” socket is not threadsafe</li> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-533">GUACAMOLE-533</a> - Automatically kill wayward guacd processes</li> |
| </ul> |
| |
| <h3 id="issues-with-database-authentication-behavior-and-sql-queries">Issues with database authentication behavior and SQL queries</h3> |
| |
| <p>The new SQL Server support introduced with 0.9.14 leveraged SQL syntax that was |
| not compatible with SQL Server 2008 and later, and contained a bug which |
| resulted in the login history query failing after several history entries |
| existed. These issues have been fixed.</p> |
| |
| <p>A usability issue where users with disabled accounts would be shown a home |
| screen (albeit entirely blank) has also been fixed, and handling of the |
| hostname/address logged for user and connection access history has been |
| updated to be consistent across both underlying tables.</p> |
| |
| <ul> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-505">GUACAMOLE-505</a> - Individual user query fails after two or more login history entries exist</li> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-525">GUACAMOLE-525</a> - Creating user results in “Incorrect syntax near ‘LIMIT’”</li> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-529">GUACAMOLE-529</a> - Despite the fact user account is disabled, user account can access to a welcome blank screen</li> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-540">GUACAMOLE-540</a> - Discrepancy with remote_host between tables</li> |
| </ul> |
| |
| <h3 id="incorrect-status-reported-for-sessions-closed-by-rdp-server">Incorrect status reported for sessions closed by RDP server</h3> |
| |
| <p>Guacamole would previously incorrectly report that an RDP server was |
| unavailable when the connection was actually closed by the RDP server due to |
| another user starting a conflicting desktop session. As the web application will |
| automatically attempt to reconnect if the RDP server is reported as |
| unavailable (under the assumption that the condition is transient and the |
| server may eventually become available), this could cause users to repeatedly |
| kick each other out.</p> |
| |
| <p>This has been fixed for 1.0.0. Disconnects due to conflicting RDP sessions |
| should now be handled correctly.</p> |
| |
| <ul> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-484">GUACAMOLE-484</a> - UPSTREAM_UNAVAILABLE incorrectly reported for sessions closed by RDP server</li> |
| </ul> |
| |
| <h3 id="cas-authorization-uri-derived-incorrectly">CAS authorization URI derived incorrectly</h3> |
| |
| <p>Guacamole’s CAS authentication has been corrected to more properly comply with |
| the CAS specification. The <code class="language-plaintext highlighter-rouge">/login</code> portion of the URI used for logins is |
| required by the specification but was previously omitted by Guacamole. This is |
| tolerated by some CAS implementations, but not by all. CAS implementations |
| which require this should now work as expected with Guacamole.</p> |
| |
| <ul> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-457">GUACAMOLE-457</a> - CAS authentication provider omits login URI</li> |
| </ul> |
| |
| <h3 id="build-issues-for-guacamole-server">Build issues for guacamole-server</h3> |
| |
| <p>Issues which broke the guacamole-server build on some platforms have now been |
| fixed. In particular, Guacamole should now build correctly on systems having |
| GCC 7.</p> |
| |
| <ul> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-485">GUACAMOLE-485</a> - pango is required with pango support disabled</li> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-500">GUACAMOLE-500</a> - Terminal build fails against GCC 7</li> |
| </ul> |
| |
| <h3 id="fixes-for-guacenc-behavior-and-protocol-implementation">Fixes for guacenc behavior and protocol implementation</h3> |
| |
| <p>Previous releases of the “guacenc” utility (part of guacamole-server) produced |
| incorrect error messages and erratic behavior under certain conditions. These |
| issues have been corrected.</p> |
| |
| <ul> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-307">GUACAMOLE-307</a> - guacenc reports “Layer index out of bounds: -1”</li> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-482">GUACAMOLE-482</a> - Return value of guacenc_video_flush_frame() not handled</li> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-490">GUACAMOLE-490</a> - guacenc does not take channel mask into account for image streams</li> |
| </ul> |
| |
| <h3 id="issues-specific-to-internet-explorer">Issues specific to Internet Explorer</h3> |
| |
| <p>Several issues specific to Internet Explorer which either caused problems or |
| had the potential to impact compatibility across versions of Internet Explorer |
| have been fixed.</p> |
| |
| <ul> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-316">GUACAMOLE-316</a> - IE Compatibility mode doesn’t work</li> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-347">GUACAMOLE-347</a> - IE may lack window.location.origin</li> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-348">GUACAMOLE-348</a> - Stream download iframe may not exist in DOM at time of removal</li> |
| </ul> |
| |
| <h3 id="use-of-deprecated-navigatorgetusermedia">Use of deprecated <code class="language-plaintext highlighter-rouge">navigator.getUserMedia()</code></h3> |
| |
| <p>The <code class="language-plaintext highlighter-rouge">navigator.getUserMedia()</code> method used by Guacamole’s support for audio |
| input has been deprecated. Guacamole has been updated to no longer rely upon |
| that method.</p> |
| |
| <ul> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-237">GUACAMOLE-237</a> - navigator.getUserMedia() deprecated</li> |
| </ul> |
| |
| <h3 id="incorrect-documentation-for-rdp-load-balance-info-parameter">Incorrect documentation for RDP <code class="language-plaintext highlighter-rouge">load-balance-info</code> parameter</h3> |
| |
| <p>The <a href="/doc/1.0.0/gug/configuring-guacamole.html#rdp-connection-broker"><code class="language-plaintext highlighter-rouge">load-balance-info</code> parameter</a> |
| was incorrectly documented as <code class="language-plaintext highlighter-rouge">load-balancing-info</code>. The correct parameter name |
| is indeed <code class="language-plaintext highlighter-rouge">load-balance-info</code>. This has been fixed in the documentation.</p> |
| |
| <ul> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-427">GUACAMOLE-427</a> - RDP “load-balance-info” parameter incorrectly documented</li> |
| </ul> |
| |
| <h3 id="erroneous-inclusion-of-guaclog-binary-in-source-tree">Erroneous inclusion of “guaclog” binary in source tree</h3> |
| |
| <p>The “guaclog” binary was accidentally included in the source tree of the git |
| repository. It has been removed.</p> |
| |
| <ul> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-492">GUACAMOLE-492</a> - guaclog binary erroneously included in source tree</li> |
| </ul> |
| |
| <h2 id="platform--api-changes">Platform / API changes</h2> |
| |
| <h3 id="java-8-or-later-is-now-required"><strong>Java 8 or later is now required</strong></h3> |
| |
| <p>As noted in <a href="#deprecation--compatibility-notes">the compatibility section below</a>, |
| the Guacamole web application now requires Java version 1.8 or later for both |
| the build and at runtime. The core Java library, guacamole-common, remains |
| compatible with Java 1.6, however Java 1.8 is still required for the overall |
| guacamole-client build.</p> |
| |
| <ul> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-497">GUACAMOLE-497</a> - Ensure guacamole-client source is compatible with Java 9</li> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-635">GUACAMOLE-635</a> - Build against and require Java 1.8</li> |
| </ul> |
| |
| <h3 id="guacamole-no-longer-uses-cookies">Guacamole no longer uses cookies</h3> |
| |
| <p>The Guacamole web application no longer uses cookies at all, instead relying on |
| the browser’s local storage.</p> |
| |
| <ul> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-549">GUACAMOLE-549</a> - Store auth token within localStorage</li> |
| </ul> |
| |
| <h3 id="removal-of-noauth-and-other-deprecated-components">Removal of NoAuth and other deprecated components</h3> |
| |
| <p>Several components that were previously marked as deprecated have been |
| removed entirely from the code base. This includes the NoAuth extension, |
| several classes and functions, and several old properties. The use of any of |
| these components would previously have resulted in warnings. They will no |
| longer be available from this point forward, and continuing to use the |
| deprecated properties will silently have no effect.</p> |
| |
| <ul> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-493">GUACAMOLE-493</a> - Remove the NoAuth extension entirely</li> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-494">GUACAMOLE-494</a> - Remove support for old, deprecated properties</li> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-495">GUACAMOLE-495</a> - Remove support for old, deprecated portions of API</li> |
| </ul> |
| |
| <h3 id="improvements-to-extension-api">Improvements to extension API</h3> |
| |
| <p>The extension API has been updated to make development and maintenance of |
| extensions easier and more consistent. The error status codes sent by the REST |
| API are now derived from the exceptions thrown, allowing extensions to control |
| the exact code sent. Dependency precedence has been updated so that extensions |
| always see the classes they bundle, even if the web application bundles a |
| different version of the same class. Base implementations of the |
| <a href="/doc/1.0.0/guacamole-ext/org/apache/guacamole/net/auth/UserContext.html"><code class="language-plaintext highlighter-rouge">UserContext</code></a> |
| and <a href="/doc/1.0.0/guacamole-ext/org/apache/guacamole/net/auth/AuthenticationProvider.html"><code class="language-plaintext highlighter-rouge">AuthenticationProvider</code></a> |
| interfaces have been provided, removing the need to fully implement these |
| interfaces when writing an extension.</p> |
| |
| <ul> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-499">GUACAMOLE-499</a> - REST API Error Codes should come from GuacamoleStatus</li> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-541">GUACAMOLE-541</a> - Webapp dependencies take precedence over bundled extension dependencies</li> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-542">GUACAMOLE-542</a> - Provide base implementations of UserContext and AuthenticationProvider</li> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-566">GUACAMOLE-566</a> - Add RESTExceptionWrapper support for extensions</li> |
| </ul> |
| |
| <h3 id="web-application-updated-to-angularjs-169">Web application updated to AngularJS 1.6.9</h3> |
| |
| <p>The AngularJS library included with the Guacamole web application was updated |
| from 1.3.16 to 1.6.9. Several parts of the web application were reworked for |
| compatibility with this update, including the handling HTTP requests and |
| responses.</p> |
| |
| <ul> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-526">GUACAMOLE-526</a> - Update Guacamole-Client Webapp to Angular 1.6.9</li> |
| </ul> |
| |
| <h3 id="improvements-to-javascript-tunnel-api">Improvements to JavaScript tunnel API</h3> |
| |
| <p>The tunnel implementations provided by Guacamole’s JavaScript API have been |
| updated to allow arbitrary HTTP headers to be included in the connection |
| request (where supported by the underlying transport), and to allow the same |
| instance of the tunnel to be reused following disconnect.</p> |
| |
| <ul> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-431">GUACAMOLE-431</a> - Tunnel implementations handles close only once</li> |
| <li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-437">GUACAMOLE-437</a> - Allow to configure custom headers for Guacamole tunnels</li> |
| </ul> |
| |
| <h1 id="deprecation--compatibility-notes">Deprecation / Compatibility notes</h1> |
| |
| <p>As of 1.0.0, the following changes have been made which affect compatibility |
| with past releases:</p> |
| |
| <h2 id="java-8-or-later-is-now-required-1"><strong>Java 8 or later is now required</strong></h2> |
| |
| <p>Most of the Java components of the Guacamole Client have been updated to |
| require Java 1.8 for both compile and runtime. This decision was made based on |
| the fact that many support libraries are moving toward requiring later versions |
| of Java, that Java 1.8 has been out and stable for many years, and that Java |
| 1.6 and 1.7 have ceased receiving public updates.</p> |
| |
| <p>The only exception to this is the core Java API, guacamole-common, which |
| continues to maintain compatibility with Java 1.6.</p> |
| |
| <h2 id="database-schema-changes">Database schema changes</h2> |
| |
| <p>Significant changes have been made to the schemas for all of the JDBC |
| authentication modules (MySQL, PostgreSQL, and SQL Server). Among those |
| changes are the addition of support for user groups and the changes |
| required to support those within the database modules (including the |
| “entity” as an overall type for both users and groups).</p> |
| |
| <p>Users of any of the database authentication modules will need to run the |
| <code class="language-plaintext highlighter-rouge">upgrade-pre-1.0.0.sql</code> script specific to their chosen database as part |
| of the move from earlier versions of Guacamole to 1.0.0. More thorough |
| instructions for this process can be found in the |
| <a href="/doc/gug/jdbc-auth.html">database authentication documentation</a>.</p> |
| |
| <h2 id="hostname-logging-within-database">Hostname logging within database</h2> |
| |
| <p>The hostname/address of users logged by the database authentication backend is |
| now determined entirely by the servlet container. The database authentication |
| will not manually parse the <code class="language-plaintext highlighter-rouge">X-Forwarded-For</code> header, and will instead rely on |
| the servlet container to perform any such parsing.</p> |
| |
| <p>If proxying Guacamole, the configuration of your servlet container should be |
| updated to handle the headers set by your proxy. For Apache Tomcat, this is |
| accomplished with a <a href="https://tomcat.apache.org/tomcat-8.5-doc/api/org/apache/catalina/valves/RemoteIpValve.html"><code class="language-plaintext highlighter-rouge">RemoteIpValve</code></a> |
| in your <code class="language-plaintext highlighter-rouge">server.xml</code>.</p> |
| |
| <p>Logging of hostnames/addresses by Guacamole during the authentication process |
| (as would be parsed by tools like fail2ban) is unchanged, however you will need |
| to update the pattern if <code class="language-plaintext highlighter-rouge">RemoteIpValve</code> or similar are used, as the address of |
| interest will likely be the rightmost address. If the user is not behind any |
| additional, untrusted proxies, the address of interest will be the <em>only</em> |
| address.</p> |
| |
| <h2 id="removal-of-deprecated-noauth-extension">Removal of deprecated NoAuth extension</h2> |
| |
| <p>The NoAuth extension has been <a href="/releases/0.9.13-incubating/#noauth-now-deprecated">deprecated since |
| 0.9.13-incubating</a>, and has |
| now been removed from Guacamole’s codebase.</p> |
| |
| <h2 id="removal-of-deprecated-properties">Removal of deprecated properties</h2> |
| |
| <p>The following properties have been deprecated for quite some time, and |
| have been removed in the 1.0.0 release.</p> |
| |
| <ul> |
| <li><code class="language-plaintext highlighter-rouge">basic-user-mapping</code></li> |
| <li><code class="language-plaintext highlighter-rouge">mysql-disallow-simultaneous-connections</code></li> |
| <li><code class="language-plaintext highlighter-rouge">mysql-disallow-duplicate-connections</code></li> |
| <li><code class="language-plaintext highlighter-rouge">postgresql-disallow-simultaneous-connections</code></li> |
| <li><code class="language-plaintext highlighter-rouge">postgresql-disallow-duplicate-connections</code></li> |
| </ul> |
| |
| <p>Prior to the 1.0.0 release a warning would be logged regarding the deprecation |
| of these properties. As of this release, these properties will be silently |
| ignored.</p> |
| |
| <h2 id="extension-api-changes">Extension API changes</h2> |
| |
| <h3 id="support-for-user-groups-1">Support for user groups</h3> |
| |
| <p>As noted above, one of the major changes in this release is the addition of |
| support for user groups. These changes center around the new |
| <a href="/doc/1.0.0/guacamole-ext/org/apache/guacamole/net/auth/UserGroup.html"><code class="language-plaintext highlighter-rouge">UserGroup</code></a> |
| interface and functions for accessing instances of that interface. Note that if |
| you are using the abstract base classes <a href="/doc/1.0.0/guacamole-ext/org/apache/guacamole/net/auth/AbstractUserContext.html"><code class="language-plaintext highlighter-rouge">AbstractUserContext</code></a> |
| and <a href="/doc/1.0.0/guacamole-ext/org/apache/guacamole/net/auth/AbstractUser.html"><code class="language-plaintext highlighter-rouge">AbstractUser</code></a>, |
| little to no changes will be necessary as default implementations of the |
| required new functions have been provided.</p> |
| |
| <h4 id="retrieval-of-user-groups">Retrieval of user groups</h4> |
| |
| <p>The <a href="/doc/1.0.0/guacamole-ext/org/apache/guacamole/net/auth/UserContext.html"><code class="language-plaintext highlighter-rouge">UserContext</code></a> |
| interface now defines a <a href="/doc/1.0.0/guacamole-ext/org/apache/guacamole/net/auth/UserContext.html#getUserGroupDirectory--"><code class="language-plaintext highlighter-rouge">getUserGroupDirectory()</code></a> |
| function which returns a <a href="/doc/1.0.0/guacamole-ext/org/apache/guacamole/net/auth/Directory.html"><code class="language-plaintext highlighter-rouge">Directory<UserGroup></code></a> |
| providing access to all user groups. If your extension does not provide user |
| groups, it can simply return an empty <a href="/doc/1.0.0/guacamole-ext/org/apache/guacamole/net/auth/simple/SimpleDirectory.html"><code class="language-plaintext highlighter-rouge">SimpleDirectory<UserGroup></code></a>:</p> |
| |
| <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>@Override |
| public Object getUserGroupDirectory() { |
| return new SimpleDirectory<UserGroup>(); |
| } |
| </code></pre></div></div> |
| |
| <h4 id="effective-group-membership">Effective group membership</h4> |
| |
| <p>To allow extensions to take group membership into account, even when that |
| membership is dictated by a different extension, the |
| <a href="/doc/1.0.0/guacamole-ext/org/apache/guacamole/net/auth/AuthenticatedUser.html"><code class="language-plaintext highlighter-rouge">AuthenticatedUser</code></a> |
| class now defines a <a href="/doc/1.0.0/guacamole-ext/org/apache/guacamole/net/auth/AuthenticatedUser.html#getEffectiveUserGroups--"><code class="language-plaintext highlighter-rouge">getEffectiveGroups()</code></a> |
| function. This function should return the identifiers of all user groups that |
| apply to the current user. If support for user groups is not implemented by the |
| extension, simply return an empty set of strings:</p> |
| |
| <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>@Override |
| public Set<String> getEffectiveUserGroups() { |
| return Collections.<String>emptySet(); |
| } |
| </code></pre></div></div> |
| |
| <h4 id="effective-permissions">Effective permissions</h4> |
| |
| <p>The <a href="/doc/1.0.0/guacamole-ext/org/apache/guacamole/net/auth/User.html"><code class="language-plaintext highlighter-rouge">User</code></a> |
| interface now provides a <a href="/doc/1.0.0/guacamole-ext/org/apache/guacamole/net/auth/User.html#getEffectivePermissions--"><code class="language-plaintext highlighter-rouge">getEffectivePermissions()</code></a> |
| function which should return an implementation of <a href="/doc/1.0.0/guacamole-ext/org/apache/guacamole/net/auth/Permissions.html"><code class="language-plaintext highlighter-rouge">Permissions</code></a> |
| which exposes the permissions that apply to the user, including permissions |
| which may be inherited through group membership. If inheritance of permissions |
| is not implemented by your extension, this function can simply return <code class="language-plaintext highlighter-rouge">this</code> |
| (as <code class="language-plaintext highlighter-rouge">User</code> extends <code class="language-plaintext highlighter-rouge">Permissions</code>):</p> |
| |
| <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>@Override |
| public Permissions getEffectivePermissions() { |
| return this; |
| } |
| </code></pre></div></div> |
| |
| <h4 id="exposing-group-membership">Exposing group membership</h4> |
| |
| <p>The <a href="/doc/1.0.0/guacamole-ext/org/apache/guacamole/net/auth/User.html"><code class="language-plaintext highlighter-rouge">User</code></a> |
| and <a href="/doc/1.0.0/guacamole-ext/org/apache/guacamole/net/auth/UserGroup.html"><code class="language-plaintext highlighter-rouge">UserGroup</code></a> |
| interfaces provide multiple functions for retrieving parent groups and child |
| objects, if applicable. Existing implementations of the <code class="language-plaintext highlighter-rouge">User</code> interface which |
| do not extend <a href="/doc/1.0.0/guacamole-ext/org/apache/guacamole/net/auth/AbstractUser.html"><code class="language-plaintext highlighter-rouge">AbstractUser</code></a> |
| will need to implement <a href="/doc/1.0.0/guacamole-ext/org/apache/guacamole/net/auth/User.html#getUserGroups--"><code class="language-plaintext highlighter-rouge">getUserGroups()</code></a>, |
| a function which retrieves the immediate parent groups of the user. The |
| returned <a href="/doc/1.0.0/guacamole-ext/org/apache/guacamole/net/auth/RelatedObjectSet.html"><code class="language-plaintext highlighter-rouge">RelatedObjectSet</code></a> |
| should allow for manipulation of the group relationship if the extension allows |
| such manipulation (and if the current user has permission to do so). Extensions |
| which do not implement user groups can simply return an empty set:</p> |
| |
| <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>@Override |
| public RelatedObjectSet getUserGroups() { |
| return RelatedObjectSet.EMPTY_SET; |
| } |
| </code></pre></div></div> |
| |
| <h3 id="the-new-decoration-api">The new decoration API</h3> |
| |
| <p>The <a href="/doc/1.0.0/guacamole-ext/org/apache/guacamole/net/auth/AuthenticationProvider.html"><code class="language-plaintext highlighter-rouge">AuthenticationProvider</code></a> |
| interface now defines <a href="/doc/1.0.0/guacamole-ext/org/apache/guacamole/net/auth/AuthenticationProvider.html#decorate-org.apache.guacamole.net.auth.UserContext-org.apache.guacamole.net.auth.AuthenticatedUser-org.apache.guacamole.net.auth.Credentials-"><code class="language-plaintext highlighter-rouge">decorate()</code></a> |
| and <a href="/doc/1.0.0/guacamole-ext/org/apache/guacamole/net/auth/AuthenticationProvider.html#redecorate-org.apache.guacamole.net.auth.UserContext-org.apache.guacamole.net.auth.UserContext-org.apache.guacamole.net.auth.AuthenticatedUser-org.apache.guacamole.net.auth.Credentials-"><code class="language-plaintext highlighter-rouge">redecorate()</code></a> |
| functions which allow an implementation of <code class="language-plaintext highlighter-rouge">AuthenticationProvider</code> to decorate the |
| <a href="/doc/1.0.0/guacamole-ext/org/apache/guacamole/net/auth/UserContext.html"><code class="language-plaintext highlighter-rouge">UserContext</code></a> |
| instances of other extensions. After an extension returns a <code class="language-plaintext highlighter-rouge">UserContext</code> |
| instance, the <code class="language-plaintext highlighter-rouge">decorate()</code> (if the <code class="language-plaintext highlighter-rouge">UserContext</code> is for a new session) or |
| <code class="language-plaintext highlighter-rouge">redecorate()</code> (if the <code class="language-plaintext highlighter-rouge">UserContext</code> has been updated for an existing session) |
| functions of all other extensions are invoked to give those extensions a chance |
| to wrap the <code class="language-plaintext highlighter-rouge">UserContext</code>. This allows extensions to add functionality to the |
| objects of other extensions which may not otherwise be possible.</p> |
| |
| <p>Implementations of <code class="language-plaintext highlighter-rouge">AuthenticationProvider</code> which extend |
| <a href="/doc/1.0.0/guacamole-ext/org/apache/guacamole/net/auth/AbstractAuthenticationProvider.html"><code class="language-plaintext highlighter-rouge">AbstractAuthenticationProvider</code></a> |
| need not implement these functions as default implementations are provided. |
| Implementations which do not extend <code class="language-plaintext highlighter-rouge">AbstractAuthenticationProvider</code> and which |
| do not decorate the <code class="language-plaintext highlighter-rouge">UserContext</code> of other extensions should simply return the |
| original <code class="language-plaintext highlighter-rouge">UserContext</code>:</p> |
| |
| <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>@Override |
| public UserContext decorate(UserContext context, |
| AuthenticationProvider authProvider, Credentials credentials) { |
| return context; |
| } |
| |
| @Override |
| public UserContext redecorate(UserContext decorated, UserContext context, |
| AuthenticationProvider authProvider, Credentials credentials) { |
| return decorate(context, authProvider, credentials); |
| } |
| </code></pre></div></div> |
| |
| <h3 id="removal-of-deprecated-guacamolehome-and-guacamoleproperties-classes">Removal of deprecated <code class="language-plaintext highlighter-rouge">GuacamoleHome</code> and <code class="language-plaintext highlighter-rouge">GuacamoleProperties</code> classes</h3> |
| |
| <p>The <code class="language-plaintext highlighter-rouge">GuacamoleHome</code> and <code class="language-plaintext highlighter-rouge">GuacamoleProperties</code> classes have been deprecated |
| since 0.9.4, having been replaced by the <a href="/doc/1.0.0/guacamole-ext/org/apache/guacamole/environment/Environment.html"><code class="language-plaintext highlighter-rouge">Environment</code></a> |
| interface and its concrete <a href="/doc/1.0.0/guacamole-ext/org/apache/guacamole/environment/LocalEnvironment.html"><code class="language-plaintext highlighter-rouge">LocalEnvironment</code></a> |
| implementation. These classes are no longer part of the extension API. |
| Implementations should migrate to <code class="language-plaintext highlighter-rouge">LocalEnvironment</code>.</p> |
| |
| <h3 id="deprecation-of-simpleuserdirectory-simpleconnectiondirectory-and-simpleconnectiongroupdirectory-classes">Deprecation of <code class="language-plaintext highlighter-rouge">SimpleUserDirectory</code>, <code class="language-plaintext highlighter-rouge">SimpleConnectionDirectory</code>, and <code class="language-plaintext highlighter-rouge">SimpleConnectionGroupDirectory</code> classes</h3> |
| |
| <p>The <a href="/doc/1.0.0/guacamole-ext/org/apache/guacamole/net/auth/simple/SimpleUaweDirectory.html"><code class="language-plaintext highlighter-rouge">SimpleUserDirectory</code></a>, |
| <a href="/doc/1.0.0/guacamole-ext/org/apache/guacamole/net/auth/simple/SimpleConnectionDirectory.html"><code class="language-plaintext highlighter-rouge">SimpleConnectionDirectory</code></a>, |
| and <a href="/doc/1.0.0/guacamole-ext/org/apache/guacamole/net/auth/simple/SimpleConnectionGroupDirectory.html"><code class="language-plaintext highlighter-rouge">SimpleConnectionGroupDirectory</code></a> |
| classes have been deprecated in favor of the |
| <a href="/doc/1.0.0/guacamole-ext/org/apache/guacamole/net/auth/simple/SimpleDirectory.html"><code class="language-plaintext highlighter-rouge">SimpleDirectory<T></code></a> |
| class. These classes can still be used, but will result in deprecation |
| warnings, and will be removed in a future release.</p> |
| |
| <h3 id="deprecation-of-simpleuser-convenience-constructors">Deprecation of <code class="language-plaintext highlighter-rouge">SimpleUser</code> convenience constructors</h3> |
| |
| <p>With the increasing number of permission sets available for both users and user |
| groups, the old convenience constructors which provided parameters for these |
| permission sets for the |
| <a href="/doc/1.0.0/guacamole-ext/org/apache/guacamole/net/auth/simple/SimpleUser.html"><code class="language-plaintext highlighter-rouge">SimpleUser</code></a> |
| implementation of the <a href="/doc/1.0.0/guacamole-ext/org/apache/guacamole/net/auth/User.html"><code class="language-plaintext highlighter-rouge">User</code></a> |
| interface have been deprecated for the sake of API simplicity and consistency.</p> |
| |
| <p>Implementations which use these constructors of <code class="language-plaintext highlighter-rouge">SimpleUser</code> should migrate to |
| extending <code class="language-plaintext highlighter-rouge">SimpleUser</code> and overriding the applicable getters instead. The |
| deprecated constructors will continue to work as before, however their use will |
| result in deprecation warnings, and they will eventually be removed from the |
| API.</p> |
| |
| <h2 id="libguac-api-changes">libguac API changes</h2> |
| |
| <h3 id="guac_protocol_send_mouse-now-requires-additional-parameters"><code class="language-plaintext highlighter-rouge">guac_protocol_send_mouse()</code> now requires additional parameters</h3> |
| |
| <p>The <a href="/doc/1.0.0/libguac/protocol_8h.html#a8947056262da2f3263b9851370597622"><code class="language-plaintext highlighter-rouge">guac_protocol_send_mouse()</code></a> |
| function now accepts an additional <a href="/doc/1.0.0/libguac/timestamp-types_8h.html#a69e916d1ff324fbe0e527f32359c9cea"><code class="language-plaintext highlighter-rouge">guac_timestamp</code></a> |
| argument representing the point in time that the mouse event occurred. Callers |
| of this function will now need to include an appropriate timestamp, such as the value returned by |
| <a href="/doc/1.0.0/libguac/timestamp_8h.html#ab85ce937dce4d8e94c173be917bc0719"><code class="language-plaintext highlighter-rouge">guac_timestamp_current()</code></a>.</p> |
| |
| <h3 id="guac_instruction_max_elements-macro-definition-changed"><code class="language-plaintext highlighter-rouge">GUAC_INSTRUCTION_MAX_ELEMENTS</code> macro definition changed</h3> |
| |
| <p>The value of the |
| <a href="/doc/1.0.0/libguac/parser-constants_8h.html#a6f314dc5700812ca93ff132a15b86a46"><code class="language-plaintext highlighter-rouge">GUAC_INSTRUCTION_MAX_ELEMENTS</code></a> |
| has been increased from 64 to 128. This should not affect whether existing code |
| builds against libguac, however it does affect the size of the |
| <a href="/doc/1.0.0/libguac/structguac__parser.html"><code class="language-plaintext highlighter-rouge">guac_parser</code></a> structure such |
| that it will not be binary-compatible with older versions of libguac. The |
| system linker should take this into account automatically.</p> |
| |
| <h2 id="java-api-guacamole-common-changes">Java API (guacamole-common) changes</h2> |
| |
| <h3 id="removal-of-deprecated-guacamolesession-class">Removal of deprecated <code class="language-plaintext highlighter-rouge">GuacamoleSession</code> class</h3> |
| |
| <p>The <code class="language-plaintext highlighter-rouge">GuacamoleSession</code> class has been deprecated since 0.9.9 and has now been |
| removed from the API. Downstream usages of this class should simply be removed; |
| it is entirely unnecessary and has had no effect since 0.9.9.</p> |
| |
| <h3 id="change-in-definition-of-guacamolehttptunnelservletsenderror">Change in definition of <code class="language-plaintext highlighter-rouge">GuacamoleHTTPTunnelServlet.sendError()</code></h3> |
| |
| <p>The definition of the <code class="language-plaintext highlighter-rouge">protected</code> function |
| <a href="/doc/1.0.0/guacamole-common/org/apache/guacamole/servlet/GuacamoleHTTPTunnelServlet.html#sendError-javax.servlet.http.HttpServletResponse-int-int-java.lang.String-"><code class="language-plaintext highlighter-rouge">sendError()</code></a> |
| within <a href="/doc/1.0.0/guacamole-common/org/apache/guacamole/servlet/GuacamoleHTTPTunnelServlet.html"><code class="language-plaintext highlighter-rouge">GuacamoleHTTPTunnelServlet</code></a> |
| has changed to include explicit numeric codes for the Guacamole and HTTP |
| statuses rather than a single |
| <a href="/doc/1.0.0/guacamole-common/org/apache/guacamole/protocol/GuacamoleStatus.html"><code class="language-plaintext highlighter-rouge">GuacamoleStatus</code></a>.</p> |
| |
| <p>It is unlikely that this change will affect downstream implementations of |
| <code class="language-plaintext highlighter-rouge">GuacamoleHTTPTunnelServlet</code>, which generally will only override |
| <a href="/doc/1.0.0/guacamole-common/org/apache/guacamole/servlet/GuacamoleHTTPTunnelServlet.html#doConnect-javax.servlet.http.HttpServletRequest-"><code class="language-plaintext highlighter-rouge">doConnect()</code></a>, |
| however any downstream implementations which <em>do</em> call or override |
| <code class="language-plaintext highlighter-rouge">sendError()</code> will need to be updated accordingly.</p> |
| |
| <h2 id="javascript-api-changes">JavaScript API changes</h2> |
| |
| <h3 id="removal-of-deprecated-guacamoleclientsetclipboard-function">Removal of deprecated <code class="language-plaintext highlighter-rouge">Guacamole.Client.setClipboard()</code> function</h3> |
| |
| <p>The <code class="language-plaintext highlighter-rouge">setClipboard()</code> function of |
| <a href="/doc/1.0.0/guacamole-common-js/Guacamole.Client.html"><code class="language-plaintext highlighter-rouge">Guacamole.Client</code></a> |
| has been deprecated since 0.9.1, having been replaced by |
| <a href="/doc/1.0.0/guacamole-common-js/Guacamole.Client.html#createClipboardStream"><code class="language-plaintext highlighter-rouge">createClipboardStream()</code></a>, |
| and convenience “writer” implementations like |
| <a href="/doc/1.0.0/guacamole-common-js/Guacamole.StringWriter.html"><code class="language-plaintext highlighter-rouge">Guacamole.StringWriter</code></a> |
| which may be given the resulting |
| <a href="/doc/1.0.0/guacamole-common-js/Guacamole.OutputStream.html"><code class="language-plaintext highlighter-rouge">Guacamole.OutputStream</code></a>.</p> |
| |
| <p><code class="language-plaintext highlighter-rouge">setClipboard()</code> has now been removed from the API. Downstream uses of |
| <code class="language-plaintext highlighter-rouge">setClipboard()</code> should migrate to <code class="language-plaintext highlighter-rouge">createClipboardStream()</code>.</p> |
| |
| <h3 id="addition-of-guacamoletunnelstateunstable-state">Addition of <code class="language-plaintext highlighter-rouge">Guacamole.Tunnel.State.UNSTABLE</code> state</h3> |
| |
| <p>In order to support changes to detecting and handling network problems within |
| the Guacamole connections, another tunnel state, |
| <code class="language-plaintext highlighter-rouge">Guacamole.Tunnel.State.UNSTABLE</code>, has been added. The tunnel enters this |
| state when it is still technically connected but the network connection appears |
| unstable and may result in disconnection.</p> |
| |
| <p>Code which handles changes in tunnel state may need to be updated to take this |
| additional state into account if it does not currently ignore unknown states, |
| or that code would benefit from explicitly handling the unstable condition.</p> |
| |
| <h3 id="internal-websocket-tunnel-implementation-changes">Internal WebSocket tunnel implementation changes</h3> |
| |
| <p>The WebSocket tunnel (<a href="/doc/1.0.0/guacamole-common-js/Guacamole.WebSocketTunnel.html"><code class="language-plaintext highlighter-rouge">Guacamole.WebSocketTunnel</code></a>) |
| now uses the <a href="/doc/1.0.0/guacamole-common-js/Guacamole.Tunnel.html#.INTERNAL_DATA_OPCODE">internal tunnel opcode</a> |
| to <a href="https://github.com/apache/guacamole-client/blob/78f1ae1b4eac25501d532ddee94fd1d8588e56dc/guacamole-common-js/src/main/webapp/modules/Tunnel.js#L948-L952">send “ping” requests</a> |
| which the server side of the tunnel must respond to |
| <a href="https://github.com/apache/guacamole-client/blob/78f1ae1b4eac25501d532ddee94fd1d8588e56dc/guacamole-common/src/main/java/org/apache/guacamole/websocket/GuacamoleWebSocketTunnelEndpoint.java#L321-L324">with an identical instruction</a> |
| to verify connection stability. Third-party reimplementations of the WebSocket |
| tunnel will need to be updated to do the same.</p> |
| |
| |
| </div> |
| |
| </div> |
| |
| </div> |
| |
| <!-- Footer --> |
| <div id="footer"> |
| <div class="readable-content"> |
| |
| <!-- Copyrights --> |
| <p class="copyright"> |
| Copyright © 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> |