Goldstein Lyor created SSHD-444:
-----------------------------------
Summary: Handle correctly inaccessible paths in Scp and Sftp
subsystems
Key: SSHD-444
URL: https://issues.apache.org/jira/browse/SSHD-444
Project: MINA SSHD
Issue Type: Bug
Affects Versions: 1.0.0
Reporter: Goldstein Lyor
Turns out that just asking _Files.exists(...)_ is not enough - according to the
[Java tutorial on checking if a file or directory
exists|http://docs.oracle.com/javase/tutorial/essential/io/check.html]:
{panel}
The methods in the _Path_ class are syntactic, meaning that they operate on the
_Path_ instance. But eventually you must access the file system to verify that
a particular _Path_ exists, or does not exist. You can do so with the
_exists(Path, LinkOption...)_ and the _notExists(Path, LinkOption...)_ methods.
*Note* that _!Files.exists(path)_ is *not( equivalent to
_Files.notExists(path)_. When you are testing a file's existence, three results
are possible:
- The file is verified to exist.
- The file is verified to not exist.
- The file's status is unknown. This result can occur when the program does not
have access to the file.
If *both* _exists_ and *notExists* return false, the existence of the file
cannot be verified.
{panel}
I have therefore implemented _IOUtils#checkFileExistence_ method that serves as
a *central* method for such checks, and then added the relevant logic in
SCP/SFTP. *Note*: specifically for SFTP, whenever the existence cannot be
determined (i.e., _null_ is returned) the _unsupportedAttributePolicy_ is
consulted. The default behavior is geared towards being *lenient* - i.e.,
provide as much information as possible even for inaccessible files (e.g.,
their name and permissions) knowing that if the client tries to
read/write/delete them it will be blocked anyway.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)