[RemoteUtil] Add support for sftp (#64)

In a future CL, we will switch from scp to sftp. This CL adds support
for calling sftp from RemoteUtil.

In order to maintain backwards compatibility where people still set
--scp-command or CDC_SCP_COMMAND instead of the sftp versions, this CL
also adds the helper method RemoteUtil::ScpToSftpCommand, which
attempts to convert an scp command to an sftp command. This is usually
possible since the args are almost the same. For instance, if the scp
command is
  C:\path\to\scp.exe -P 1234 -i <key_file> -oUserKnownHostsFile=known_hosts
then the corresponding sftp command is most likely
  C:\path\to\sftp.exe -P 1234 -i <key_file> -oUserKnownHostsFile=known_hosts
This works for instance for OpenSSH.
This commit is contained in:
Lutz Justen
2023-01-17 12:05:17 +01:00
committed by GitHub
parent f2177969fe
commit af9038b4dd
3 changed files with 113 additions and 4 deletions
+22
View File
@@ -127,5 +127,27 @@ TEST_F(RemoteUtilTest, QuoteForSsh) {
"\"~user-name69/\\\"foo\\\"\""); // Nice!
}
TEST_F(RemoteUtilTest, ScpToSftpCommand) {
EXPECT_EQ(RemoteUtil::ScpToSftpCommand(""), "");
EXPECT_EQ(RemoteUtil::ScpToSftpCommand("scp"), "sftp");
EXPECT_EQ(RemoteUtil::ScpToSftpCommand("scp.exe"), "sftp.exe");
EXPECT_EQ(RemoteUtil::ScpToSftpCommand("scp --arg"), "sftp --arg");
EXPECT_EQ(RemoteUtil::ScpToSftpCommand("ScP --aRg"), "sftp --aRg");
EXPECT_EQ(RemoteUtil::ScpToSftpCommand("winscp"), "winsftp");
EXPECT_EQ(RemoteUtil::ScpToSftpCommand("winscp.exe"), "winsftp.exe");
EXPECT_EQ(RemoteUtil::ScpToSftpCommand("winscp --arg"), "winsftp --arg");
EXPECT_EQ(RemoteUtil::ScpToSftpCommand("C:\\path\\to\\scp"),
"C:\\path\\to\\sftp");
EXPECT_EQ(RemoteUtil::ScpToSftpCommand("C:\\path\\to\\scp.exe"),
"C:\\path\\to\\sftp.exe");
EXPECT_EQ(RemoteUtil::ScpToSftpCommand("C:\\path\\to\\scp.exe --arg"),
"C:\\path\\to\\sftp.exe --arg");
EXPECT_EQ(RemoteUtil::ScpToSftpCommand("C:\\scp.exe --argwithscp"),
"C:\\sftp.exe --argwithscp");
EXPECT_EQ(RemoteUtil::ScpToSftpCommand("C:\\path_with_scp\\scp"),
"C:\\path_with_scp\\sftp");
EXPECT_EQ(RemoteUtil::ScpToSftpCommand("C:\\path\\to\\somethingelse"), "");
}
} // namespace
} // namespace cdc_ft