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)

Reply via email to