| 640 |
|
|
| 641 |
} else { |
} else { |
| 642 |
// support of SSH2 packet compression (2005.7.9 yutaka) |
// support of SSH2 packet compression (2005.7.9 yutaka) |
| 643 |
if (pvar->stoc_compression && pvar->ssh2_keys[MODE_IN].comp.enabled) { // compression enabled |
// support of "Compression delayed" (2006.6.23 maya) |
| 644 |
|
if ((pvar->stoc_compression == COMP_ZLIB || |
| 645 |
|
pvar->stoc_compression == COMP_DELAYED && pvar->userauth_success) && |
| 646 |
|
pvar->ssh2_keys[MODE_IN].comp.enabled) { // compression enabled |
| 647 |
int ret; |
int ret; |
| 648 |
|
|
| 649 |
if (pvar->decomp_buffer == NULL) { |
if (pvar->decomp_buffer == NULL) { |
| 809 |
len = ssh_state.outgoing_packet_len = payload size |
len = ssh_state.outgoing_packet_len = payload size |
| 810 |
*/ |
*/ |
| 811 |
// パケット圧縮が有効の場合、パケットを圧縮してから送信パケットを構築する。(2005.7.9 yutaka) |
// パケット圧縮が有効の場合、パケットを圧縮してから送信パケットを構築する。(2005.7.9 yutaka) |
| 812 |
if (pvar->ctos_compression && pvar->ssh2_keys[MODE_OUT].comp.enabled) { |
// support of "Compression delayed" (2006.6.23 maya) |
| 813 |
|
if ((pvar->ctos_compression == COMP_ZLIB || |
| 814 |
|
pvar->ctos_compression == COMP_DELAYED && pvar->userauth_success) && |
| 815 |
|
pvar->ssh2_keys[MODE_OUT].comp.enabled) { |
| 816 |
// このバッファは packet-length(4) + padding(1) + payload(any) を示す。 |
// このバッファは packet-length(4) + padding(1) + payload(any) を示す。 |
| 817 |
msg = buffer_init(); |
msg = buffer_init(); |
| 818 |
if (msg == NULL) { |
if (msg == NULL) { |
| 2500 |
char buf2[1024]; |
char buf2[1024]; |
| 2501 |
|
|
| 2502 |
// added support of SSH2 packet compression (2005.7.10 yutaka) |
// added support of SSH2 packet compression (2005.7.10 yutaka) |
| 2503 |
if (pvar->ssh_state.compressing || pvar->ctos_compression) { |
// support of "Compression delayed" (2006.6.23 maya) |
| 2504 |
|
if (pvar->ssh_state.compressing || |
| 2505 |
|
pvar->ctos_compression == COMP_ZLIB || |
| 2506 |
|
pvar->ctos_compression == COMP_DELAYED && pvar->userauth_success) { |
| 2507 |
unsigned long total_in = pvar->ssh_state.compress_stream.total_in; |
unsigned long total_in = pvar->ssh_state.compress_stream.total_in; |
| 2508 |
unsigned long total_out = |
unsigned long total_out = |
| 2509 |
pvar->ssh_state.compress_stream.total_out; |
pvar->ssh_state.compress_stream.total_out; |
| 2522 |
} |
} |
| 2523 |
buf[sizeof(buf) - 1] = 0; |
buf[sizeof(buf) - 1] = 0; |
| 2524 |
|
|
| 2525 |
if (pvar->ssh_state.decompressing || pvar->stoc_compression) { |
// support of "Compression delayed" (2006.6.23 maya) |
| 2526 |
|
if (pvar->ssh_state.decompressing || |
| 2527 |
|
pvar->stoc_compression == COMP_ZLIB || |
| 2528 |
|
pvar->stoc_compression == COMP_DELAYED && pvar->userauth_success) { |
| 2529 |
unsigned long total_in = |
unsigned long total_in = |
| 2530 |
pvar->ssh_state.decompress_stream.total_in; |
pvar->ssh_state.decompress_stream.total_in; |
| 2531 |
unsigned long total_out = |
unsigned long total_out = |
| 2599 |
buf_destroy(&pvar->ssh_state.postdecompress_inbuf, |
buf_destroy(&pvar->ssh_state.postdecompress_inbuf, |
| 2600 |
&pvar->ssh_state.postdecompress_inbuflen); |
&pvar->ssh_state.postdecompress_inbuflen); |
| 2601 |
|
|
| 2602 |
if (pvar->ssh_state.compressing || pvar->ctos_compression) { // add SSH2 flag (2005.7.10 yutaka) |
// support of "Compression delayed" (2006.6.23 maya) |
| 2603 |
|
if (pvar->ssh_state.compressing || |
| 2604 |
|
pvar->ctos_compression == COMP_ZLIB || // add SSH2 flag (2005.7.10 yutaka) |
| 2605 |
|
pvar->ctos_compression == COMP_DELAYED && pvar->userauth_success) { |
| 2606 |
deflateEnd(&pvar->ssh_state.compress_stream); |
deflateEnd(&pvar->ssh_state.compress_stream); |
| 2607 |
pvar->ssh_state.compressing = FALSE; |
pvar->ssh_state.compressing = FALSE; |
| 2608 |
} |
} |
| 2609 |
if (pvar->ssh_state.decompressing || pvar->stoc_compression) { // add SSH2 flag (2005.7.10 yutaka) |
// support of "Compression delayed" (2006.6.23 maya) |
| 2610 |
|
if (pvar->ssh_state.decompressing || |
| 2611 |
|
pvar->stoc_compression == COMP_ZLIB || // add SSH2 flag (2005.7.10 yutaka) |
| 2612 |
|
pvar->stoc_compression == COMP_DELAYED && pvar->userauth_success) { |
| 2613 |
inflateEnd(&pvar->ssh_state.decompress_stream); |
inflateEnd(&pvar->ssh_state.decompress_stream); |
| 2614 |
pvar->ssh_state.decompressing = FALSE; |
pvar->ssh_state.decompressing = FALSE; |
| 2615 |
} |
} |
| 3142 |
// "hmac-sha1,hmac-md5", |
// "hmac-sha1,hmac-md5", |
| 3143 |
// "hmac-sha1", |
// "hmac-sha1", |
| 3144 |
// "hmac-sha1", |
// "hmac-sha1", |
| 3145 |
"none,zlib", |
KEX_DEFAULT_COMP, |
| 3146 |
"none,zlib", |
KEX_DEFAULT_COMP, |
| 3147 |
"", |
"", |
| 3148 |
"", |
"", |
| 3149 |
}; |
}; |
| 3155 |
"3des-cbc,aes128-cbc", |
"3des-cbc,aes128-cbc", |
| 3156 |
"hmac-sha1,hmac-md5", |
"hmac-sha1,hmac-md5", |
| 3157 |
"hmac-sha1,hmac-md5", |
"hmac-sha1,hmac-md5", |
| 3158 |
"none,zlib", |
KEX_DEFAULT_COMP, |
| 3159 |
"none,zlib", |
KEX_DEFAULT_COMP, |
| 3160 |
"", |
"", |
| 3161 |
"", |
"", |
| 3162 |
}; |
}; |
| 3314 |
// 圧縮レベルに応じて、myproposal[]を書き換える。(2005.7.9 yutaka) |
// 圧縮レベルに応じて、myproposal[]を書き換える。(2005.7.9 yutaka) |
| 3315 |
buf[0] = '\0'; |
buf[0] = '\0'; |
| 3316 |
if (pvar->ts_SSH->CompressionLevel > 0) { |
if (pvar->ts_SSH->CompressionLevel > 0) { |
| 3317 |
_snprintf(buf, sizeof(buf), "zlib,none"); |
// 将来的に圧縮アルゴリズムの優先度をユーザが変えられるようにする。 |
| 3318 |
|
_snprintf(buf, sizeof(buf), "zlib@openssh.com,zlib,none"); |
| 3319 |
} |
} |
| 3320 |
if (buf[0] != '\0') { |
if (buf[0] != '\0') { |
| 3321 |
myproposal[PROPOSAL_COMP_ALGS_CTOS] = buf; // Client To Server |
myproposal[PROPOSAL_COMP_ALGS_CTOS] = buf; // Client To Server |
| 3420 |
static int choose_SSH2_compression_algorithm(char *server_proposal, char *my_proposal) |
static int choose_SSH2_compression_algorithm(char *server_proposal, char *my_proposal) |
| 3421 |
{ |
{ |
| 3422 |
char tmp[1024], *ptr, *q, *index; |
char tmp[1024], *ptr, *q, *index; |
| 3423 |
int ret = -1; |
int ret = COMP_UNKNOWN; |
| 3424 |
|
|
| 3425 |
// OpenSSH 4.3では遅延パケット圧縮("zlib@openssh.com")が新規追加されているため、 |
// OpenSSH 4.3では遅延パケット圧縮("zlib@openssh.com")が新規追加されているため、 |
| 3426 |
// マッチしないように修正した。 |
// マッチしないように修正した。 |
| 3427 |
// 現TeraTermでは遅延パケット圧縮は将来的にサポートする予定。 |
// 現TeraTermでは遅延パケット圧縮は将来的にサポートする予定。 |
| 3428 |
// (2006.6.14 yutaka) |
// (2006.6.14 yutaka) |
| 3429 |
|
// 遅延パケット圧縮に対応。 |
| 3430 |
|
// (2006.6.23 maya) |
| 3431 |
|
|
| 3432 |
_snprintf(tmp, sizeof(tmp), my_proposal); |
_snprintf(tmp, sizeof(tmp), my_proposal); |
| 3433 |
ptr = strtok(tmp, ","); // not thread-safe |
ptr = strtok(tmp, ","); // not thread-safe |
| 3445 |
} |
} |
| 3446 |
|
|
| 3447 |
found: |
found: |
| 3448 |
if (strstr(ptr, "zlib")) { |
// support of "Compression delayed" (2006.6.23 maya) |
| 3449 |
ret = 1; // packet compression enabled |
if (strstr(ptr, "zlib@openssh.com")) { |
| 3450 |
|
ret = COMP_DELAYED; |
| 3451 |
|
} else if (strstr(ptr, "zlib")) { |
| 3452 |
|
ret = COMP_ZLIB; // packet compression enabled |
| 3453 |
} else if (strstr(ptr, "none")) { |
} else if (strstr(ptr, "none")) { |
| 3454 |
ret = 0; // packet compression disabled |
ret = COMP_NONE; // packet compression disabled |
| 3455 |
} |
} |
| 3456 |
|
|
| 3457 |
return (ret); |
return (ret); |
| 3743 |
buf[i] = 0; |
buf[i] = 0; |
| 3744 |
offset += size; |
offset += size; |
| 3745 |
pvar->ctos_compression = choose_SSH2_compression_algorithm(buf, myproposal[PROPOSAL_COMP_ALGS_CTOS]); |
pvar->ctos_compression = choose_SSH2_compression_algorithm(buf, myproposal[PROPOSAL_COMP_ALGS_CTOS]); |
| 3746 |
if (pvar->ctos_compression == -1) { // not match |
if (pvar->ctos_compression == COMP_UNKNOWN) { // not match |
| 3747 |
strcpy(tmp, "unknown Packet Compression algorithm: "); |
strcpy(tmp, "unknown Packet Compression algorithm: "); |
| 3748 |
strcat(tmp, buf); |
strcat(tmp, buf); |
| 3749 |
msg = tmp; |
msg = tmp; |
| 3758 |
buf[i] = 0; |
buf[i] = 0; |
| 3759 |
offset += size; |
offset += size; |
| 3760 |
pvar->stoc_compression = choose_SSH2_compression_algorithm(buf, myproposal[PROPOSAL_COMP_ALGS_STOC]); |
pvar->stoc_compression = choose_SSH2_compression_algorithm(buf, myproposal[PROPOSAL_COMP_ALGS_STOC]); |
| 3761 |
if (pvar->stoc_compression == -1) { // not match |
if (pvar->stoc_compression == COMP_UNKNOWN) { // not match |
| 3762 |
strcpy(tmp, "unknown Packet Compression algorithm: "); |
strcpy(tmp, "unknown Packet Compression algorithm: "); |
| 3763 |
strcat(tmp, buf); |
strcat(tmp, buf); |
| 3764 |
msg = tmp; |
msg = tmp; |
| 6852 |
|
|
| 6853 |
/* |
/* |
| 6854 |
* $Log: not supported by cvs2svn $ |
* $Log: not supported by cvs2svn $ |
| 6855 |
|
* Revision 1.45 2006/06/13 15:21:00 yutakakn |
| 6856 |
|
* OpenSSH 4.3以降で遅延パケット圧縮が設定されている場合、従来のパケット圧縮を有効にした状態でのサーバへの接続ができないバグを修正した。 |
| 6857 |
|
* |
| 6858 |
* Revision 1.44 2006/04/07 13:24:16 yutakakn |
* Revision 1.44 2006/04/07 13:24:16 yutakakn |
| 6859 |
* HP-UXにおいてX11 fowardingが失敗した場合に、SSH2セッションが切断されないようにした。 |
* HP-UXにおいてX11 fowardingが失敗した場合に、SSH2セッションが切断されないようにした。 |
| 6860 |
* |
* |