GUACAMOLE-1820: Merge documentation for key event display and search.

diff --git a/src/auth-ban.md b/src/auth-ban.md
new file mode 100644
index 0000000..df0fe9f
--- /dev/null
+++ b/src/auth-ban.md
@@ -0,0 +1,108 @@
+Securing Guacamole against brute force attacks
+==============================================
+
+Version 1.6.0 of Guacamole introduces an extension that allows you to detect
+and block brute-force login attacks. The extension, `guacamole-auth-ban`, can
+be installed alongside any of Guacamole's other extensions that provide user
+authentication, and will track the IP address of failed authentication attempts
+and, once the threshold of failed logins is reached, will block further logins
+from that IP address for a given amount of time.
+
+:::{important}
+This chapter involves modifying the contents of `GUACAMOLE_HOME` - the
+Guacamole configuration directory. If you are unsure where `GUACAMOLE_HOME` is
+located on your system, please consult [](configuring-guacamole) before
+proceeding.
+:::
+
+Downloading the auth-ban extension
+----------------------------------
+
+The guacamole-auth-ban extension is available separately from the main
+`guacamole.war`. The link for this and all other officially-supported and
+compatible extensions for a particular version of Guacamole are provided on the
+release notes for that version. You can find the release notes for current
+versions of Guacamole here: http://guacamole.apache.org/releases/.
+
+The extension is packaged as a `.tar.gz` file containing only the extension
+itself, `guacamole-auth-ban-1.6.0.jar`, which must ultimately be placed in
+`GUACAMOLE_HOME/extensions`.
+
+(installing-auth-ban)=
+
+Installing the auth-ban extension
+---------------------------------
+
+Guacamole extensions are self-contained `.jar` files which are located within
+the `GUACAMOLE_HOME/extensions` directory. To install the guacamole-auth-ban
+extension, you must:
+
+1. Create the `GUACAMOLE_HOME/extensions` directory, if it does not already
+   exist.
+
+2. Copy `guacamole-auth-ban-1.6.0.jar` within `GUACAMOLE_HOME/extensions`.
+
+3. [Configure the auth-ban extension thresholds, as described below](auth-ban-config),
+   if want parameters other than the defaults (also noted below).
+
+:::{important}
+You will need to restart Guacamole by restarting your servlet container in
+order to complete the installation. Doing this will disconnect all active
+users, so be sure that it is safe to do so prior to attempting installation.
+:::
+
+(auth-ban-config)=
+
+### Configuring Guacamole for authentication failure protection
+
+This extension has no required properties, and, so long as you are satisfied
+with the default threshold noted below, requires no configuration beyond the
+installation of the extension and reload of the web application.
+
+If you wish to adjust the thresholds for how Guacamole handles protection
+against brute force authentication attacks, the following properties are
+available to you to configure the auth-ban extension:
+
+`ban-max-invalid-attempts`
+: The number of authentication failures ater which the extension will block
+  further logins from the client IP address. This property is optional and
+  the default is 5.
+
+`ban-address-duration`
+: The length of time for which a client IP address will be denied logins
+  after the maximum authentication failures, in seconds. This property is
+  optional and has a default value of 300 seconds (five minutes).
+
+`ban-max-addresses`
+: The maximum number of client IP addresses that the extension will track
+  in-memory before the oldest client IP is discarded in a Least-Recently
+  Used (LRU) fashion. This property is optional and has a default value
+  of 10485670 (1 million IP addresses).
+
+:::{important}
+Because the extension tracks authentication failures based on the client
+IP address, it is important to make sure that Guacamole is receiving the
+correct IP addresses for the clients. This is particularly noteworthy
+when Guacamole is behind a reverse proxy. See the manual page on
+[proxying Guacamole](proxying-guacamole) for more details on configuring
+Guacamole behind a proxy.
+:::
+
+(completing-auth-ban-install)=
+
+### Completing the installation
+
+Guacamole will only reread `guacamole.properties` and load newly-installed
+extensions during startup, so your servlet container will need to be restarted
+before installation of the auth-ban extension will take effect.
+
+(using-auth-ban)=
+
+### Using the extension
+
+Once the extension is installed and the web application restarted, Guacamole
+will immediately begin tracking login failures and blocking login attempts
+from systems that reach the maximum failure threshold. Once an IP address is
+blocked you'll see a message on the login page:
+
+![](images/too-many-failed-logins.png)
diff --git a/src/configuring-guacamole.md b/src/configuring-guacamole.md
index f36bdb9..865843d 100644
--- a/src/configuring-guacamole.md
+++ b/src/configuring-guacamole.md
@@ -499,10 +499,16 @@
 
 #### Display settings
 
-VNC servers do not allow the client to request particular display sizes, so you
-are at the mercy of your VNC server with respect to display width and height.
-However, to reduce bandwidth usage, you may request that the VNC server reduce
-its color depth. Guacamole will automatically detect 256-color images, but this
+Many VNC servers do not allow the client to request or change the display
+size, though there are some that support dynamic display size updates. However,
+unlike RDP, there is no strict requirement that the VNC server honor or
+support those updates, so you are at the mercy of your VNC server with respect
+to display width and height and whether or not it matches that of your client.
+Guacamole, by default, attempts to negotiate this support with the VNC
+server and send the client (browser) display dimensions to the VNC server.
+
+To reduce bandwidth usage, you may request that the VNC server reduce its
+color depth. Guacamole will automatically detect 256-color images, but this
 can be guaranteed for absolutely all graphics sent over the connection by
 forcing the color depth to 8-bit. Color depth is otherwise dictated by the VNC
 server.
@@ -519,6 +525,34 @@
   value is chosen here, if a particular update uses less than 256 colors,
   Guacamole will always send that update as a 256-color PNG.
 
+`disable-server-input`
+: Whether or not the VNC client should ask the VNC server to disable local
+  input devices when the client connects. Some VNC servers support this
+  feature in order to give preference to input from the client, and to
+  avoid situations where the local keyboard and/or mouse may be "fighting"
+  with the remote keyboard and/or mouse for control. Note that this
+  requires the remote VNC server to have this feature supported and
+  enabled, and there is no guarantee that the remote system will honor
+  the request. Setting this parameter to "true" will request that the
+  VNC server disable the local input devices; leaving it blank or
+  setting to false will not make that request. This parameter is
+  optional.
+
+`disable-display-resize`
+: Whether or not the VNC client should *not* attempt to update the
+  remote (server) display with its size. By default, when Guacamole
+  connects to a VNC server, it will check for server support for
+  configuring the remote display size, and will attempt to send the
+  size of the browser area to the server to set the remote display
+  to the same size as the browser. Also, if the browser window is
+  resized, Guacamole will detect the resize and send the updated
+  size to the server. If the server supports dynamic resizing, it
+  may adjust the display size to match the browser. If this option
+  is set to true, Guacamole will disable the client-side display
+  updates, and the size of the desktop will not be sent to the
+  VNC server, either during initial connection or when the browser
+  is resized.
+
 `swap-red-blue`
 : If the colors of your display appear wrong (blues appear orange or red,
   etc.), it may be that your VNC server is sending image data incorrectly,
@@ -1676,6 +1710,12 @@
   parameter is not provided, the user will be prompted for the passphrase
   upon connecting.
 
+`public-key`
+: If SSH is using certificate-based authentication, this field allows
+  you to provide the Base64-encoded CA certificate that will be used
+  to validate the certificate of the user. This parameter is optional
+  and there is no default value.
+
 (ssh-command)=
 
 #### Running a command (instead of a shell)
@@ -2218,10 +2258,15 @@
 ```
 
 :::{important}
-Guacamole will never overwrite an existing recording. If necessary, a numeric
-suffix like ".1", ".2", ".3", etc. will be appended to <NAME> to avoid
+By default, Guacamole will not overwrite an existing recording, unless you have
+enabled it to do so by use of the `recording-write-existing` connection
+paramter. When the `recording-write-existing` connection parameter is not enabled,
+a numeric suffix like ".1", ".2", ".3", etc. will be appended to <NAME> to avoid
 overwriting an existing recording. If even appending a numeric suffix does not
 help, the session will simply not be recorded.
+
+If the `recording-write-existing` parameter is enabled, then Guacamole will
+overwrite the existing recording.
 :::
 
 `recording-path`
@@ -2284,6 +2329,19 @@
   the `recording-path` is not specified, graphical session recording will be
   disabled, and this parameter will be ignored.
 
+`recording-write-exiting`
+: If set to "true", instead of insisting on creation of a new file, and
+  appending numbers until a non-existing file is found, Guacamole will
+  simply write to the existing recording file, overwriting data that
+  may already be present. While overwriting recordings is not generally
+  desirable, this parameter is useful in situations where you want to
+  try to write to a named pipe, FIFO buffer, or other special device
+  that may be sending the recording data elsewhere.
+
+  This parameter only has an effect if graphical recording is enabled. If
+  the `recording-path` is not specified, graphical session recording will
+  be disabled, and this parameter will be ignored.
+
 (typescripts)=
 
 #### Text session recording (typescripts)
@@ -2305,10 +2363,14 @@
 ```
 
 :::{important}
-Guacamole will never overwrite an existing recording. If necessary, a numeric
-suffix like ".1", ".2", ".3", etc. will be appended to `NAME` to avoid
-overwriting an existing recording. If even appending a numeric suffix does not
-help, the session will simply not be recorded.
+By default, Guacamole will not overwrite an existing typescript recordings;
+instead, it will append a numeric suffix like ".1", ".2", ".3", etc., to
+`NAME` to avoid overwriting an existing recording. If even appending a
+numeric suffix does not help, the session will simply not be recorded.
+
+However, if the `typescript-write-existing` parameter is enabled, then
+Guacamole will be allowed to use the existing recording file, potentially
+ovewriting any data in that file.
 :::
 
 `typescript-path`
@@ -2348,6 +2410,20 @@
   the `typescript-path` is not specified, recording of typescripts will be
   disabled, and this parameter will be ignored.
 
+`typescript-write-existing`
+: If this parameter is set to "true", instead of attempting to generate
+  unique file names by appending incremental numbers to the typescript name,
+  Guacamole will be allowed to write to an existing typescript file,
+  potentially ovewriting any data in that file. While this is not
+  desirable in most cases, it may be necessary in situations where the
+  typescript recording is being sent to a named pipe, FIFO buffer, or
+  other special device that is processing the data and sending it
+  elsewhere.
+
+  This parameter only has an effect if typescript recording is enabled. If
+  the `typescript-path` is not specified, recording of typescripts will be
+  disabled, and this parameter will be ignored.
+
 (terminal-behavior)=
 
 #### Controlling terminal behavior
@@ -2496,6 +2572,15 @@
 below parameters control the behavior of this functionality, which is disabled
 by default.
 
+When this functionality is enabled, Guacamole will attempt to connect to the
+specified hostname or IP and the TCP port number used in the connection prior
+to sending the WoL packet. If the connection succeeds, the host is determined
+to be up, and the WoL packet will not be sent. After the initial WoL packet
+is sent, Guacamole will wait the amount of time specified by `wol-wait-time`,
+retry the connection to the host, and then send another WoL packet. This
+loop will be repeated up to five times to attempt to wake the host, or
+the connection will fail.
+
 :::{important}
 There are several factors that can impact the ability of Wake-on-LAN (WoL) to
 function correctly, many of which are outside the scope of Guacamole
diff --git a/src/images/too-many-failed-logins.png b/src/images/too-many-failed-logins.png
new file mode 100644
index 0000000..0c79f63
--- /dev/null
+++ b/src/images/too-many-failed-logins.png
Binary files differ
diff --git a/src/index.md b/src/index.md
index 9804098..eed953f 100644
--- a/src/index.md
+++ b/src/index.md
@@ -49,6 +49,7 @@
 saml-auth
 radius-auth
 adhoc-connections
+ban-auth
 using-guacamole
 recording-playback
 administration
diff --git a/src/ldap-auth.md b/src/ldap-auth.md
index d3b3333..2430b32 100644
--- a/src/ldap-auth.md
+++ b/src/ldap-auth.md
@@ -262,6 +262,18 @@
   the `-D` option. Your servlet container will provide some means of specifying
   startup options for the JVM.
 
+`ldap-ssl-protocol`
+: Configures the SSL/TLS protocol version that will be used to contact the
+  LDAP server, if LDAP encryption is enabled. Legal values are "SSLv3" for
+  (legacy) SSL version 3 encryption, and "TLSv1", "TLSv1.1", "TLSv1.2", or
+  "TLSv1.3" for the various versions of TLS, version 1.0 - 1.3. The default
+  is to use the latest, TLSv1.3.
+
+  Please note that the legacy versions of SSLv3 and TLSv1 and TLSv1.1 have
+  many known vulnerabilities and attack vectors, and you should use the
+  latest possible TLS version that your LDAP servers support in order
+  to best protect communication between Guacamole and your LDAP servers.
+
 `ldap-max-search-results`
 : The maximum number of search results that can be returned by a single LDAP
   query. LDAP queries which exceed this maximum will fail. *This property is
diff --git a/src/saml-auth.md b/src/saml-auth.md
index 803d1dc..956431d 100644
--- a/src/saml-auth.md
+++ b/src/saml-auth.md
@@ -106,6 +106,18 @@
   management within Guacamole Client, particularly when layered with other
   authentication modules. This property is optional, and defaults to "groups".
 
+`saml-x509-cert-path`
+: The path to a certificate that will be used to sign SAML requests before
+  they are sent to the IdP, enhancing the integrity of the SAML authentication
+  process. This property is optional, and, if not present, SAML requests
+  will not be signed.
+
+`saml-private-key-path`
+: The path to a private key file to use to encrypt SAML requests sent to the
+  IdP, enhancing the confidentiality and integrity of the authentication
+  process. This property is optional, and, if not present, SAML requests
+  will not be encrypted before they are sent to the IdP.
+
 ### Controlling login behavior
 
 ```{include} include/sso-login-behavior.md
diff --git a/src/vault.md b/src/vault.md
index ff0a8e7..5c7a943 100644
--- a/src/vault.md
+++ b/src/vault.md
@@ -158,6 +158,12 @@
   the KSM vault support itself, it is unlikely that you need to set this
   property.**
 
+`ksm-api-call-interval`
+: Specify the minimum number of milliseconds between calls to the KSM API. The
+  API allows a limited number of calls per month, and calls over the included
+  amount generate additional cost. Setting this property allows you to
+  limit Guacamole's impact on that cost.
+
 (completing-vault-install)=
 
 ### Completing the installation