You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by im...@apache.org on 2005/10/14 19:59:56 UTC
svn commit: r321163 - in /jakarta/commons/proper/vfs/trunk: ./
src/java/org/apache/commons/vfs/
src/java/org/apache/commons/vfs/provider/ftp/
src/java/org/apache/commons/vfs/provider/sftp/
Author: imario
Date: Fri Oct 14 10:59:47 2005
New Revision: 321163
URL: http://svn.apache.org/viewcvs?rev=321163&view=rev
Log:
sftp: add filesystem option: setUserDirIsRoot
Modified:
jakarta/commons/proper/vfs/trunk/RELEASE_NOTES.txt
jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/Resources.properties
jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/ftp/FtpClientFactory.java
jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/sftp/SftpFileObject.java
jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/sftp/SftpFileSystem.java
jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/sftp/SftpFileSystemConfigBuilder.java
Modified: jakarta/commons/proper/vfs/trunk/RELEASE_NOTES.txt
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/vfs/trunk/RELEASE_NOTES.txt?rev=321163&r1=321162&r2=321163&view=diff
==============================================================================
--- jakarta/commons/proper/vfs/trunk/RELEASE_NOTES.txt (original)
+++ jakarta/commons/proper/vfs/trunk/RELEASE_NOTES.txt Fri Oct 14 10:59:47 2005
@@ -5,6 +5,7 @@
sftp:
stip off link file names, though still no link-support for sftp.
+added filesystem option: setUserDirIsRoot
2005-09-26 commons-vfs 1.0 RC4
Modified: jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/Resources.properties
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/Resources.properties?rev=321163&r1=321162&r2=321163&view=diff
==============================================================================
--- jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/Resources.properties (original)
+++ jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/Resources.properties Fri Oct 14 10:59:47 2005
@@ -216,6 +216,7 @@
# SFTP Provider
vfs.provider.sftp/connect.error=Could not connect to SFTP server at "{0}".
+vfs.provider.sftp/change-work-directory.error=Could not change to work directory "{0}".
vfs.provider.sftp/unknown-permissions.error=File permissions not fetched.
vfs.provider.sftp/unknown-size.error=File size not fetched.
vfs.provider.sftp/create-folder.error=Folder creation failed with unknown error.
Modified: jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/ftp/FtpClientFactory.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/ftp/FtpClientFactory.java?rev=321163&r1=321162&r2=321163&view=diff
==============================================================================
--- jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/ftp/FtpClientFactory.java (original)
+++ jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/ftp/FtpClientFactory.java Fri Oct 14 10:59:47 2005
@@ -100,7 +100,7 @@
{
if (!client.changeWorkingDirectory(workingDirectory))
{
- throw new FileSystemException("vfs.provider.ftp/change-work-directory.error", "/");
+ throw new FileSystemException("vfs.provider.ftp/change-work-directory.error", workingDirectory);
}
}
Modified: jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/sftp/SftpFileObject.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/sftp/SftpFileObject.java?rev=321163&r1=321162&r2=321163&view=diff
==============================================================================
--- jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/sftp/SftpFileObject.java (original)
+++ jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/sftp/SftpFileObject.java Fri Oct 14 10:59:47 2005
@@ -50,12 +50,14 @@
{
private final SftpFileSystem fileSystem;
private SftpATTRS attrs;
+ private final String relPath;
protected SftpFileObject(final FileName name,
- final SftpFileSystem fileSystem)
+ final SftpFileSystem fileSystem) throws FileSystemException
{
super(name, fileSystem);
this.fileSystem = fileSystem;
+ relPath = UriParser.decode(fileSystem.getRootName().getRelativeName(name));
}
/**
@@ -104,7 +106,7 @@
final ChannelSftp channel = fileSystem.getChannel();
try
{
- attrs = channel.stat(getName().getPathDecoded());
+ attrs = channel.stat(relPath);
}
catch (final SftpException e)
{
@@ -132,7 +134,7 @@
final ChannelSftp channel = fileSystem.getChannel();
try
{
- channel.mkdir(getName().getPathDecoded());
+ channel.mkdir(relPath);
}
finally
{
@@ -167,7 +169,7 @@
int newMTime = (int) (modtime / 1000L);
attrs.setACMODTIME(attrs.getATime(), newMTime);
- channel.setStat(getName().getPathDecoded(), attrs);
+ channel.setStat(relPath, attrs);
}
finally
{
@@ -186,11 +188,11 @@
{
if (getType() == FileType.FILE)
{
- channel.rm(getName().getPathDecoded());
+ channel.rm(relPath);
}
else
{
- channel.rmdir(getName().getPathDecoded());
+ channel.rmdir(relPath);
}
}
finally
@@ -207,7 +209,7 @@
final ChannelSftp channel = fileSystem.getChannel();
try
{
- channel.rename(getName().getPathDecoded(), newfile.getName().getPathDecoded());
+ channel.rename(relPath, ((SftpFileObject) newfile).relPath);
}
finally
{
@@ -226,7 +228,7 @@
final ChannelSftp channel = fileSystem.getChannel();
try
{
- vector = channel.ls(getName().getPathDecoded());
+ vector = channel.ls(relPath);
}
finally
{
@@ -358,7 +360,7 @@
// TODO - Don't read the entire file into memory. Use the
// stream-based methods on ChannelSftp once they work properly
final ByteArrayOutputStream outstr = new ByteArrayOutputStream();
- channel.get(getName().getPathDecoded(), outstr);
+ channel.get(relPath, outstr);
outstr.close();
return new ByteArrayInputStream(outstr.toByteArray());
@@ -406,7 +408,7 @@
{
final ByteArrayOutputStream outstr = (ByteArrayOutputStream) out;
channel.put(new ByteArrayInputStream(outstr.toByteArray()),
- getName().getPathDecoded());
+ relPath);
}
catch (final SftpException e)
{
Modified: jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/sftp/SftpFileSystem.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/sftp/SftpFileSystem.java?rev=321163&r1=321162&r2=321163&view=diff
==============================================================================
--- jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/sftp/SftpFileSystem.java (original)
+++ jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/sftp/SftpFileSystem.java Fri Oct 14 10:59:47 2005
@@ -18,6 +18,7 @@
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
+import com.jcraft.jsch.SftpException;
import org.apache.commons.vfs.FileName;
import org.apache.commons.vfs.FileObject;
import org.apache.commons.vfs.FileSystem;
@@ -108,6 +109,20 @@
{
channel = (ChannelSftp) session.openChannel("sftp");
channel.connect();
+
+ Boolean userDirIsRoot = SftpFileSystemConfigBuilder.getInstance().getUserDirIsRoot(getFileSystemOptions());
+ String workingDirectory = getRootName().getPath();
+ if (workingDirectory != null && (userDirIsRoot == null || !userDirIsRoot.booleanValue()))
+ {
+ try
+ {
+ channel.cd(workingDirectory);
+ }
+ catch (SftpException e)
+ {
+ throw new FileSystemException("vfs.provider.sftp/change-work-directory.error", workingDirectory);
+ }
+ }
}
return channel;
Modified: jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/sftp/SftpFileSystemConfigBuilder.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/sftp/SftpFileSystemConfigBuilder.java?rev=321163&r1=321162&r2=321163&view=diff
==============================================================================
--- jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/sftp/SftpFileSystemConfigBuilder.java (original)
+++ jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/sftp/SftpFileSystemConfigBuilder.java Fri Oct 14 10:59:47 2005
@@ -16,6 +16,7 @@
package org.apache.commons.vfs.provider.sftp;
import com.jcraft.jsch.UserInfo;
+import org.apache.commons.net.ftp.parser.FTPFileEntryParserFactory;
import org.apache.commons.vfs.FileSystemConfigBuilder;
import org.apache.commons.vfs.FileSystemException;
import org.apache.commons.vfs.FileSystemOptions;
@@ -32,6 +33,8 @@
{
private final static SftpFileSystemConfigBuilder builder = new SftpFileSystemConfigBuilder();
+ private final static String USER_DIR_IS_ROOT = FTPFileEntryParserFactory.class.getName() + ".USER_DIR_IS_ROOT";
+
public static SftpFileSystemConfigBuilder getInstance()
{
return builder;
@@ -158,6 +161,27 @@
public String getStrictHostKeyChecking(FileSystemOptions opts)
{
return (String) getParam(opts, "StrictHostKeyChecking");
+ }
+
+ /**
+ * use user directory as root (do not change to fs root)
+ *
+ * @param opts
+ * @param userDirIsRoot
+ */
+ public void setUserDirIsRoot(FileSystemOptions opts, boolean userDirIsRoot)
+ {
+ setParam(opts, USER_DIR_IS_ROOT, userDirIsRoot ? Boolean.TRUE : Boolean.FALSE);
+ }
+
+ /**
+ * @param opts
+ * @return
+ * @see #setUserDirIsRoot
+ */
+ public Boolean getUserDirIsRoot(FileSystemOptions opts)
+ {
+ return (Boolean) getParam(opts, USER_DIR_IS_ROOT);
}
protected Class getConfigClass()
---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org