[Ttssh2-commit] [7134] Local to Remote の scp で、scp 先 path を host :/some/ where とした時に

scmno****@osdn***** scmno****@osdn*****
2018年 6月 14日 (木) 19:57:17 JST


Revision: 7134
          http://sourceforge.jp/projects/ttssh2/scm/svn/commits/7134
Author:   doda
Date:     2018-06-14 19:57:17 +0900 (Thu, 14 Jun 2018)
Log Message:
-----------
Local to Remote の scp で、scp 先 path を host:/some/where とした時に
相手先で host への ssh 接続を行い、そこで scp を起動するようにした。

現在の制限:
・pageant 等でパスフレーズ入力が発生しないようにする必要がある
・path のエスケープ等は行っていない
・小さいファイルの転送が失敗する事がある?

Modified Paths:
--------------
    trunk/ttssh2/ttxssh/ssh.c

-------------- next part --------------
Modified: trunk/ttssh2/ttxssh/ssh.c
===================================================================
--- trunk/ttssh2/ttxssh/ssh.c	2018-06-14 10:57:13 UTC (rev 7133)
+++ trunk/ttssh2/ttxssh/ssh.c	2018-06-14 10:57:17 UTC (rev 7134)
@@ -7653,6 +7653,7 @@
 	int id, remote_id;
 	Channel_t *c;
 	char buff[MAX_PATH + 30];
+	char *host_p, *path_p;
 
 #ifdef DONT_WANTCONFIRM
 	int want_reply = 0; // false
@@ -7717,8 +7718,17 @@
 
 	case TYPE_SCP:
 		if (c->scp.dir == TOREMOTE) {
-			_snprintf_s(buff, sizeof(buff), _TRUNCATE, "scp -t %s", c->scp.remotefile);
-
+			if ((path_p = strchr(c->scp.remotefile, ':')) != NULL) {
+				host_p = c->scp.remotefile;
+				*path_p++ = 0;
+				if (*path_p == 0) {
+					path_p = ".";
+				}
+				_snprintf_s(buff, sizeof(buff), _TRUNCATE, "ssh %s scp -t %s", host_p, path_p);
+			}
+			else {
+				_snprintf_s(buff, sizeof(buff), _TRUNCATE, "scp -t %s", c->scp.remotefile);
+			}
 		} else {
 			// \x83t\x83@\x83C\x83\x8B\x96\xBC\x82ɋ󔒂\xF0\x8A܂܂\xEA\x82Ă\xA2\x82Ă\xE0\x82悢\x82悤\x82ɁA\x83t\x83@\x83C\x83\x8B\x96\xBC\x82\xF0\x93\xF1\x8Fd\x88\xF8\x97p\x95\x84\x82ň͂ށB
 			// (2014.7.13 yutaka)



Ttssh2-commit メーリングリストの案内