diff --git a/java-scpclient/src/main/java/cz/it4i/fiji/scpclient/ScpClient.java b/java-scpclient/src/main/java/cz/it4i/fiji/scpclient/ScpClient.java index 20cd2e9a1fc57357ce03b308278320832751426f..a89a91a09af30f3d50858ed81e239abb0da9b2da 100644 --- a/java-scpclient/src/main/java/cz/it4i/fiji/scpclient/ScpClient.java +++ b/java-scpclient/src/main/java/cz/it4i/fiji/scpclient/ScpClient.java @@ -89,8 +89,7 @@ public class ScpClient extends AbstractBaseSshClient { AckowledgementChecker ack = new AckowledgementChecker(); // exec 'scp -f rfile' remotely - lfile = lfile.replace("'", "'\"'\"'"); - lfile = "'" + lfile + "'"; + lfile = sanityFileName(lfile); String command = "scp -f " + lfile; Channel channel = getConnectedSession().openChannel("exec"); @@ -233,8 +232,7 @@ public class ScpClient extends AbstractBaseSshClient { AckowledgementChecker ack = new AckowledgementChecker(); // exec 'scp -f rfile' remotely - lfile = lfile.replace("'", "'\"'\"'"); - lfile = "'" + lfile + "'"; + lfile = sanityFileName(lfile); String command = "scp -f " + lfile; Channel channel = getConnectedSession().openChannel("exec"); @@ -291,7 +289,7 @@ public class ScpClient extends AbstractBaseSshClient { // exec 'scp -f rfile' remotely Channel channel = getConnectedSession().openChannel("sftp"); - + lfile = sanityFileName(lfile); try { channel.connect(); return ((List<LsEntry>) ((ChannelSftp) channel).ls(lfile)).stream().map( @@ -319,10 +317,9 @@ public class ScpClient extends AbstractBaseSshClient { boolean ptimestamp = false; // exec 'scp -t rfile' remotely - fileName = fileName.replace("'", "'\"'\"'"); + fileName = sanityFileName(fileName); - String command = "scp " + (ptimestamp ? "-p" : "") + " -t '" + fileName + - "'"; + String command = "scp " + (ptimestamp ? "-p" : "") + " -t " + fileName; Channel channel = getConnectedSession().openChannel("exec"); ((ChannelExec) channel).setCommand(command); // get I/O streams for remote scp @@ -389,9 +386,17 @@ public class ScpClient extends AbstractBaseSshClient { } } + private String sanityFileName(String fileName) { + fileName = fileName.replace("\"", "\\\\\\\""); + fileName = fileName.replace("'", "\\\\\\'"); + fileName = "'" + fileName + "'"; + return fileName; + } + private int mkdir(String file) throws JSchException { ChannelExec channel = (ChannelExec) getConnectedSession().openChannel( "exec"); + file = sanityFileName(file); channel.setCommand("mkdir -p '" + file + "'"); try { channel.connect();