[Ttssh2-commit] [4476] SSH2の場合にはポート転送以外のチャネルでFWD_free_channelを呼んではいけないのに呼んでいたのを修正

Back to archive index

svnno****@sourc***** svnno****@sourc*****
2011年 5月 30日 (月) 22:04:11 JST


Revision: 4476
          http://sourceforge.jp/projects/ttssh2/svn/view?view=rev&revision=4476
Author:   maya
Date:     2011-05-30 22:04:11 +0900 (Mon, 30 May 2011)

Log Message:
-----------
SSH2の場合にはポート転送以外のチャネルでFWD_free_channelを呼んではいけないのに呼んでいたのを修正
  http://sourceforge.jp/ticket/browse.php?group_id=1412&tid=25169
  ただし、別の問題が残っている模様

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


-------------- next part --------------
Modified: trunk/ttssh2/ttxssh/fwd.c
===================================================================
--- trunk/ttssh2/ttxssh/fwd.c	2011-05-27 14:44:18 UTC (rev 4475)
+++ trunk/ttssh2/ttxssh/fwd.c	2011-05-30 13:04:11 UTC (rev 4476)
@@ -299,13 +299,13 @@
 {
 	FWDChannel FAR *channel = &pvar->fwd_state.channels[local_channel_num];
 
-	if (channel->type == TYPE_AGENT) {
+	if (channel->type == TYPE_AGENT) { // TYPE_AGENT ‚Å‚±‚±‚É—ˆ‚é‚Ì‚Í SSH1 ‚Ì‚Ý
 		buffer_free(channel->agent_msg);
 		// channel_close Žž‚Æ TTSSH I—¹Žž‚É2‰ñŒÄ‚΂ê‚é‚̂ŁA“ñd free –hŽ~‚Ì‚½‚ß
 		channel->agent_msg = NULL;
 		channel->status = 0;
 	}
-	else {
+	else { // TYPE_PORTFWD
 		UTIL_destroy_sock_write_buf(&channel->writebuf);
 		if (channel->filter != NULL) {
 			channel->filter(channel->filter_closure, 0, NULL, NULL);

Modified: trunk/ttssh2/ttxssh/ssh.c
===================================================================
--- trunk/ttssh2/ttxssh/ssh.c	2011-05-27 14:44:18 UTC (rev 4475)
+++ trunk/ttssh2/ttxssh/ssh.c	2011-05-30 13:04:11 UTC (rev 4476)
@@ -7212,7 +7212,9 @@
 	free(cstring);
 
 	// “]‘—ƒ`ƒƒƒlƒ‹“à‚É‚ ‚éƒ\ƒPƒbƒg‚̉ð•ú˜R‚ê‚ðC³ (2007.7.26 maya)
-	FWD_free_channel(pvar, c->local_num);
+	if (c->type == TYPE_PORTFWD) {
+		FWD_free_channel(pvar, c->local_num);
+	}
 
 	// ƒ`ƒƒƒlƒ‹‚̉ð•ú˜R‚ê‚ðC³ (2007.5.1 maya)
 	ssh2_channel_delete(c);
@@ -8165,7 +8167,7 @@
 
 	} else if (strcmp(ctype, "auth-****@opens*****") == 0) { // agent forwarding
 		if (pvar->agentfwd_enable && FWD_agent_forward_confirm(pvar)) {
-			c = ssh2_channel_new(CHAN_TCP_WINDOW_DEFAULT, CHAN_TCP_PACKET_DEFAULT, TYPE_AGENT, chan_num);
+			c = ssh2_channel_new(CHAN_TCP_WINDOW_DEFAULT, CHAN_TCP_PACKET_DEFAULT, TYPE_AGENT, -1);
 			if (c == NULL) {
 				UTIL_get_lang_msg("MSG_SSH_NO_FREE_CHANNEL", pvar,
 				                  "Could not open new channel. TTSSH is already opening too many channels.");
@@ -8275,9 +8277,12 @@
 	} else if (c->type == TYPE_SCP) {
 		ssh2_channel_delete(c);
 
-	} else {
+	} else if (c->type == TYPE_AGENT) {
 		ssh2_channel_delete(c);
 
+	} else { // TYPE_PORTFWD
+		ssh2_channel_delete(c);
+
 	}
 
 	return TRUE;
@@ -8296,9 +8301,8 @@
 	char *emsg = "exit-status";
 	int estat = 0;
 	Channel_t *c;
+	char log[128];
 
-	notify_verbose_message(pvar, "SSH2_MSG_CHANNEL_REQUEST was received.", LOG_LEVEL_VERBOSE);
-
 	// 6byteiƒTƒCƒY{ƒpƒfƒBƒ“ƒO{ƒ^ƒCƒvj‚ðŽæ‚菜‚¢‚½ˆÈ~‚̃yƒCƒ[ƒh
 	data = pvar->ssh_state.payload;
 	// ƒpƒPƒbƒgƒTƒCƒY - (ƒpƒfƒBƒ“ƒOƒTƒCƒY+1)G^‚̃pƒPƒbƒgƒTƒCƒY
@@ -8323,6 +8327,9 @@
 	reply = data[0];
 	data += 1;
 
+	_snprintf_s(log, sizeof(log), _TRUNCATE, "SSH2_MSG_CHANNEL_REQUEST was received. local:%d remote:%d %s reply:%d", c->self_id, c->remote_id, str, reply);
+	notify_verbose_message(pvar, log, LOG_LEVEL_VERBOSE);
+
 	// I—¹ƒR[ƒh‚ªŠÜ‚Ü‚ê‚Ä‚¢‚é‚È‚ç‚Î
 	if (memcmp(str, emsg, strlen(emsg)) == 0) {
 		success = 1;



Ttssh2-commit メーリングリストの案内
Back to archive index