| 100 |
static BOOL handle_SSH2_userauth_banner(PTInstVar pvar); |
static BOOL handle_SSH2_userauth_banner(PTInstVar pvar); |
| 101 |
static BOOL handle_SSH2_open_confirm(PTInstVar pvar); |
static BOOL handle_SSH2_open_confirm(PTInstVar pvar); |
| 102 |
static BOOL handle_SSH2_open_failure(PTInstVar pvar); |
static BOOL handle_SSH2_open_failure(PTInstVar pvar); |
| 103 |
|
static BOOL handle_SSH2_client_global_request(PTInstVar pvar); |
| 104 |
static BOOL handle_SSH2_request_success(PTInstVar pvar); |
static BOOL handle_SSH2_request_success(PTInstVar pvar); |
| 105 |
static BOOL handle_SSH2_request_failure(PTInstVar pvar); |
static BOOL handle_SSH2_request_failure(PTInstVar pvar); |
| 106 |
static BOOL handle_SSH2_channel_success(PTInstVar pvar); |
static BOOL handle_SSH2_channel_success(PTInstVar pvar); |
| 1670 |
enque_handler(pvar, SSH2_MSG_CHANNEL_WINDOW_ADJUST, handle_SSH2_window_adjust); |
enque_handler(pvar, SSH2_MSG_CHANNEL_WINDOW_ADJUST, handle_SSH2_window_adjust); |
| 1671 |
enque_handler(pvar, SSH2_MSG_CHANNEL_SUCCESS, handle_SSH2_channel_success); |
enque_handler(pvar, SSH2_MSG_CHANNEL_SUCCESS, handle_SSH2_channel_success); |
| 1672 |
enque_handler(pvar, SSH2_MSG_CHANNEL_FAILURE, handle_SSH2_channel_failure); |
enque_handler(pvar, SSH2_MSG_CHANNEL_FAILURE, handle_SSH2_channel_failure); |
| 1673 |
// enque_handler(pvar, SSH2_MSG_GLOBAL_REQUEST, handle_unimplemented); |
enque_handler(pvar, SSH2_MSG_GLOBAL_REQUEST, handle_SSH2_client_global_request); |
| 1674 |
enque_handler(pvar, SSH2_MSG_REQUEST_FAILURE, handle_SSH2_request_failure); |
enque_handler(pvar, SSH2_MSG_REQUEST_FAILURE, handle_SSH2_request_failure); |
| 1675 |
enque_handler(pvar, SSH2_MSG_REQUEST_SUCCESS, handle_SSH2_request_success); |
enque_handler(pvar, SSH2_MSG_REQUEST_SUCCESS, handle_SSH2_request_success); |
| 1676 |
|
|
| 6095 |
pvar->rekeying = 0; |
pvar->rekeying = 0; |
| 6096 |
|
|
| 6097 |
SSH2_dispatch_init(6); |
SSH2_dispatch_init(6); |
| 6098 |
SSH2_dispatch_add_range_message(SSH2_MSG_REQUEST_SUCCESS, SSH2_MSG_CHANNEL_FAILURE); |
SSH2_dispatch_add_range_message(SSH2_MSG_GLOBAL_REQUEST, SSH2_MSG_CHANNEL_FAILURE); |
| 6099 |
SSH2_dispatch_add_message(SSH2_MSG_IGNORE); // XXX |
SSH2_dispatch_add_message(SSH2_MSG_IGNORE); // XXX |
| 6100 |
// OpenSSH 3.9ではデータ通信中のDH鍵交換要求が、サーバから送られてくることがある。 |
// OpenSSH 3.9ではデータ通信中のDH鍵交換要求が、サーバから送られてくることがある。 |
| 6101 |
SSH2_dispatch_add_message(SSH2_MSG_KEXINIT); |
SSH2_dispatch_add_message(SSH2_MSG_KEXINIT); |
| 7418 |
|
|
| 7419 |
return TRUE; |
return TRUE; |
| 7420 |
} |
} |
| 7421 |
|
|
| 7422 |
|
|
| 7423 |
|
// SSH2_MSG_GLOBAL_REQUEST for OpenSSH 6.8 |
| 7424 |
|
static BOOL handle_SSH2_client_global_request(PTInstVar pvar) |
| 7425 |
|
{ |
| 7426 |
|
int len; |
| 7427 |
|
char *data; |
| 7428 |
|
char *rtype; |
| 7429 |
|
int want_reply; |
| 7430 |
|
int success = 0; |
| 7431 |
|
buffer_t *msg; |
| 7432 |
|
unsigned char *outmsg; |
| 7433 |
|
int type; |
| 7434 |
|
|
| 7435 |
|
notify_verbose_message(pvar, "SSH2_MSG_GLOBAL_REQUEST was received.", LOG_LEVEL_VERBOSE); |
| 7436 |
|
|
| 7437 |
|
// 6byte(サイズ+パディング+タイプ)を取り除いた以降のペイロード |
| 7438 |
|
data = pvar->ssh_state.payload; |
| 7439 |
|
// パケットサイズ - (パディングサイズ+1);真のパケットサイズ |
| 7440 |
|
len = pvar->ssh_state.payloadlen; |
| 7441 |
|
|
| 7442 |
|
rtype = buffer_get_string(&data, NULL); |
| 7443 |
|
want_reply = data[0]; |
| 7444 |
|
|
| 7445 |
|
// OpenSSH 6.8では、サーバのホスト鍵が更新されると、下記の通知が来る。 |
| 7446 |
|
if (strcmp(rtype, "hostkeys-00@openssh.com") == 0) { |
| 7447 |
|
// TODO: 現状、Tera Termとしては未サポートなので、失敗で返す。 |
| 7448 |
|
success = 0; |
| 7449 |
|
} |
| 7450 |
|
free(rtype); |
| 7451 |
|
|
| 7452 |
|
msg = buffer_init(); |
| 7453 |
|
if (msg) { |
| 7454 |
|
len = buffer_len(msg); |
| 7455 |
|
type = success ? SSH2_MSG_REQUEST_SUCCESS : SSH2_MSG_REQUEST_FAILURE; |
| 7456 |
|
outmsg = begin_send_packet(pvar, type, len); |
| 7457 |
|
memcpy(outmsg, buffer_ptr(msg), len); |
| 7458 |
|
finish_send_packet(pvar); |
| 7459 |
|
buffer_free(msg); |
| 7460 |
|
} |
| 7461 |
|
|
| 7462 |
|
return TRUE; |
| 7463 |
|
} |
| 7464 |
|
|
| 7465 |
|
|
| 7466 |
// SSH2 port-forwarding (remote -> local)に対するリプライ(成功) |
// SSH2 port-forwarding (remote -> local)に対するリプライ(成功) |