Develop and Download Open Source Software

Browse Subversion Repository

Contents of /trunk/ttssh2/ttxssh/ttxssh.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 10073 - (show annotations) (download) (as text)
Sun Jul 17 15:40:49 2022 UTC (20 months, 3 weeks ago) by doda
File MIME type: text/x-chdr
File size: 11616 byte(s)
ホスト鍵確認ダイアログ表示中にSSH_MSG_EXT_INFOが扱え無い問題を修正した。

問題:
  ホスト鍵がssh_known_hostsに登録されていないサーバへの接続時、サーバ側が
  ユーザ認証でrsa-sha2-256/512に対応していると、ホスト鍵の確認ダイアログ
  表示中に「現在のステージでは想定外のSSH2 メッセージです」というエラーを
  表示して接続を切断してしまう。

原因:
  ホスト鍵確認ダイアログ表示中に送られて来た SSH_MSG_EXT_INFO が扱え無い為。

  ホスト鍵確認ダイアログを表示した時は、KEXの処理を中断するようになっていた。
  その状態で SSH_MSG_NEWKEYS を受信した場合は、SSH_MSG_NEWKEYS の処理も
  保留していた。
  それにより、KEXの処理が中断する事で通信暗号用の鍵/IVが設定されず、また
  SSH_MSG_NEWKEYS の処理も保留している為、受信方向の暗号化(復号)が開始
  されない状態となっていた。
  そこに暗号化された SSH_MSG_EXT_INFO を受信した為、復号せずにそのまま読み
  不明なパケットとして扱っていた。

対処:
  ホスト鍵確認ダイアログを表示しても、KEXの処理を中断せず暗号鍵/IVの設定を
  行い、またSSH_MSG_NEWKEYS受信時に即復号処理を開始するようにした。
  SSH_MSG_NEWKEYSの送信はホスト鍵の確認後に行うようにする事で、ホスト鍵確認
  ダイアログ表示中にユーザ認証を開始しないようにした。
1 /*
2 * Copyright (c) 1998-2001, Robert O'Callahan
3 * (C) 2004- TeraTerm Project
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 *
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 * 3. The name of the author may not be used to endorse or promote products
16 * derived from this software without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
19 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
20 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21 * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
22 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
23 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 */
29
30 /*
31 This code is copyright (C) 1998-1999 Robert O'Callahan.
32 See LICENSE.TXT for the license.
33 */
34
35 #ifndef __TTXSSH_H
36 #define __TTXSSH_H
37
38 #pragma warning(3 : 4035)
39
40 /* VS2015(VC14.0)�����AWSASocketA(), inet_ntoa() ������API��deprecated��������
41 * �x�������������A�x�����}�~�����B�����������u���������AVS2005(VC8.0)���r���h
42 * �����������������A�x�����}�~���������������B
43 */
44 #if _MSC_VER >= 1800 // VSC2013(VC12.0) or later
45 #ifndef _WINSOCK_DEPRECATED_NO_WARNINGS
46 #define _WINSOCK_DEPRECATED_NO_WARNINGS
47 #endif
48 #endif
49
50 #include <winsock2.h>
51 #include <ws2tcpip.h>
52 #include <wspiapi.h>
53 /* actual body of in6addr_any and in6addr_loopback is disappeared?? */
54 #undef IN6_IS_ADDR_LOOPBACK
55 #define IN6_IS_ADDR_LOOPBACK(a) \
56 ((*(unsigned int *)(&(a)->s6_addr[0]) == 0) && \
57 (*(unsigned int *)(&(a)->s6_addr[4]) == 0) && \
58 (*(unsigned int *)(&(a)->s6_addr[8]) == 0) && \
59 (*(unsigned int *)(&(a)->s6_addr[12]) == ntohl(1)))
60 /* work around for MS Platform SDK Oct 2000 */
61 #include <malloc.h> /* prevent of conflict stdlib.h */
62 #include <stdlib.h>
63 #include <stdarg.h>
64 #include <crtdbg.h>
65
66 #include "i18n.h"
67 #include "ttlib.h"
68
69 typedef struct _TInstVar *PTInstVar;
70
71 #include "ttxssh-version.h"
72 #include "util.h"
73 #include "pkt.h"
74 #include "ssh.h"
75 #include "auth.h"
76 #include "crypt.h"
77 #include "cipher.h"
78 #include "comp.h"
79 #include "kex.h"
80 #include "hostkey.h"
81 #include "key.h"
82 #include "hosts.h"
83 #include "fwd.h"
84
85 #include <openssl/dh.h>
86 #include <openssl/ec.h>
87 #include <openssl/evp.h>
88 #include "buffer.h"
89
90 /* tttypes.h �����`���������� EM �}�N���� openssl/rsa.h (OpenSSL 0.9.8)�������v���g�^�C�v������
91 * �������������d�����������������A�r���h�G���[�������B���L3�w�b�_��include���u�����L�����������B
92 * (2005.7.9 yutaka)
93 */
94 #include "teraterm.h"
95 #include "tttypes.h"
96 #include "ttplugin.h"
97
98 #if defined(_MSC_VER) && !defined(_Printf_format_string_)
99 // ���`�������������������������������������`��������
100 #define _Printf_format_string_
101 #endif
102
103 extern HANDLE hInst; /* Instance handle of TTXSSH.DLL */
104
105 #define ID_SSHSCPMENU 52110
106 #define ID_SSHSETUPMENU 52310
107 #define ID_SSHAUTHSETUPMENU 52320
108 #define ID_SSHFWDSETUPMENU 52330
109 #define ID_SSHKEYGENMENU 52340
110 #define ID_ABOUTMENU 52910
111
112 #define ID_SSHAUTH 62501
113 #define ID_SSHUNKNOWNHOST 62502
114 #define ID_SSHDIFFERENTKEY 62503
115 #define ID_SSHASYNCMESSAGEBOX 62504
116 #define ID_SSHDIFFERENT_TYPE_KEY 62505
117
118 #define OPTION_NONE 0
119 #define OPTION_CLEAR 1
120 #define OPTION_REPLACE 2
121
122 /*
123 * DisablePopupMessage �p���r�b�g���`
124 */
125 #define POPUP_MSG_default 0
126 #define POPUP_MSG_FWD_received_data (1 << 0)
127
128
129 /*
130 * Host key rotation
131 */
132 #define SSH_UPDATE_HOSTKEYS_NO 0
133 #define SSH_UPDATE_HOSTKEYS_YES 1
134 #define SSH_UPDATE_HOSTKEYS_ASK 2
135 #define SSH_UPDATE_HOSTKEYS_MAX 3
136
137 /*
138 * Server compatibility flag
139 */
140 #define SSH_BUG_DHGEX_LARGE 0x00000001
141
142
143 /*
144 These are the fields that WOULD go in Tera Term's 'ts' structure, if
145 we could put them there.
146 */
147 typedef struct _TS_SSH {
148 BOOL Enabled;
149 int CompressionLevel; /* 0 = NONE, else 1-9 */
150
151 int DefaultUserType; /* 0/1/2 = no input/DefaultUserName/Windows logon user */
152 char DefaultUserName[256];
153
154 /* this next option is a string of digits. Each digit represents a
155 cipher. The first digit is the most preferred cipher, and so on.
156 The digit SSH_CIPHER_NONE signifies that any ciphers after it are
157 disabled. */
158 char CipherOrder[SSH_CIPHER_MAX+2];
159
160 char KnownHostsFiles[2048];
161 int DefaultAuthMethod;
162 char DefaultRhostsLocalUserName[256];
163 char DefaultRhostsHostPrivateKeyFile[1024];
164 char DefaultRSAPrivateKeyFile[1024];
165
166 char DefaultForwarding[4096];
167 BOOL TryDefaultAuth;
168
169 int LogLevel; /* 0 = NONE, 100 = Verbose */
170 int WriteBufferSize;
171
172 int ssh_protocol_version; // SSH version (2004.10.11 yutaka)
173 int ssh_heartbeat_overtime; // SSH heartbeat(keepalive) (2004.12.11 yutaka)
174 // whether password will permanently store on heap memory (2006.8.5 yutaka)
175 int remember_password;
176
177 // try auth with "none" method for disable unsupported on dialog (2007.9.24 maya)
178 BOOL CheckAuthListFirst;
179
180 // Enable connection to the server that has RSA key length less than 768 bit (2008.9.11 maya)
181 BOOL EnableRsaShortKeyServer;
182
183 // Enable Agent forwarding
184 BOOL ForwardAgent;
185
186 // Confirm Agent forwarding
187 BOOL ForwardAgentConfirm;
188
189 // Confirm Agent forwarding
190 BOOL ForwardAgentNotify;
191
192 // KEX order(derived from teraterm.ini)
193 char KexOrder[KEX_DH_MAX+1];
194 char HostKeyOrder[KEY_ALGO_MAX+1];
195 char MacOrder[HMAC_MAX+1];
196 char CompOrder[COMP_MAX+1];
197
198 BOOL VerifyHostKeyDNS;
199
200 int IconID;
201
202 int DisablePopupMessage;
203
204 char X11Display[128];
205
206 int UpdateHostkeys;
207
208 int GexMinimalGroupSize;
209
210 int AuthBanner;
211 } TS_SSH;
212
213 typedef struct _TInstVar {
214 PTTSet ts;
215 PComVar cv;
216
217 /* shared memory for settings across instances. Basically it's
218 a cache for the INI file.*/
219 TS_SSH *ts_SSH;
220
221 int fatal_error;
222 int showing_err;
223 char *err_msg;
224
225 Tconnect Pconnect;
226 Trecv Precv;
227 Tsend Psend;
228 TWSAAsyncSelect PWSAAsyncSelect;
229 TWSAGetLastError PWSAGetLastError;
230
231 PReadIniFile ReadIniFile;
232 PWriteIniFile WriteIniFile;
233 PParseParam ParseParam;
234
235 HMENU FileMenu;
236
237 SOCKET socket;
238 HWND NotificationWindow;
239 unsigned int notification_msg;
240 long notification_events;
241 HICON OldSmallIcon; // �g�p������
242 HICON OldLargeIcon; // �g�p������
243
244 BOOL hostdlg_activated;
245 BOOL hostdlg_Enabled;
246
247 int protocol_major;
248 int protocol_minor;
249
250 PKTState pkt_state;
251 SSHState ssh_state;
252 AUTHState auth_state;
253 CRYPTState crypt_state;
254 HOSTSState hosts_state;
255 FWDState fwd_state;
256
257 /* The settings applied to the current session. The user may change
258 the settings but usually we don't want that to affect the session
259 in progress (race conditions). So user setup changes usually
260 modify the 'settings' field below. */
261 TS_SSH session_settings;
262
263 /* our copy of the global settings. This is synced up with the shared
264 memory only when we do a ReadIniFile or WriteIniFile
265 (i.e. the user loads or saves setup) */
266 TS_SSH settings;
267
268 // SSH2
269 DH *kexdh;
270 char server_version_string[128];
271 char client_version_string[128];
272 buffer_t *my_kex;
273 buffer_t *peer_kex;
274 kex_algorithm kex_type; // KEX algorithm
275 ssh_keyalgo hostkey_type;
276 const struct ssh2cipher *ciphers[MODE_MAX];
277 const struct SSH2Mac *macs[MODE_MAX];
278 compression_type ctos_compression;
279 compression_type stoc_compression;
280 int we_need;
281 int kex_status;
282 char *session_id;
283 int session_id_len;
284 SSHKeys ssh2_keys[MODE_MAX];
285 struct sshcipher_ctx *cc[MODE_MAX];
286 int userauth_success;
287 int shell_id;
288 int session_nego_status;
289 /*
290 unsigned int local_window;
291 unsigned int local_window_max;
292 unsigned int local_consumed;
293 unsigned int local_maxpacket;
294 unsigned int remote_window;
295 unsigned int remote_maxpacket;
296 */
297 int client_key_bits;
298 int server_key_bits;
299 int kexgex_min;
300 int kexgex_bits;
301 int kexgex_max;
302 int ssh2_autologin;
303 int ask4passwd;
304 SSHAuthMethod ssh2_authmethod;
305 char ssh2_username[MAX_PATH];
306 char ssh2_password[MAX_PATH];
307 char ssh2_keyfile[MAX_PATH];
308 time_t ssh_heartbeat_tick;
309 HANDLE ssh_heartbeat_thread;
310 int keyboard_interactive_password_input;
311 int userauth_retry_count;
312 buffer_t *decomp_buffer;
313 buffer_t *authbanner_buffer;
314 char *ssh2_authlist;
315 BOOL tryed_ssh2_authlist;
316 HWND ssh_hearbeat_dialog;
317
318 /* Pageant �������M�p */
319 unsigned char *pageant_key;
320 unsigned char *pageant_curkey;
321 int pageant_keylistlen;
322 int pageant_keycount;
323 int pageant_keycurrent;
324 BOOL pageant_keyfinal;// SSH2 PK_OK ������������ TRUE ������
325
326 // agent forward
327 BOOL agentfwd_enable;
328
329 BOOL origDisableTCPEchoCR;
330
331 BOOL nocheck_known_hosts;
332
333 EC_KEY *ecdh_client_key;
334
335 int dns_key_check;
336
337 unsigned int server_compat_flag;
338
339 void *hostkey_ctx;
340
341 BOOL use_subsystem;
342 char subsystem_name[256];
343
344 BOOL nosession;
345
346 // dialog resource
347 HFONT hFontFixed; // hosts.c�����_�C�A���O�p
348
349 char *server_sig_algs;
350
351 } TInstVar;
352
353 // �o�[�W���������������������X�������B ��: TTSSH_2-81_TS_data
354 #define TTSSH_FILEMAPNAME "TTSSH_" TTSSH_VERSION_STR("-") "_TS_data"
355
356 #define LOG_LEVEL_FATAL 5
357 #define LOG_LEVEL_ERROR 10
358 #define LOG_LEVEL_WARNING 30
359 #define LOG_LEVEL_NOTICE 50
360 #define LOG_LEVEL_INFO 80
361 #define LOG_LEVEL_VERBOSE 100
362 #define LOG_LEVEL_SSHDUMP 200
363
364 #define SSHv1(pvar) ((pvar)->protocol_major == 1)
365 #define SSHv2(pvar) ((pvar)->protocol_major == 2)
366
367 #define LogLevel(pvar, level) ((pvar)->settings.LogLevel >= (level))
368
369 void notify_established_secure_connection(PTInstVar pvar);
370 void notify_closed_connection(PTInstVar pvar, char *send_msg);
371 void notify_nonfatal_error(PTInstVar pvar, char *msg);
372 void notify_fatal_error(PTInstVar pvar, char *msg, BOOL send_disconnect);
373 void logputs(int level, char *msg);
374 #if defined(_MSC_VER)
375 void logprintf(int level, _Printf_format_string_ const char *fmt, ...);
376 void logprintf_hexdump(int level, const char *data, int len, _Printf_format_string_ const char *fmt, ...);
377 #elif defined(__GNUC__)
378 void logprintf(int level, const char *fmt, ...) __attribute__ ((format (printf, 2, 3)));
379 void logprintf_hexdump(int level, const char *data, int len, const char *fmt, ...) __attribute__ ((format (printf, 4, 5)));
380 #else
381 void logprintf(int level, const char *fmt, ...);
382 void logprintf_hexdump(int level, const char *data, int len, const char *fmt, ...);
383 #endif
384
385 void get_teraterm_dir_relative_name(char *buf, int bufsize, char *basename);
386 wchar_t *get_teraterm_dir_relative_nameW(const wchar_t *basename);
387 int copy_teraterm_dir_relative_path(char *dest, int destsize, char *basename);
388 wchar_t *get_home_dir_relative_nameW(const wchar_t *basename);
389 wchar_t *get_log_dir_relative_nameW(const wchar_t *basename);
390 int uuencode(unsigned char *src, int srclen, unsigned char *target, int targsize);
391
392 #endif

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26