Cygwin最新版のSSHが魔改造版のWindows 2000でエラーになる件
去年1年ほど前にこの現象に気付いたのだが、原因がわからないまま放置していたので調べてみました
問題の個所1
if (hostfile_ipaddr != NULL) { if (options.proxy_command == NULL) { if (getnameinfo(hostaddr, addrlen, ntop, sizeof(ntop), NULL, 0, NI_NUMERICHOST) != 0) fatal("%s: getnameinfo failed", __func__); *hostfile_ipaddr = put_host_port(ntop, port); } else { *hostfile_ipaddr = xstrdup("<no hostip for proxy " "command>"); } } |
getnameinfo でクラッシュしてるらしい
Administrator@mofmof /usr/src $ ssh -vvv -F config mof -i id_rsa OpenSSH_6.8p1, OpenSSL 1.0.2a 19 Mar 2015 debug1: Reading configuration data config debug1: config line 1: Applying options for mof debug2: ssh_connect: needpriv 0 ssh_connect: getnameinfo failed ssh: connect to host 55.123.200.200 port w\314\240": Bad address |
というかポート番号が化けてる。
いままで、getnameinfo の実装にバグがあると思ってたけど、実は GetNameInfoW なんじゃないかと…。
とりあえずテストコード書いてみた
#include <stdio.h>
#include <winsock2.h> #pragma comment(lib,"ws2_32.lib") typedef INT(WSAAPI * _GetNameInfoW)( |
赤字の箇所でクラッシュした!
というわけでごにょごにょして直した。
続き
debug3("%s: type %d wildcard %d addr %s", __func__, type, wildcard, (addr == NULL) ? "NULL" : addr); /* |
なぜか赤字の処理に飛ぶ。
調べてみると、GetAddrInfoW の第一引数がNULLの時何も処理せずエラー扱いになっていた。
debug1: channel 2: new [client-session] debug3: ssh_session2_open: channel_new: 2 debug2: channel 2: send open debug1: Entering interactive session. debug2: callback start debug2: fd 3 setting TCP_NODELAY debug3: ssh_packet_set_tos: set IP_TOS 0x10 debug2: client_session2_setup: id 2 debug2: channel 2: request pty-req confirm 1 debug2: channel 2: request shell confirm 1 debug2: callback done debug2: channel 2: open confirm rwindow 0 rmax 32768 debug2: channel_input_status_confirm: type 100 id 2 PTY allocation request failed on channel 2 debug2: channel 2: rcvd adjust 131072 debug2: channel_input_status_confirm: type 99 id 2 debug2: shell request accepted on channel 2 debug2: channel 2: rcvd ext data 39 Type in help if you are really lost stty: standard input: Invalid argument |
直したところ無事つながった・ω・!
拡張カーネルv2.4eから修正済みです。
なお、
・d3d9.dllの吉里吉里Z対応
・GDI+のセキュリティ更新
も含んでいます
Comments