Will have to investigate (this will take time). Since you say you have unit tests the reproduce the problem, you can debug the code and see exactly why it happens. I recommend you do it with the source code for 1.2 which is the latest one. Once you find the problem, please re-open SSHD-601 and attache the patch...
> Date: Mon, 11 Apr 2016 09:20:15 -0700 > Subject: Re: VirtualFileSystem able to mkdir and chdir to non rooted directory > From: a...@linkedin.com.INVALID > To: dev@mina.apache.org > > Thanks Elijah, I should have stated that I'm using version 1.1.0 on El > Capitan v 10.11.3: > > $ md5 sshd-core-1.1.0.jar > MD5 (sshd-core-1.1.0.jar) = 6e94f5cd80de88ddaaa80bb2ff3fa793 > > I've written some unit tests (that's how I discovered the issue) on our end > here to check to see that an InvalidPathException is thrown using the code > above (it can be cleaned up, but is mostly the same). > > Maybe my version is out of date or there is still an issue? > > On Sat, Apr 9, 2016 at 12:45 AM, elijah baley <e_ba...@outlook.com> wrote: > > > This has been fixed in version 1.1 and up via SSHD-605 > > > > > Date: Fri, 8 Apr 2016 15:48:10 -0700 > > > Subject: VirtualFileSystem able to mkdir and chdir to non rooted > > directory > > > From: a...@linkedin.com.INVALID > > > To: dev@mina.apache.org > > > > > > Hi SSHD team, > > > > > > Not sure if this is a bug or not, but when I instantiate a new FileSystem > > > using the VirtualFileSystemFactory and RootedFileSystemProvider, as a > > user > > > on the box, I am able to mkdir and get/put files in parent (i.e. > > > non-subpath) paths of the supposed "root" if I do something like > > > > > > sftp> pwd > > > Remote working directory: / > > > > > > $ put ../thisismyfile > > > > > > It seems like the resolveLocalPath which is supposed to throw an > > > InvalidPathException if the path is not a proper subpath of the rooted > > file > > > system needs to normalize the path in addition to doing it's nullity > > > checks. I was able to prevent this behavior by doing something like > > this, > > > but not sure if this is the best approach. > > > > > > Any guidance/explanation would be appreciated. Thanks. > > > > > > public class FixedRootedFileSystemProvider extends > > RootedFileSystemProvider { > > > > > > private static final Logger LOG = > > > LoggerFactory.getLogger(FixedRootedFileSystemProvider.class); > > > > > > public FixedRootedFileSystemProvider() { super(); } > > > > > > @Override > > > protected Path resolveLocalPath(RootedPath path) { > > > Path resolvedLocalPath = super.resolveLocalPath(path); > > > return validateParent(path, resolvedLocalPath); > > > } > > > > > > private Path validateParent(RootedPath path, Path localPath) throws > > > InvalidPathException { > > > RootedFileSystem rfs = path.getFileSystem(); > > > Path root = rfs.getRoot(); > > > > > > if > > (!localPath.toAbsolutePath().normalize().startsWith(root.toAbsolutePath().normalize())) > > > { //i.e. is not a REAL subpath > > > LOG.info("{} is not a subpath of the root FS path " + > > > root.toAbsolutePath().normalize(), > > > localPath.toAbsolutePath().normalize()); > > > throw new InvalidPathException(localPath.toString(), "Invalid > > path"); > > > } > > > return localPath; > > > } > > > } > > > >