From fcaf58a2911277cff6d8cf215a9daf8450b8b471 Mon Sep 17 00:00:00 2001 From: Greg Watson Date: Thu, 25 Sep 2014 20:00:30 -0400 Subject: [PATCH] Use authority section when converting a UNC path to a URI so that the connection name is correctly escaped. Attempt to open connection before performing any EFS operations. Change-Id: I1f60b70873e411ba37a2115072df09828fdf4c27 Signed-off-by: Greg Watson --- .../remote/core/RemoteServicesUtils.java | 2 +- .../internal/jsch/core/JschFileStore.java | 35 ++++++++++--------- 2 files changed, 20 insertions(+), 17 deletions(-) diff --git a/bundles/org.eclipse.remote.core/src/org/eclipse/remote/core/RemoteServicesUtils.java b/bundles/org.eclipse.remote.core/src/org/eclipse/remote/core/RemoteServicesUtils.java index d441997cd61..fd92c6ac083 100644 --- a/bundles/org.eclipse.remote.core/src/org/eclipse/remote/core/RemoteServicesUtils.java +++ b/bundles/org.eclipse.remote.core/src/org/eclipse/remote/core/RemoteServicesUtils.java @@ -143,7 +143,7 @@ public class RemoteServicesUtils { String scheme = conn.getRemoteServices().getScheme(); String filePath = path.removeFirstSegments(1).makeAbsolute().toString(); try { - return new URI(scheme, connName, filePath, null); + return new URI(scheme, connName, filePath, null, null); } catch (URISyntaxException e) { // Ignore } diff --git a/bundles/org.eclipse.remote.jsch.core/src/org/eclipse/remote/internal/jsch/core/JschFileStore.java b/bundles/org.eclipse.remote.jsch.core/src/org/eclipse/remote/internal/jsch/core/JschFileStore.java index d7af7c41e2f..d7b6f4e248f 100644 --- a/bundles/org.eclipse.remote.jsch.core/src/org/eclipse/remote/internal/jsch/core/JschFileStore.java +++ b/bundles/org.eclipse.remote.jsch.core/src/org/eclipse/remote/internal/jsch/core/JschFileStore.java @@ -72,7 +72,7 @@ public class JschFileStore extends FileStore { fRemotePath = new Path(uri.getPath()); } - private JSchConnection checkConnection() throws RemoteConnectionException { + private JSchConnection checkConnection(IProgressMonitor monitor) throws RemoteConnectionException { IRemoteServices services = RemoteServices.getRemoteServices(fURI); assert (services instanceof JSchServices); if (services == null) { @@ -85,7 +85,10 @@ public class JschFileStore extends FileStore { throw new RemoteConnectionException(NLS.bind(Messages.JschFileStore_Invalid_connection_for_URI, fURI)); } if (!connection.isOpen()) { - throw new RemoteConnectionException(Messages.JschFileStore_Connection_is_not_open); + connection.open(monitor); + if (!connection.isOpen()) { + throw new RemoteConnectionException(Messages.JschFileStore_Connection_is_not_open); + } } return (JSchConnection) connection; } @@ -98,10 +101,10 @@ public class JschFileStore extends FileStore { */ @Override public IFileInfo[] childInfos(int options, IProgressMonitor monitor) throws CoreException { - JSchConnection connection = checkConnection(); SubMonitor subMon = SubMonitor.convert(monitor, 10); + JSchConnection connection = checkConnection(subMon.newChild(1)); ChildInfosCommand command = new ChildInfosCommand(connection, fRemotePath); - return command.getResult(subMon.newChild(10)); + return command.getResult(subMon.newChild(9)); } /* @@ -129,9 +132,9 @@ public class JschFileStore extends FileStore { */ @Override public void delete(int options, IProgressMonitor monitor) throws CoreException { - JSchConnection connection = checkConnection(); SubMonitor subMon = SubMonitor.convert(monitor, 20); - IFileInfo info = fetchInfo(EFS.NONE, subMon.newChild(10)); + JSchConnection connection = checkConnection(subMon.newChild(1)); + IFileInfo info = fetchInfo(EFS.NONE, subMon.newChild(9)); if (!subMon.isCanceled() && info.exists()) { DeleteCommand command = new DeleteCommand(connection, fRemotePath); command.getResult(subMon.newChild(10)); @@ -146,10 +149,10 @@ public class JschFileStore extends FileStore { */ @Override public IFileInfo fetchInfo(int options, IProgressMonitor monitor) throws CoreException { - JSchConnection connection = checkConnection(); SubMonitor subMon = SubMonitor.convert(monitor, 10); + JSchConnection connection = checkConnection(subMon.newChild(1)); FetchInfoCommand command = new FetchInfoCommand(connection, fRemotePath); - return command.getResult(subMon.newChild(10)); + return command.getResult(subMon.newChild(9)); } /* @@ -213,12 +216,12 @@ public class JschFileStore extends FileStore { */ @Override public IFileStore mkdir(int options, IProgressMonitor monitor) throws CoreException { - JSchConnection connection = checkConnection(); SubMonitor subMon = SubMonitor.convert(monitor, 20); + JSchConnection connection = checkConnection(subMon.newChild(1)); if ((options & EFS.SHALLOW) == EFS.SHALLOW) { IFileStore parent = getParent(); - if (parent != null && !parent.fetchInfo(EFS.NONE, subMon.newChild(10)).exists()) { + if (parent != null && !parent.fetchInfo(EFS.NONE, subMon.newChild(9)).exists()) { throw new CoreException(new Status(IStatus.ERROR, Activator.getUniqueIdentifier(), EFS.ERROR_WRITE, NLS.bind( Messages.JschFileStore_The_parent_of_directory_does_not_exist, fRemotePath.toString()), null)); } @@ -261,9 +264,9 @@ public class JschFileStore extends FileStore { */ @Override public InputStream openInputStream(int options, IProgressMonitor monitor) throws CoreException { - JSchConnection connection = checkConnection(); SubMonitor subMon = SubMonitor.convert(monitor, 30); - IFileInfo info = fetchInfo(EFS.NONE, subMon.newChild(10)); + JSchConnection connection = checkConnection(subMon.newChild(1)); + IFileInfo info = fetchInfo(EFS.NONE, subMon.newChild(9)); if (!subMon.isCanceled()) { if (!info.exists()) { throw new CoreException(new Status(IStatus.ERROR, Activator.getUniqueIdentifier(), EFS.ERROR_READ, NLS.bind( @@ -287,9 +290,9 @@ public class JschFileStore extends FileStore { */ @Override public OutputStream openOutputStream(int options, IProgressMonitor monitor) throws CoreException { - JSchConnection connection = checkConnection(); SubMonitor subMon = SubMonitor.convert(monitor, 30); - IFileInfo info = fetchInfo(EFS.NONE, subMon.newChild(10)); + JSchConnection connection = checkConnection(subMon.newChild(1)); + IFileInfo info = fetchInfo(EFS.NONE, subMon.newChild(9)); if (!subMon.isCanceled()) { if (info.isDirectory()) { throw new CoreException(new Status(IStatus.ERROR, Activator.getUniqueIdentifier(), EFS.ERROR_WRONG_TYPE, NLS.bind( @@ -310,10 +313,10 @@ public class JschFileStore extends FileStore { */ @Override public void putInfo(IFileInfo info, int options, IProgressMonitor monitor) throws CoreException { - JSchConnection connection = checkConnection(); SubMonitor subMon = SubMonitor.convert(monitor, 10); + JSchConnection connection = checkConnection(subMon.newChild(1)); PutInfoCommand command = new PutInfoCommand(connection, info, options, fRemotePath); - command.getResult(subMon.newChild(10)); + command.getResult(subMon.newChild(9)); } /*