## IOProtocolExt Plugin

Copyright © 2011-2023 Dominik Reichl. Distributed under the terms of the GNU General Public License v2.

This plugin adds support for loading/saving files from/to servers via SCP, SFTP and FTPS.

KeePass can handle FTP by default (using classes of the .NET framework). However, this plugin replaces the FTP handler to use WinSCP instead. So, if you have problems with the .NET FTP classes, installing IOProtocolExt might solve them.

### System Requirements

IOProtocolExt requires Windows XP or newer. Unix-like systems are not supported.

### Installation & Configuration

Installation. Copy the `IOProtocolExt*` files and the `IOProtocolExt_WinSCP` folder into the `Plugins` folder (in the KeePass application directory) and restart KeePass.

Firewall. If you are behind a firewall, you must allow `WinSCP.exe` and `WinSCP.com` (in the `IOProtocolExt_WinSCP` folder) to connect to the server you want to open/save files from/to.

Faster saving. KeePass by default ensures the integrity of saved files: when saving, KeePass first opens/downloads the file from the server (to see whether it has been changed in the meanwhile by a different user), uploads the new file, and downloads it again to verify that the stored file indeed matches the file that KeePass has sent. Additionally, KeePass uses file transactions (saving to a temporary file first and renaming it afterwards to the actual file, in order to prevent corruption of the actual file when the upload fails for some reason). These precautions can result in a slow saving process. If you want to speed it up (and lose a bit of safety), disable the options 'Verify written file after saving a database' and 'Use file transactions for writing databases' in the KeePass options dialog ('Tools' → 'Options' → tab 'Advanced'). This will reduce the saving process to one download and one upload.

### Usage

As soon as the plugin is installed once, KeePass can open URLs starting with `scp://`, `sftp://`, `ftps://` (and of course the ones that were supported already, i.e. `http://`, `https://` and `ftp://`). To open a URL, go 'File' → 'Open' → 'Open URL...'.

URL examples:
`sftp://ftp.example.com/public_html/Database.kdbx`
`scp://ssh.example.com:2222/KeePass/Database.kdbx`

Advanced connection options (like timeout, expected host key, etc.) can be specified on the 'Advanced' tab of the 'Open From URL' dialog. For detailed descriptions of the options, see the WinSCP documentation.

FRITZ!Box NAS. If you try to load/save files from/to a FRITZ!Box NAS and this fails, try turning on the option 'Enable FRITZ!Box NAS workaround' (on the 'Advanced' tab of the 'Open From URL' dialog).

### Acknowledgements

Thanks to Martin Prikryl, the developer of WinSCP, which IOProtocolExt internally uses for communicating with servers. WinSCP is distributed under the terms of the GNU General Public License.

### Version History

- 1.17
  - Minor ReadMe improvements.
  - Upgraded to WinSCP 6.1.1.
- 1.16
  - Explicitly specified raw settings for WinSCP now override any raw settings that IOProtocolExt generates.
  - The plugin is now provided in dual form (DLL and PLGX).
  - Upgraded to WinSCP 5.13.6.
- 1.15
  - Added option 'Preserve timestamp' (on the 'Advanced' tab of the 'Open From URL' dialog).
  - Upgraded to WinSCP 5.13.3.
- 1.14
  - Added option 'Enable FRITZ!Box NAS workaround' (on the 'Advanced' tab of the 'Open From URL' dialog).
- 1.13
  - Improved parameter encoding.
  - Upgraded to WinSCP 5.13.1.
- 1.12
  - Connection options can now be specified for each connection individually on the 'Advanced' tab of the 'Open From URL' dialog; removed global IOProtocolExt options dialog.
  - Added support for specifying SSH private key paths (for SCP and SFTP).
  - Added support for specifying fingerprints of expected SSH host keys (for SCP and SFTP).
  - Added support for specifying fingerprints of expected TLS/SSL certificates (for FTPS).
  - FTPS: unless the fingerprint(s) of the expected TLS/SSL certificate(s) has/have been specified explicitly, all certificates are now accepted automatically.
  - Added option for remembering passphrases for encrypted private keys and client certificates (for SCP, SFTP and FTPS); it is not recommended to use this, because the passphrases are stored in plain text in the KeePass configuration file.
  - Added support for specifying WinSCP raw settings.
  - Updated for KeePass ≥ 2.32.
  - Upgraded to WinSCP 5.7.7.
- 1.11
  - Improved support for paths containing characters that are not in the default console code page.
  - Upgraded to WinSCP 5.7.6.
- 1.10
  - Improved support for paths with subdirectories relative to the initial working directory.
  - Immediate empty response streams are now cached, which avoids several unnecessary network communications.
- 1.9
  - Improved file moving support for paths relative to the initial working directory.
  - Updated for KeePass ≥ 2.27.
  - Upgraded to WinSCP 5.5.5.
- 1.8
  - Added support for the KeePass option 'Use system proxy settings'.
  - Improved accepting of host keys (this reduces the number of required connections per operation by one, resulting in better performance).
  - Improved encoding of proxy parameter values.
  - Upgraded to WinSCP 5.2.1.
- 1.7
  - Added support for using the proxy specified manually in KeePass.
  - Upgraded to WinSCP 5.1.5.
- 1.6
  - Added support for user names and passwords containing special characters.
  - Upgraded to WinSCP 4.3.7.
- 1.5
  - Added workaround for a bug in the `WebRequest.RegisterPrefix` method of .NET 4.0.
- 1.4
  - IOProtocolExt does not generate empty `cd` commands anymore.
  - Improved `open` script command compatibility (parameter without quotes).
  - When KeePass is started with the `-debug` command line parameter, IOProtocolExt now shows all WinSCP scripts before executing them.
  - Upgraded to WinSCP 4.3.6.
- 1.3
  - Added options dialog ('Tools' → 'IOProtocolExt Options').
  - Added custom server response timeout option.
  - Added FTPS options: implicit SSL/TLS, explicit SSL, explicit TLS.
  - Upgraded to WinSCP 4.3.5.
- 1.2
  - Updated for KeePass ≥ 2.16.
- 1.1
  - Maintenance release.
- 1.0
  - Initial release.

### Links

Latest version of IOProtocolExt:
https://keepass.info/plugins.html#ioprotocolext

Support:
https://sourceforge.net/p/keepass/discussion/329221/

Feature requests & bug reports:
https://sourceforge.net/p/keepass/discussion/329220/

Donate:
https://keepass.info/donate.html