Well, changing the interface is possible if needed I think.

On Mon, Sep 12, 2011 at 18:14, Davis Ford <[email protected]> wrote:

> The only issue with throwing IOException is that it is a checked exception,
> and the interface method FileSystemView#getFile(String file) doesn't declare
> it, so I have to change the interface to throw it.
>
> I'll take a look at isReadable, etc., but my code short-circuits the
> process way ahead of that, by just looking at the path the user is
> attempting, and if it is a substring of the directory I want to pin them in,
> then I know they shouldn't be going there, and I throw the exception.
>
> Regards,
> Davis
>
> -----Original Message-----
> From: Guillaume Nodet [mailto:[email protected]]
> Sent: Monday, September 12, 2011 12:10 PM
> To: [email protected]
> Subject: Re: sftp questions
>
> RIght, but most blocks handling specific questions catch IOException and
> sent back a better error code without closing the whole channel:
>
>  case SSH_FXP_xxx: {
>                try {
>  // implementation
>                } catch (IOException e) {
>                    sendStatus(id, SSH_FX_FAILURE, e.getMessage());
>                }
>                break;
>
> So if you throw an IOException it should work.  Also, for reading / writing
> files, you can override isReadable() and isWritable() and sftp will sent
> back error codes like SSH_FX_PERMISSION_DENIED.
>
> On Mon, Sep 12, 2011 at 17:53, Davis Ford <[email protected]> wrote:
>
> > Hi Guillaume, as far as I can tell stepping through the code, the
> exception
> > is swallowed and logged in SftpSubsystem.java lines 372-375:
> >
> > } catch (Throwable t) {
> >            if (!closed && !(t instanceof EOFException)) { // Ignore han
> >                log.error("Exception caught in SFTP subsystem", t);
> >            }
> >        } finally {
> >
> > This is in the public SftpSubsystem#run() method.  The stacktrace is like
> > this, my exception trickles up and is caught in the run() method.
> >
> > SftpSubsystem.run()
> >  SftpSubsystem.process()
> >  FileSystemView.getFile()
> >
> > -----Original Message-----
> > From: Guillaume Nodet [mailto:[email protected]]
> > Sent: Monday, September 12, 2011 11:47 AM
> > To: [email protected]
> > Subject: Re: sftp questions
> >
> > I think the message on the exception is sent back to the user, but
> > currently
> > there's no way to return a different error code than SSH_FX_FAILURE.
> > I suppose we could define an exception containing the error code and use
> it
> > if such an exception is caught.
> >
> > On Mon, Sep 12, 2011 at 17:10, Davis Ford <[email protected]> wrote:
> >
> > > Ok, I figured this out by implementing my own FileSystemView interface,
> > and
> > > related interfaces, and I can detect when a user tries to cd .. up to a
> > > parent dir -- if I detect this, I'm just throwing a RuntimeException
> and
> > the
> > > client just gets an error indicating the SFTP command was not received.
> > >
> > > Technically this works, but it isn't clear to me how to do this
> > gracefully
> > > so they would get some kind of permissions error.
> > >
> > > This is in my own implementation of FileSystemView#getFile(String file)
> > > which returns SshFile.  Is there some way to code this, so the Sftp
> > > subsystem will return some kind of auth or permissions error to the
> > client?
> > >
> > > -----Original Message-----
> > > From: Davis Ford
> > > Sent: Friday, September 09, 2011 3:42 PM
> > > To: '[email protected]'
> > > Subject: RE: sftp questions
> > >
> > > Guillame -- Thanks for the info, appreciate it.  One other quick
> > follow-up
> > > if I may - is there an easy way to pin a client into a specific
> directory
> > > for uploads?
> > >
> > >
> > >
> >
> >
> > --
> > ------------------------
> > Guillaume Nodet
> > ------------------------
> > Blog: http://gnodet.blogspot.com/
> > ------------------------
> > Open Source SOA
> > http://fusesource.com
> >
>
>
>
> --
> ------------------------
> Guillaume Nodet
> ------------------------
> Blog: http://gnodet.blogspot.com/
> ------------------------
> Open Source SOA
> http://fusesource.com
>



-- 
------------------------
Guillaume Nodet
------------------------
Blog: http://gnodet.blogspot.com/
------------------------
Open Source SOA
http://fusesource.com

Reply via email to