RE: SFTP problems
Great! and thanks Date: Mon, 10 May 2010 07:33:45 +0200 Subject: Re: SFTP problems From: gno...@gmail.com To: dev@mina.apache.org I think I've actually fixed the issue. The problem is that in version 3, the reply to SSH_FXP_REALPATH should always send back dummy attributes. On Sun, May 9, 2010 at 16:15, Frank van der Kleij kl...@hotmail.com wrote: I was doing some tests and found a problem on uploading. When doing the upload REALPATH is called on the file that is about to be created, but in writeAttrs there is a check whether the file actually exists and an exception is thrown. When I remove the exception throwing in writeAttrs then all seems to work correctly, so that is the easy solution. I believe that in the specs it says that on REALPATH dummy attributes should be sent so that's an option too. Any preference? Frank PS: this is unrelated, but if getUnixDate would be public I could use it in my subclass... _ Express yourself instantly with MSN Messenger! Download today it's FREE! http://messenger.msn.click-url.com/go/onm00200471ave/direct/01/ -- Cheers, Guillaume Nodet Blog: http://gnodet.blogspot.com/ Open Source SOA http://fusesource.com _ New Windows 7: Simplify what you do everyday. Find the right PC for you. http://windows.microsoft.com/shop
RE: SFTP problems
I was doing some tests and found a problem on uploading. When doing the upload REALPATH is called on the file that is about to be created, but in writeAttrs there is a check whether the file actually exists and an exception is thrown. When I remove the exception throwing in writeAttrs then all seems to work correctly, so that is the easy solution. I believe that in the specs it says that on REALPATH dummy attributes should be sent so that's an option too. Any preference? Frank PS: this is unrelated, but if getUnixDate would be public I could use it in my subclass... _ Express yourself instantly with MSN Messenger! Download today it's FREE! http://messenger.msn.click-url.com/go/onm00200471ave/direct/01/
Re: SFTP problems
If you look at sshd-core/src/docs/draf-ietf-secsh-filexfer-13.txt, the SSH_FXP_REALPATH can include a control byte, and the default value is SSH_FXP_REALPATH_NO_CHECK which means that the call must not fail. I guess we should check this flag correctly and default to the right behavior (which would not throw the exception in writeAttrs). Would you write a patch for that ? I'll be travelling tomorrow but i would try to review and apply tomorrow evening. On Sun, May 9, 2010 at 16:15, Frank van der Kleij kl...@hotmail.com wrote: I was doing some tests and found a problem on uploading. When doing the upload REALPATH is called on the file that is about to be created, but in writeAttrs there is a check whether the file actually exists and an exception is thrown. When I remove the exception throwing in writeAttrs then all seems to work correctly, so that is the easy solution. I believe that in the specs it says that on REALPATH dummy attributes should be sent so that's an option too. Any preference? Frank PS: this is unrelated, but if getUnixDate would be public I could use it in my subclass... _ Express yourself instantly with MSN Messenger! Download today it's FREE! http://messenger.msn.click-url.com/go/onm00200471ave/direct/01/ -- Cheers, Guillaume Nodet Blog: http://gnodet.blogspot.com/ Open Source SOA http://fusesource.com
Re: SFTP problems
I think I've actually fixed the issue. The problem is that in version 3, the reply to SSH_FXP_REALPATH should always send back dummy attributes. On Sun, May 9, 2010 at 16:15, Frank van der Kleij kl...@hotmail.com wrote: I was doing some tests and found a problem on uploading. When doing the upload REALPATH is called on the file that is about to be created, but in writeAttrs there is a check whether the file actually exists and an exception is thrown. When I remove the exception throwing in writeAttrs then all seems to work correctly, so that is the easy solution. I believe that in the specs it says that on REALPATH dummy attributes should be sent so that's an option too. Any preference? Frank PS: this is unrelated, but if getUnixDate would be public I could use it in my subclass... _ Express yourself instantly with MSN Messenger! Download today it's FREE! http://messenger.msn.click-url.com/go/onm00200471ave/direct/01/ -- Cheers, Guillaume Nodet Blog: http://gnodet.blogspot.com/ Open Source SOA http://fusesource.com
Re: SFTP problems
I've made a few other fixes (including SSHD-86) which helps a lot. Please have a look and i'll cut a release tonight or tomorrow. On Wed, May 5, 2010 at 21:18, Guillaume Nodet gno...@gmail.com wrote: Thanks for the pointer. The SFTP subsystem is now using that code. Any more issues ? On Wed, May 5, 2010 at 18:43, Sai Pullabhotla sai.pullabho...@jmethods.com wrote: Okay, I see the fix for the dates, but they are still incorrect when the client interprets its. Couple of things - I believe time should be on a 24 hour clock basis - so the format need to be changed to HH instead of hh. The listing is not compatible with UNIX style listing. So files older than 6 months should show the year, but not the time. Files in the last 6 months should show time, but not year. Unless SFTP has a standard for the directory list format. In essence, FileZilla shows a file that is modified in year 2006 as 2010. There is some code in the FtpServer project that we may want to steal. It is org.apache.ftpserver.util.DateUtils.getUnixDate(long). Regards, Sai Pullabhotla On Wed, May 5, 2010 at 11:15 AM, Guillaume Nodet gno...@gmail.com wrote: Which dates ? I've fixed the Jan 01 ... thing if that's why you're referring to. But using filezilla, there are still things that we don't support, but i've been able to download directories recursively without problems. On Wed, May 5, 2010 at 17:49, Sai Pullabhotla sai.pullabho...@jmethods.comwrote: How about the dates on the files? Regards, Sai Pullabhotla On Wed, May 5, 2010 at 10:13 AM, Guillaume Nodet gno...@gmail.com wrote: Fixed, let me know if you find any other easily fixed issues. On Wed, May 5, 2010 at 16:41, Sai Pullabhotla sai.pullabho...@jmethods.comwrote: I just noticed that the code checked in just replaces \ with /. I think for best compliance on all operating systems and file systems, it should replace File.separatorChar with /. Not sure if there are any file systems that use a separator other than / and \. Regards, Sai Pullabhotla On Wed, May 5, 2010 at 9:22 AM, Guillaume Nodet gno...@gmail.com wrote: I've committed the changes. Could you give a try ? On Wed, May 5, 2010 at 16:20, Guillaume Nodet gno...@gmail.com wrote: Removing the second string works with FileZilla but fails with the sftp command line utility. On Wed, May 5, 2010 at 16:13, Guillaume Nodet gno...@gmail.com wrote: Yeah, that's what I'm trying. Let me try with removing the double name though. On Wed, May 5, 2010 at 15:50, Sai Pullabhotla sai.pullabho...@jmethods.com wrote: How about something like this: protected void sendAbsoluteName(int id, File file) throws IOException { Buffer buffer = new Buffer(); buffer.putByte((byte) SSH_FXP_NAME); buffer.putInt(id); buffer.putInt(1); String path = file.getPath(); if(File.separatorChar != '/') { path = path.replace(File.separatorChar, '/'); } if(path.charAt(0) != '/') { path = '/' + path; } buffer.putString(path); //buffer.putString(file.getPath()); writeAttrs(buffer, file); send(buffer); } Regards, Sai Pullabhotla On Wed, May 5, 2010 at 8:45 AM, Sai Pullabhotla sai.pullabho...@jmethods.com wrote: I removed the second call to place the path in the buffer and seems to be working fine. Regards, Sai Pullabhotla -- Cheers, Guillaume Nodet Blog: http://gnodet.blogspot.com/ Open Source SOA http://fusesource.com -- Cheers, Guillaume Nodet Blog: http://gnodet.blogspot.com/ Open Source SOA http://fusesource.com -- Cheers, Guillaume Nodet Blog: http://gnodet.blogspot.com/ Open Source SOA http://fusesource.com -- Cheers, Guillaume Nodet Blog: http://gnodet.blogspot.com/ Open Source SOA http://fusesource.com -- Cheers, Guillaume Nodet Blog: http://gnodet.blogspot.com/ Open Source SOA http://fusesource.com -- Cheers, Guillaume Nodet Blog: http://gnodet.blogspot.com/ Open Source SOA http://fusesource.com -- Cheers, Guillaume Nodet Blog: http://gnodet.blogspot.com/ Open Source SOA http://fusesource.com
RE: SFTP problems
I'm testing on Windows in a non-root directory and the folder navigation works but I have errors in the log because of this: line 790: f = new File(normalizedPath); if (f.getName().length() == 0) { f = new File(f, .); } It causes errors in writeAttrs because the file doesn't really exist in the normalized path (it is relative to the root). I am not sure if it is necessary to reassign f, but if you need it you should do resolveFile(f) to resolve it relative to the root. Probably even . should be resolved relative to the root. Frank _ New Windows 7: Find the right PC for you. Learn more. http://windows.microsoft.com/shop
Re: SFTP problems
Well, the problem i had was when resolving the root dir, i could end with an empty file name, which would cause parsing errors in filezilla when sending the getLongFileName(). We need to always return a name, but maybe there's a better way. On Thu, May 6, 2010 at 13:58, Frank van der Kleij kl...@hotmail.com wrote: I'm testing on Windows in a non-root directory and the folder navigation works but I have errors in the log because of this: line 790: f = new File(normalizedPath); if (f.getName().length() == 0) { f = new File(f, .); } It causes errors in writeAttrs because the file doesn't really exist in the normalized path (it is relative to the root). I am not sure if it is necessary to reassign f, but if you need it you should do resolveFile(f) to resolve it relative to the root. Probably even . should be resolved relative to the root. Frank _ New Windows 7: Find the right PC for you. Learn more. http://windows.microsoft.com/shop -- Cheers, Guillaume Nodet Blog: http://gnodet.blogspot.com/ Open Source SOA http://fusesource.com
Re: SFTP problems
I've setup the root directory for the SFTP subsystem to be C:\. The login, and cd'ing, listing to subdirectories is working fine. But, I cannot cd to C:\ again using cd ... So if my working directory is /dev, doing a cd .. should put me back in / (whose real path is C:\). But the directory is unchanged. The cd .. works well for directories that are deeper than one level. In other words, if my current dir is /dev/apis and doing a cd .. puts me back in /dev. Also, should the Default SSH server setup the SFTP subsystem as well? Regards, Sai Pullabhotla On Thu, May 6, 2010 at 4:54 AM, Guillaume Nodet gno...@gmail.com wrote: I've made a few other fixes (including SSHD-86) which helps a lot. Please have a look and i'll cut a release tonight or tomorrow. On Wed, May 5, 2010 at 21:18, Guillaume Nodet gno...@gmail.com wrote: Thanks for the pointer. The SFTP subsystem is now using that code. Any more issues ? On Wed, May 5, 2010 at 18:43, Sai Pullabhotla sai.pullabho...@jmethods.com wrote: Okay, I see the fix for the dates, but they are still incorrect when the client interprets its. Couple of things - I believe time should be on a 24 hour clock basis - so the format need to be changed to HH instead of hh. The listing is not compatible with UNIX style listing. So files older than 6 months should show the year, but not the time. Files in the last 6 months should show time, but not year. Unless SFTP has a standard for the directory list format. In essence, FileZilla shows a file that is modified in year 2006 as 2010. There is some code in the FtpServer project that we may want to steal. It is org.apache.ftpserver.util.DateUtils.getUnixDate(long). Regards, Sai Pullabhotla On Wed, May 5, 2010 at 11:15 AM, Guillaume Nodet gno...@gmail.com wrote: Which dates ? I've fixed the Jan 01 ... thing if that's why you're referring to. But using filezilla, there are still things that we don't support, but i've been able to download directories recursively without problems. On Wed, May 5, 2010 at 17:49, Sai Pullabhotla sai.pullabho...@jmethods.comwrote: How about the dates on the files? Regards, Sai Pullabhotla On Wed, May 5, 2010 at 10:13 AM, Guillaume Nodet gno...@gmail.com wrote: Fixed, let me know if you find any other easily fixed issues. On Wed, May 5, 2010 at 16:41, Sai Pullabhotla sai.pullabho...@jmethods.comwrote: I just noticed that the code checked in just replaces \ with /. I think for best compliance on all operating systems and file systems, it should replace File.separatorChar with /. Not sure if there are any file systems that use a separator other than / and \. Regards, Sai Pullabhotla On Wed, May 5, 2010 at 9:22 AM, Guillaume Nodet gno...@gmail.com wrote: I've committed the changes. Could you give a try ? On Wed, May 5, 2010 at 16:20, Guillaume Nodet gno...@gmail.com wrote: Removing the second string works with FileZilla but fails with the sftp command line utility. On Wed, May 5, 2010 at 16:13, Guillaume Nodet gno...@gmail.com wrote: Yeah, that's what I'm trying. Let me try with removing the double name though. On Wed, May 5, 2010 at 15:50, Sai Pullabhotla sai.pullabho...@jmethods.com wrote: How about something like this: protected void sendAbsoluteName(int id, File file) throws IOException { Buffer buffer = new Buffer(); buffer.putByte((byte) SSH_FXP_NAME); buffer.putInt(id); buffer.putInt(1); String path = file.getPath(); if(File.separatorChar != '/') { path = path.replace(File.separatorChar, '/'); } if(path.charAt(0) != '/') { path = '/' + path; } buffer.putString(path); //buffer.putString(file.getPath()); writeAttrs(buffer, file); send(buffer); } Regards, Sai Pullabhotla On Wed, May 5, 2010 at 8:45 AM, Sai Pullabhotla sai.pullabho...@jmethods.com wrote: I removed the second call to place the path in the buffer and seems to be working fine. Regards, Sai Pullabhotla -- Cheers, Guillaume Nodet Blog: http://gnodet.blogspot.com/ Open Source SOA http://fusesource.com -- Cheers, Guillaume Nodet Blog: http://gnodet.blogspot.com/ Open Source SOA http://fusesource.com -- Cheers, Guillaume Nodet Blog: http://gnodet.blogspot.com/ Open Source SOA http://fusesource.com -- Cheers, Guillaume Nodet
Re: SFTP problems
Wanna give it another try ? About adding the SFTP subsystem by default, I have no real opinion. I'm just not sure if people would be willing to give access to the file system by default. On Thu, May 6, 2010 at 15:03, Sai Pullabhotla sai.pullabho...@jmethods.comwrote: I've setup the root directory for the SFTP subsystem to be C:\. The login, and cd'ing, listing to subdirectories is working fine. But, I cannot cd to C:\ again using cd ... So if my working directory is /dev, doing a cd .. should put me back in / (whose real path is C:\). But the directory is unchanged. The cd .. works well for directories that are deeper than one level. In other words, if my current dir is /dev/apis and doing a cd .. puts me back in /dev. Also, should the Default SSH server setup the SFTP subsystem as well? Regards, Sai Pullabhotla On Thu, May 6, 2010 at 4:54 AM, Guillaume Nodet gno...@gmail.com wrote: I've made a few other fixes (including SSHD-86) which helps a lot. Please have a look and i'll cut a release tonight or tomorrow. On Wed, May 5, 2010 at 21:18, Guillaume Nodet gno...@gmail.com wrote: Thanks for the pointer. The SFTP subsystem is now using that code. Any more issues ? On Wed, May 5, 2010 at 18:43, Sai Pullabhotla sai.pullabho...@jmethods.com wrote: Okay, I see the fix for the dates, but they are still incorrect when the client interprets its. Couple of things - I believe time should be on a 24 hour clock basis - so the format need to be changed to HH instead of hh. The listing is not compatible with UNIX style listing. So files older than 6 months should show the year, but not the time. Files in the last 6 months should show time, but not year. Unless SFTP has a standard for the directory list format. In essence, FileZilla shows a file that is modified in year 2006 as 2010. There is some code in the FtpServer project that we may want to steal. It is org.apache.ftpserver.util.DateUtils.getUnixDate(long). Regards, Sai Pullabhotla On Wed, May 5, 2010 at 11:15 AM, Guillaume Nodet gno...@gmail.com wrote: Which dates ? I've fixed the Jan 01 ... thing if that's why you're referring to. But using filezilla, there are still things that we don't support, but i've been able to download directories recursively without problems. On Wed, May 5, 2010 at 17:49, Sai Pullabhotla sai.pullabho...@jmethods.comwrote: How about the dates on the files? Regards, Sai Pullabhotla On Wed, May 5, 2010 at 10:13 AM, Guillaume Nodet gno...@gmail.com wrote: Fixed, let me know if you find any other easily fixed issues. On Wed, May 5, 2010 at 16:41, Sai Pullabhotla sai.pullabho...@jmethods.comwrote: I just noticed that the code checked in just replaces \ with /. I think for best compliance on all operating systems and file systems, it should replace File.separatorChar with /. Not sure if there are any file systems that use a separator other than / and \. Regards, Sai Pullabhotla On Wed, May 5, 2010 at 9:22 AM, Guillaume Nodet gno...@gmail.com wrote: I've committed the changes. Could you give a try ? On Wed, May 5, 2010 at 16:20, Guillaume Nodet gno...@gmail.com wrote: Removing the second string works with FileZilla but fails with the sftp command line utility. On Wed, May 5, 2010 at 16:13, Guillaume Nodet gno...@gmail.com wrote: Yeah, that's what I'm trying. Let me try with removing the double name though. On Wed, May 5, 2010 at 15:50, Sai Pullabhotla sai.pullabho...@jmethods.com wrote: How about something like this: protected void sendAbsoluteName(int id, File file) throws IOException { Buffer buffer = new Buffer(); buffer.putByte((byte) SSH_FXP_NAME); buffer.putInt(id); buffer.putInt(1); String path = file.getPath(); if(File.separatorChar != '/') { path = path.replace(File.separatorChar, '/'); } if(path.charAt(0) != '/') { path = '/' + path; } buffer.putString(path); //buffer.putString(file.getPath()); writeAttrs(buffer, file); send(buffer); } Regards, Sai Pullabhotla On Wed, May 5, 2010 at 8:45 AM, Sai Pullabhotla sai.pullabho...@jmethods.com wrote: I removed the second call to place the path in the buffer and seems to be working fine. Regards, Sai Pullabhotla -- Cheers, Guillaume Nodet Blog: http://gnodet.blogspot.com/ Open Source SOA http://fusesource.com
RE: SFTP problems
Hi Guillaume, I still have the FileNotFoundException when I start in e.g. d:\temp with f = new File(normalizedPath); For me it works only with f = resolveFile(normalizedPath); What are your settings? Do you start in '/' on Mac? Regards _ New Windows 7: Find the right PC for you. Learn more. http://windows.microsoft.com/shop
Re: SFTP problems
Sorry, i missed that call. Last try ? On Thu, May 6, 2010 at 17:39, Frank van der Kleij kl...@hotmail.com wrote: Hi Guillaume, I still have the FileNotFoundException when I start in e.g. d:\temp with f = new File(normalizedPath); For me it works only with f = resolveFile(normalizedPath); What are your settings? Do you start in '/' on Mac? Regards _ New Windows 7: Find the right PC for you. Learn more. http://windows.microsoft.com/shop -- Cheers, Guillaume Nodet Blog: http://gnodet.blogspot.com/ Open Source SOA http://fusesource.com