Develop and Download Open Source Software

Browse Subversion Repository

Diff of /branches/ssh_chacha20poly1305/ttssh2/ttxssh/ttxssh.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 3002 by maya, Mon Aug 20 13:59:45 2007 UTC revision 3003 by maya, Mon Aug 20 14:21:57 2007 UTC
# Line 143  static void uninit_TTSSH(PTInstVar pvar) Line 143  static void uninit_TTSSH(PTInstVar pvar)
143    
144          if (pvar->OldLargeIcon != NULL) {          if (pvar->OldLargeIcon != NULL) {
145                  PostMessage(pvar->NotificationWindow, WM_SETICON, ICON_BIG,                  PostMessage(pvar->NotificationWindow, WM_SETICON, ICON_BIG,
146                                          (LPARAM) pvar->OldLargeIcon);                              (LPARAM) pvar->OldLargeIcon);
147                  pvar->OldLargeIcon = NULL;                  pvar->OldLargeIcon = NULL;
148          }          }
149          if (pvar->OldSmallIcon != NULL) {          if (pvar->OldSmallIcon != NULL) {
150                  PostMessage(pvar->NotificationWindow, WM_SETICON, ICON_SMALL,                  PostMessage(pvar->NotificationWindow, WM_SETICON, ICON_SMALL,
151                                          (LPARAM) pvar->OldSmallIcon);                              (LPARAM) pvar->OldSmallIcon);
152                  pvar->OldSmallIcon = NULL;                  pvar->OldSmallIcon = NULL;
153          }          }
154    
# Line 236  static BOOL read_BOOL_option(PCHAR fileN Line 236  static BOOL read_BOOL_option(PCHAR fileN
236    
237          buf[0] = 0;          buf[0] = 0;
238          GetPrivateProfileString("TTSSH", keyName, "", buf, sizeof(buf),          GetPrivateProfileString("TTSSH", keyName, "", buf, sizeof(buf),
239                                                          fileName);                                  fileName);
240          if (buf[0] == 0) {          if (buf[0] == 0) {
241                  return def;                  return def;
242          } else {          } else {
243                  return atoi(buf) != 0 ||                  return atoi(buf) != 0 ||
244                          _stricmp(buf, "yes") == 0 || _stricmp(buf, "y") == 0;                         _stricmp(buf, "yes") == 0 ||
245                           _stricmp(buf, "y") == 0;
246          }          }
247  }  }
248    
249  static void read_string_option(PCHAR fileName, char FAR * keyName,  static void read_string_option(PCHAR fileName, char FAR * keyName,
250                                                             char FAR * def, char FAR * buf, int bufSize)                                 char FAR * def, char FAR * buf, int bufSize)
251  {  {
252    
253          buf[0] = 0;          buf[0] = 0;
# Line 259  static void read_ssh_options(PTInstVar p Line 260  static void read_ssh_options(PTInstVar p
260          TS_SSH FAR *settings = pvar->ts_SSH;          TS_SSH FAR *settings = pvar->ts_SSH;
261    
262  #define READ_STD_STRING_OPTION(name) \  #define READ_STD_STRING_OPTION(name) \
263    read_string_option(fileName, #name, "", settings->name, sizeof(settings->name))          read_string_option(fileName, #name, "", settings->name, sizeof(settings->name))
264    
265          settings->Enabled = read_BOOL_option(fileName, "Enabled", FALSE);          settings->Enabled = read_BOOL_option(fileName, "Enabled", FALSE);
266    
267          buf[0] = 0;          buf[0] = 0;
268          GetPrivateProfileString("TTSSH", "Compression", "", buf, sizeof(buf),          GetPrivateProfileString("TTSSH", "Compression", "", buf, sizeof(buf),
269                                                          fileName);                                  fileName);
270          settings->CompressionLevel = atoi(buf);          settings->CompressionLevel = atoi(buf);
271          if (settings->CompressionLevel < 0 || settings->CompressionLevel > 9) {          if (settings->CompressionLevel < 0 || settings->CompressionLevel > 9) {
272                  settings->CompressionLevel = 0;                  settings->CompressionLevel = 0;
# Line 281  static void read_ssh_options(PTInstVar p Line 282  static void read_ssh_options(PTInstVar p
282          normalize_cipher_order(settings->CipherOrder);          normalize_cipher_order(settings->CipherOrder);
283    
284          read_string_option(fileName, "KnownHostsFiles", "ssh_known_hosts",          read_string_option(fileName, "KnownHostsFiles", "ssh_known_hosts",
285                                             settings->KnownHostsFiles,                             settings->KnownHostsFiles,
286                                             sizeof(settings->KnownHostsFiles));                             sizeof(settings->KnownHostsFiles));
287    
288          buf[0] = 0;          buf[0] = 0;
289          GetPrivateProfileString("TTSSH", "DefaultAuthMethod", "", buf,          GetPrivateProfileString("TTSSH", "DefaultAuthMethod", "", buf,
290                                                          sizeof(buf), fileName);                                  sizeof(buf), fileName);
291          settings->DefaultAuthMethod = atoi(buf);          settings->DefaultAuthMethod = atoi(buf);
292          if (settings->DefaultAuthMethod != SSH_AUTH_PASSWORD          if (settings->DefaultAuthMethod != SSH_AUTH_PASSWORD
293                  && settings->DefaultAuthMethod != SSH_AUTH_RSA           && settings->DefaultAuthMethod != SSH_AUTH_RSA
294                  && settings->DefaultAuthMethod != SSH_AUTH_TIS  // add (2005.3.12 yutaka)           && settings->DefaultAuthMethod != SSH_AUTH_TIS  // add (2005.3.12 yutaka)
295                  && settings->DefaultAuthMethod != SSH_AUTH_RHOSTS) {           && settings->DefaultAuthMethod != SSH_AUTH_RHOSTS) {
296                  /* this default can never be SSH_AUTH_RHOSTS_RSA because that is not a                  /* this default can never be SSH_AUTH_RHOSTS_RSA because that is not a
297                     selection in the dialog box; SSH_AUTH_RHOSTS_RSA is automatically chosen                     selection in the dialog box; SSH_AUTH_RHOSTS_RSA is automatically chosen
298                     when the dialog box has rhosts selected and an host private key file                     when the dialog box has rhosts selected and an host private key file
# Line 301  static void read_ssh_options(PTInstVar p Line 302  static void read_ssh_options(PTInstVar p
302    
303          buf[0] = 0;          buf[0] = 0;
304          GetPrivateProfileString("TTSSH", "LogLevel", "", buf, sizeof(buf),          GetPrivateProfileString("TTSSH", "LogLevel", "", buf, sizeof(buf),
305                                                          fileName);                                  fileName);
306          settings->LogLevel = atoi(buf);          settings->LogLevel = atoi(buf);
307    
308          buf[0] = 0;          buf[0] = 0;
309          GetPrivateProfileString("TTSSH", "WriteBufferSize", "", buf,          GetPrivateProfileString("TTSSH", "WriteBufferSize", "", buf,
310                                                          sizeof(buf), fileName);                                  sizeof(buf), fileName);
311          settings->WriteBufferSize = atoi(buf);          settings->WriteBufferSize = atoi(buf);
312          if (settings->WriteBufferSize <= 0) {          if (settings->WriteBufferSize <= 0) {
313                  settings->WriteBufferSize = 2 * 1024 * 1024;                  settings->WriteBufferSize = 2 * 1024 * 1024;
# Line 340  static void write_ssh_options(PTInstVar Line 341  static void write_ssh_options(PTInstVar
341          char buf[1024];          char buf[1024];
342    
343          WritePrivateProfileString("TTSSH", "Enabled",          WritePrivateProfileString("TTSSH", "Enabled",
344                                                            settings->Enabled ? "1" : "0", fileName);                                    settings->Enabled ? "1" : "0", fileName);
345    
346          _itoa(settings->CompressionLevel, buf, 10);          _itoa(settings->CompressionLevel, buf, 10);
347          WritePrivateProfileString("TTSSH", "Compression", buf, fileName);          WritePrivateProfileString("TTSSH", "Compression", buf, fileName);
348    
349          WritePrivateProfileString("TTSSH", "DefaultUserName",          WritePrivateProfileString("TTSSH", "DefaultUserName",
350                                                            settings->DefaultUserName, fileName);                                    settings->DefaultUserName, fileName);
351    
352          if (copy_forward) {          if (copy_forward) {
353                  WritePrivateProfileString("TTSSH", "DefaultForwarding",                  WritePrivateProfileString("TTSSH", "DefaultForwarding",
354                                                                    settings->DefaultForwarding, fileName);                                            settings->DefaultForwarding, fileName);
355          }          }
356    
357          WritePrivateProfileString("TTSSH", "CipherOrder",          WritePrivateProfileString("TTSSH", "CipherOrder",
358                                                            settings->CipherOrder, fileName);                                    settings->CipherOrder, fileName);
359    
360          WritePrivateProfileString("TTSSH", "KnownHostsFiles",          WritePrivateProfileString("TTSSH", "KnownHostsFiles",
361                                                            settings->KnownHostsFiles, fileName);                                    settings->KnownHostsFiles, fileName);
362    
363          WritePrivateProfileString("TTSSH", "DefaultRhostsLocalUserName",          WritePrivateProfileString("TTSSH", "DefaultRhostsLocalUserName",
364                                                            settings->DefaultRhostsLocalUserName,                                    settings->DefaultRhostsLocalUserName,
365                                                            fileName);                                    fileName);
366    
367          WritePrivateProfileString("TTSSH", "DefaultRhostsHostPrivateKeyFile",          WritePrivateProfileString("TTSSH", "DefaultRhostsHostPrivateKeyFile",
368                                                            settings->DefaultRhostsHostPrivateKeyFile,                                    settings->DefaultRhostsHostPrivateKeyFile,
369                                                            fileName);                                    fileName);
370    
371          WritePrivateProfileString("TTSSH", "DefaultRSAPrivateKeyFile",          WritePrivateProfileString("TTSSH", "DefaultRSAPrivateKeyFile",
372                                                            settings->DefaultRSAPrivateKeyFile,                                    settings->DefaultRSAPrivateKeyFile,
373                                                            fileName);                                    fileName);
374    
375          _itoa(settings->DefaultAuthMethod, buf, 10);          _itoa(settings->DefaultAuthMethod, buf, 10);
376          WritePrivateProfileString("TTSSH", "DefaultAuthMethod", buf, fileName);          WritePrivateProfileString("TTSSH", "DefaultAuthMethod", buf, fileName);
# Line 381  static void write_ssh_options(PTInstVar Line 382  static void write_ssh_options(PTInstVar
382          WritePrivateProfileString("TTSSH", "WriteBufferSize", buf, fileName);          WritePrivateProfileString("TTSSH", "WriteBufferSize", buf, fileName);
383    
384          WritePrivateProfileString("TTSSH", "LocalForwardingIdentityCheck",          WritePrivateProfileString("TTSSH", "LocalForwardingIdentityCheck",
385                                                            settings->                                    settings->LocalForwardingIdentityCheck ? "1" : "0",
386                                                            LocalForwardingIdentityCheck ? "1" : "0",                                    fileName);
                                                           fileName);  
387    
388          // SSH protocol version (2004.10.11 yutaka)          // SSH protocol version (2004.10.11 yutaka)
389          WritePrivateProfileString("TTSSH", "ProtocolVersion",          WritePrivateProfileString("TTSSH", "ProtocolVersion",
390                  settings->ssh_protocol_version==2 ? "2" : "1",              settings->ssh_protocol_version==2 ? "2" : "1",
391                  fileName);              fileName);
392    
393          // SSH heartbeat time(second) (2004.12.11 yutaka)          // SSH heartbeat time(second) (2004.12.11 yutaka)
394          _snprintf_s(buf, sizeof(buf), _TRUNCATE,          _snprintf_s(buf, sizeof(buf), _TRUNCATE,
395                  "%d", settings->ssh_heartbeat_overtime);                      "%d", settings->ssh_heartbeat_overtime);
396          WritePrivateProfileString("TTSSH", "HeartBeat", buf, fileName);          WritePrivateProfileString("TTSSH", "HeartBeat", buf, fileName);
397    
398          // SSH2 keyboard-interactive (2005.1.23 yutaka)          // SSH2 keyboard-interactive (2005.1.23 yutaka)
399          WritePrivateProfileString("TTSSH", "KeyboardInteractive",          WritePrivateProfileString("TTSSH", "KeyboardInteractive",
400                  settings->ssh2_keyboard_interactive ? "1" : "0",              settings->ssh2_keyboard_interactive ? "1" : "0",
401                  fileName);              fileName);
402    
403          // Remember password (2006.8.5 yutaka)          // Remember password (2006.8.5 yutaka)
404          WritePrivateProfileString("TTSSH", "RememberPassword",          WritePrivateProfileString("TTSSH", "RememberPassword",
405                  settings->remember_password ? "1" : "0",              settings->remember_password ? "1" : "0",
406                  fileName);              fileName);
407  }  }
408    
409    
# Line 456  static unsigned short find_local_port(PT Line 456  static unsigned short find_local_port(PT
456                          }                          }
457    
458                          if (bind(connecter, res->ai_addr, res->ai_addrlen) !=                          if (bind(connecter, res->ai_addr, res->ai_addrlen) !=
459                                  SOCKET_ERROR) {                              SOCKET_ERROR) {
460                                  return port;                                  return port;
461                                  freeaddrinfo(res0);                                  freeaddrinfo(res0);
462                                  closesocket(connecter);                                  closesocket(connecter);
# Line 486  static unsigned short find_local_port(PT Line 486  static unsigned short find_local_port(PT
486                  }                  }
487    
488                  if (bind                  if (bind
489                          (connecter, (struct sockaddr FAR *) &connecter_addr,                      (connecter, (struct sockaddr FAR *) &connecter_addr,
490                           sizeof(connecter_addr)) != SOCKET_ERROR) {                       sizeof(connecter_addr)) != SOCKET_ERROR) {
491                          closesocket(connecter);                      closesocket(connecter);
492                          return connecter_addr.sin_port;                          return connecter_addr.sin_port;
493                  } else if (WSAGetLastError() != WSAEADDRINUSE) {                  } else if (WSAGetLastError() != WSAEADDRINUSE) {
494                          closesocket(connecter);                          closesocket(connecter);
# Line 503  static unsigned short find_local_port(PT Line 503  static unsigned short find_local_port(PT
503  }  }
504    
505  static int PASCAL FAR TTXconnect(SOCKET s,  static int PASCAL FAR TTXconnect(SOCKET s,
506                                                                   const struct sockaddr FAR * name,                                   const struct sockaddr FAR * name,
507                                                                   int namelen)                                   int namelen)
508  {  {
509          GET_VAR();          GET_VAR();
510    
# Line 530  static int PASCAL FAR TTXconnect(SOCKET Line 530  static int PASCAL FAR TTXconnect(SOCKET
530  #if 0                                                   /* symbol "in6addr_any" is not included in wsock32.lib */  #if 0                                                   /* symbol "in6addr_any" is not included in wsock32.lib */
531                          /* if wsock32.lib will be linked, we can't refer "in6addr_any" */                          /* if wsock32.lib will be linked, we can't refer "in6addr_any" */
532                          ((struct sockaddr_in6 FAR *) &ss)->sin6_addr = in6addr_any;                          ((struct sockaddr_in6 FAR *) &ss)->sin6_addr = in6addr_any;
533  #eles  #else
534                          memset(&((struct sockaddr_in6 FAR *) &ss)->sin6_addr, 0,                          memset(&((struct sockaddr_in6 FAR *) &ss)->sin6_addr, 0,
535                                     sizeof(struct in_addr6));                                 sizeof(struct in_addr6));
536  #endif                                                  /* 0 */  #endif                                                  /* 0 */
537                          ((struct sockaddr_in6 FAR *) &ss)->sin6_port =                          ((struct sockaddr_in6 FAR *) &ss)->sin6_port =
538                                  htons(find_local_port(pvar));                                  htons(find_local_port(pvar));
# Line 563  static int PASCAL FAR TTXconnect(SOCKET Line 563  static int PASCAL FAR TTXconnect(SOCKET
563  }  }
564    
565  static int PASCAL FAR TTXWSAAsyncSelect(SOCKET s, HWND hWnd, u_int wMsg,  static int PASCAL FAR TTXWSAAsyncSelect(SOCKET s, HWND hWnd, u_int wMsg,
566                                                                                  long lEvent)                                          long lEvent)
567  {  {
568          GET_VAR();          GET_VAR();
569    
# Line 598  static int PASCAL FAR TTXrecv(SOCKET s, Line 598  static int PASCAL FAR TTXrecv(SOCKET s,
598  }  }
599    
600  static int PASCAL FAR TTXsend(SOCKET s, char const FAR * buf, int len,  static int PASCAL FAR TTXsend(SOCKET s, char const FAR * buf, int len,
601                                                            int flags)                                int flags)
602  {  {
603          GET_VAR();          GET_VAR();
604    
# Line 618  void notify_established_secure_connectio Line 618  void notify_established_secure_connectio
618          // 16x16 のアイコンを明示的に取得するようにした (2006.8.9 maya)          // 16x16 のアイコンを明示的に取得するようにした (2006.8.9 maya)
619          if (SecureLargeIcon == NULL) {          if (SecureLargeIcon == NULL) {
620                  SecureLargeIcon = LoadImage(hInst, MAKEINTRESOURCE(IDI_SECURETT),                  SecureLargeIcon = LoadImage(hInst, MAKEINTRESOURCE(IDI_SECURETT),
621                                                                          IMAGE_ICON, 0, 0, LR_DEFAULTCOLOR);                                              IMAGE_ICON, 0, 0, LR_DEFAULTCOLOR);
622          }          }
623          if (SecureSmallIcon == NULL) {          if (SecureSmallIcon == NULL) {
624                  SecureSmallIcon = LoadImage(hInst, MAKEINTRESOURCE(IDI_SECURETT),                  SecureSmallIcon = LoadImage(hInst, MAKEINTRESOURCE(IDI_SECURETT),
625                                                                          IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);                                              IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);
626          }          }
627    
628          if (SecureLargeIcon != NULL && SecureSmallIcon != NULL) {          if (SecureLargeIcon != NULL && SecureSmallIcon != NULL) {
# Line 631  void notify_established_secure_connectio Line 631  void notify_established_secure_connectio
631                          (HICON) GetClassLong(pvar->NotificationWindow, GCL_HICON);                          (HICON) GetClassLong(pvar->NotificationWindow, GCL_HICON);
632                  pvar->OldSmallIcon =                  pvar->OldSmallIcon =
633                          (HICON) SendMessage(pvar->NotificationWindow, WM_GETICON,                          (HICON) SendMessage(pvar->NotificationWindow, WM_GETICON,
634                                                                  ICON_SMALL, 0);                                              ICON_SMALL, 0);
635    
636                  PostMessage(pvar->NotificationWindow, WM_SETICON, ICON_BIG,                  PostMessage(pvar->NotificationWindow, WM_SETICON, ICON_BIG,
637                                          (LPARAM) SecureLargeIcon);                              (LPARAM) SecureLargeIcon);
638                  PostMessage(pvar->NotificationWindow, WM_SETICON, ICON_SMALL,                  PostMessage(pvar->NotificationWindow, WM_SETICON, ICON_SMALL,
639                                          (LPARAM) SecureSmallIcon);                              (LPARAM) SecureSmallIcon);
640          }          }
641    
642          notify_verbose_message(pvar, "Entering secure mode",          notify_verbose_message(pvar, "Entering secure mode",
643                                                     LOG_LEVEL_VERBOSE);                                 LOG_LEVEL_VERBOSE);
644  }  }
645    
646  void notify_closed_connection(PTInstVar pvar)  void notify_closed_connection(PTInstVar pvar)
# Line 650  void notify_closed_connection(PTInstVar Line 650  void notify_closed_connection(PTInstVar
650          HOSTS_notify_disconnecting(pvar);          HOSTS_notify_disconnecting(pvar);
651    
652          PostMessage(pvar->NotificationWindow, WM_USER_COMMNOTIFY,          PostMessage(pvar->NotificationWindow, WM_USER_COMMNOTIFY,
653                                  pvar->socket, MAKELPARAM(FD_CLOSE, 0));                      pvar->socket, MAKELPARAM(FD_CLOSE, 0));
654    
655  }  }
656    
# Line 677  void notify_nonfatal_error(PTInstVar pva Line 677  void notify_nonfatal_error(PTInstVar pva
677                  // メッセージボックスを出現させる。(2006.6.11 yutaka)                  // メッセージボックスを出現させる。(2006.6.11 yutaka)
678                  if (pvar->NotificationWindow == NULL) {                  if (pvar->NotificationWindow == NULL) {
679                          UTIL_get_lang_msg("MSG_ERROR_NONFAITAL", pvar,                          UTIL_get_lang_msg("MSG_ERROR_NONFAITAL", pvar,
680                                                            "Tera Term: not fatal error");                                            "Tera Term: not fatal error");
681                          MessageBox(NULL, msg, pvar->ts->UIMsg, MB_OK|MB_ICONINFORMATION);                          MessageBox(NULL, msg, pvar->ts->UIMsg, MB_OK|MB_ICONINFORMATION);
682                          msg[0] = '\0';                          msg[0] = '\0';
683    
684                  } else {                  } else {
685                          PostMessage(pvar->NotificationWindow, WM_COMMAND,                          PostMessage(pvar->NotificationWindow, WM_COMMAND,
686                                                  ID_SSHASYNCMESSAGEBOX, 0);                                      ID_SSHASYNCMESSAGEBOX, 0);
687                  }                  }
688          }          }
689          if (msg[0] != 0) {          if (msg[0] != 0) {
# Line 707  void notify_fatal_error(PTInstVar pvar, Line 707  void notify_fatal_error(PTInstVar pvar,
707                  HOSTS_notify_disconnecting(pvar);                  HOSTS_notify_disconnecting(pvar);
708    
709                  PostMessage(pvar->NotificationWindow, WM_USER_COMMNOTIFY,                  PostMessage(pvar->NotificationWindow, WM_USER_COMMNOTIFY,
710                                          pvar->socket, MAKELPARAM(FD_CLOSE,                              pvar->socket, MAKELPARAM(FD_CLOSE,
711                                                                                           (pvar->PWSAGetLastError) ()));                                                       (pvar->PWSAGetLastError) ()));
712          }          }
713  }  }
714    
# Line 720  void notify_verbose_message(PTInstVar pv Line 720  void notify_verbose_message(PTInstVar pv
720    
721                  get_teraterm_dir_relative_name(buf, NUM_ELEM(buf), "TTSSH.LOG");                  get_teraterm_dir_relative_name(buf, NUM_ELEM(buf), "TTSSH.LOG");
722                  file = _open(buf, _O_RDWR | _O_APPEND | _O_CREAT | _O_TEXT,                  file = _open(buf, _O_RDWR | _O_APPEND | _O_CREAT | _O_TEXT,
723                                           _S_IREAD | _S_IWRITE);                               _S_IREAD | _S_IWRITE);
724    
725                  if (file >= 0) {                  if (file >= 0) {
726                          _write(file, msg, strlen(msg));                          _write(file, msg, strlen(msg));
# Line 786  static void PASCAL FAR TTXCloseTCP(TTXSo Line 786  static void PASCAL FAR TTXCloseTCP(TTXSo
786                  pvar->socket = INVALID_SOCKET;                  pvar->socket = INVALID_SOCKET;
787    
788                  notify_verbose_message(pvar, "Terminating SSH session...",                  notify_verbose_message(pvar, "Terminating SSH session...",
789                                                             LOG_LEVEL_VERBOSE);                                         LOG_LEVEL_VERBOSE);
790    
791                  *hooks->Precv = pvar->Precv;                  *hooks->Precv = pvar->Precv;
792                  *hooks->Psend = pvar->Psend;                  *hooks->Psend = pvar->Psend;
# Line 806  static void enable_dlg_items(HWND dlg, i Line 806  static void enable_dlg_items(HWND dlg, i
806  }  }
807    
808  static BOOL CALLBACK TTXHostDlg(HWND dlg, UINT msg, WPARAM wParam,  static BOOL CALLBACK TTXHostDlg(HWND dlg, UINT msg, WPARAM wParam,
809                                                                  LPARAM lParam)                                  LPARAM lParam)
810  {  {
811          static char *ssh_version[] = {"SSH1", "SSH2", NULL};          static char *ssh_version[] = {"SSH1", "SSH2", NULL};
812          PGetHNRec GetHNRec;          PGetHNRec GetHNRec;
# Line 884  static BOOL CALLBACK TTXHostDlg(HWND dlg Line 884  static BOOL CALLBACK TTXHostDlg(HWND dlg
884                  do {                  do {
885                          _snprintf_s(&EntName[4], sizeof(EntName)-4, _TRUNCATE, "%d", i);                          _snprintf_s(&EntName[4], sizeof(EntName)-4, _TRUNCATE, "%d", i);
886                          GetPrivateProfileString("Hosts", EntName, "",                          GetPrivateProfileString("Hosts", EntName, "",
887                                                                          TempHost, sizeof(TempHost),                                                  TempHost, sizeof(TempHost),
888                                                                          GetHNRec->SetupFN);                                                  GetHNRec->SetupFN);
889                          if (strlen(TempHost) > 0)                          if (strlen(TempHost) > 0)
890                                  SendDlgItemMessage(dlg, IDC_HOSTNAME, CB_ADDSTRING,                                  SendDlgItemMessage(dlg, IDC_HOSTNAME, CB_ADDSTRING,
891                                                                     0, (LPARAM) TempHost);                                                     0, (LPARAM) TempHost);
892                          i++;                          i++;
893                  } while ((i <= 99) && (strlen(TempHost) > 0));                  } while ((i <= 99) && (strlen(TempHost) > 0));
894    
895                  SendDlgItemMessage(dlg, IDC_HOSTNAME, EM_LIMITTEXT,                  SendDlgItemMessage(dlg, IDC_HOSTNAME, EM_LIMITTEXT,
896                                                     HostNameMaxLength - 1, 0);                                     HostNameMaxLength - 1, 0);
897    
898                  SendDlgItemMessage(dlg, IDC_HOSTNAME, CB_SETCURSEL, 0, 0);                  SendDlgItemMessage(dlg, IDC_HOSTNAME, CB_SETCURSEL, 0, 0);
899    
900                  CheckRadioButton(dlg, IDC_HOSTTELNET, IDC_HOSTOTHER,                  CheckRadioButton(dlg, IDC_HOSTTELNET, IDC_HOSTOTHER,
901                                                   pvar->settings.Enabled ? IDC_HOSTSSH : GetHNRec->                                   pvar->settings.Enabled ? IDC_HOSTSSH : GetHNRec->
902                                                   Telnet ? IDC_HOSTTELNET : IDC_HOSTOTHER);                                   Telnet ? IDC_HOSTTELNET : IDC_HOSTOTHER);
903                  SendDlgItemMessage(dlg, IDC_HOSTTCPPORT, EM_LIMITTEXT, 5, 0);                  SendDlgItemMessage(dlg, IDC_HOSTTCPPORT, EM_LIMITTEXT, 5, 0);
904                  SetDlgItemInt(dlg, IDC_HOSTTCPPORT, GetHNRec->TCPPort, FALSE);                  SetDlgItemInt(dlg, IDC_HOSTTCPPORT, GetHNRec->TCPPort, FALSE);
905  #ifndef NO_INET6  #ifndef NO_INET6
906                  for (i = 0; ProtocolFamilyList[i]; ++i) {                  for (i = 0; ProtocolFamilyList[i]; ++i) {
907                          SendDlgItemMessage(dlg, IDC_HOSTTCPPROTOCOL, CB_ADDSTRING,                          SendDlgItemMessage(dlg, IDC_HOSTTCPPROTOCOL, CB_ADDSTRING,
908                                                             0, (LPARAM) ProtocolFamilyList[i]);                                             0, (LPARAM) ProtocolFamilyList[i]);
909                  }                  }
910                  SendDlgItemMessage(dlg, IDC_HOSTTCPPROTOCOL, EM_LIMITTEXT,                  SendDlgItemMessage(dlg, IDC_HOSTTCPPROTOCOL, EM_LIMITTEXT,
911                                                     ProtocolFamilyMaxLength - 1, 0);                                     ProtocolFamilyMaxLength - 1, 0);
912                  SendDlgItemMessage(dlg, IDC_HOSTTCPPROTOCOL, CB_SETCURSEL, 0, 0);                  SendDlgItemMessage(dlg, IDC_HOSTTCPPROTOCOL, CB_SETCURSEL, 0, 0);
913  #endif                                                  /* NO_INET6 */  #endif                                                  /* NO_INET6 */
914    
915                  /////// SSH version                  /////// SSH version
916                  for (i = 0; ssh_version[i]; ++i) {                  for (i = 0; ssh_version[i]; ++i) {
917                          SendDlgItemMessage(dlg, IDC_SSH_VERSION, CB_ADDSTRING,                          SendDlgItemMessage(dlg, IDC_SSH_VERSION, CB_ADDSTRING,
918                                                             0, (LPARAM) ssh_version[i]);                                             0, (LPARAM) ssh_version[i]);
919                  }                  }
920                  SendDlgItemMessage(dlg, IDC_SSH_VERSION, EM_LIMITTEXT,                  SendDlgItemMessage(dlg, IDC_SSH_VERSION, EM_LIMITTEXT,
921                                                     NUM_ELEM(ssh_version) - 1, 0);                                     NUM_ELEM(ssh_version) - 1, 0);
922    
923                  if (pvar->settings.ssh_protocol_version == 1) {                  if (pvar->settings.ssh_protocol_version == 1) {
924                          SendDlgItemMessage(dlg, IDC_SSH_VERSION, CB_SETCURSEL, 0, 0); // SSH1                          SendDlgItemMessage(dlg, IDC_SSH_VERSION, CB_SETCURSEL, 0, 0); // SSH1
# Line 945  static BOOL CALLBACK TTXHostDlg(HWND dlg Line 945  static BOOL CALLBACK TTXHostDlg(HWND dlg
945                                          strncat_s(EntName, sizeof(EntName), ComPortDesc[i], _TRUNCATE);                                          strncat_s(EntName, sizeof(EntName), ComPortDesc[i], _TRUNCATE);
946                                  }                                  }
947                                  SendDlgItemMessage(dlg, IDC_HOSTCOM, CB_ADDSTRING,                                  SendDlgItemMessage(dlg, IDC_HOSTCOM, CB_ADDSTRING,
948                                                                     0, (LPARAM)EntName);                                                     0, (LPARAM)EntName);
949                                  j++;                                  j++;
950                                  if (GetHNRec->ComPort == ComPortTable[i])                                  if (GetHNRec->ComPort == ComPortTable[i])
951                                          w = j;                                          w = j;
# Line 955  static BOOL CALLBACK TTXHostDlg(HWND dlg Line 955  static BOOL CALLBACK TTXHostDlg(HWND dlg
955                          for (i = 1; i <= GetHNRec->MaxComPort; i++) {                          for (i = 1; i <= GetHNRec->MaxComPort; i++) {
956                                  _snprintf_s(&EntName[3], sizeof(EntName)-3, _TRUNCATE, "%d", i);                                  _snprintf_s(&EntName[3], sizeof(EntName)-3, _TRUNCATE, "%d", i);
957                                  SendDlgItemMessage(dlg, IDC_HOSTCOM, CB_ADDSTRING,                                  SendDlgItemMessage(dlg, IDC_HOSTCOM, CB_ADDSTRING,
958                                                                     0, (LPARAM) EntName);                                                     0, (LPARAM) EntName);
959                                  j++;                                  j++;
960                                  if (GetHNRec->ComPort == i)                                  if (GetHNRec->ComPort == i)
961                                          w = j;                                          w = j;
# Line 970  static BOOL CALLBACK TTXHostDlg(HWND dlg Line 970  static BOOL CALLBACK TTXHostDlg(HWND dlg
970                  }                  }
971    
972                  CheckRadioButton(dlg, IDC_HOSTTCPIP, IDC_HOSTSERIAL,                  CheckRadioButton(dlg, IDC_HOSTTCPIP, IDC_HOSTSERIAL,
973                                                   IDC_HOSTTCPIP + GetHNRec->PortType - 1);                                   IDC_HOSTTCPIP + GetHNRec->PortType - 1);
974    
975                  if (GetHNRec->PortType == IdTCPIP) {                  if (GetHNRec->PortType == IdTCPIP) {
976                          enable_dlg_items(dlg, IDC_HOSTCOMLABEL, IDC_HOSTCOM, FALSE);                          enable_dlg_items(dlg, IDC_HOSTCOMLABEL, IDC_HOSTCOM, FALSE);
# Line 981  static BOOL CALLBACK TTXHostDlg(HWND dlg Line 981  static BOOL CALLBACK TTXHostDlg(HWND dlg
981  #ifndef NO_INET6  #ifndef NO_INET6
982                  else {                  else {
983                          enable_dlg_items(dlg, IDC_HOSTNAMELABEL, IDC_HOSTTCPPORT,                          enable_dlg_items(dlg, IDC_HOSTNAMELABEL, IDC_HOSTTCPPORT,
984                                                           FALSE);                                           FALSE);
985                          enable_dlg_items(dlg, IDC_HOSTTCPPROTOCOLLABEL,                          enable_dlg_items(dlg, IDC_HOSTTCPPROTOCOLLABEL,
986                                                           IDC_HOSTTCPPROTOCOL, FALSE);                                           IDC_HOSTTCPPROTOCOL, FALSE);
987    
988                          enable_dlg_items(dlg, IDC_SSH_VERSION, IDC_SSH_VERSION, FALSE); // disabled                          enable_dlg_items(dlg, IDC_SSH_VERSION, IDC_SSH_VERSION, FALSE); // disabled
989                          enable_dlg_items(dlg, IDC_SSH_VERSION_LABEL, IDC_SSH_VERSION_LABEL, FALSE); // disabled (2004.11.23 yutaka)                          enable_dlg_items(dlg, IDC_SSH_VERSION_LABEL, IDC_SSH_VERSION_LABEL, FALSE); // disabled (2004.11.23 yutaka)
# Line 1051  static BOOL CALLBACK TTXHostDlg(HWND dlg Line 1051  static BOOL CALLBACK TTXHostDlg(HWND dlg
1051                                                  GetHNRec->TCPPort = i;                                                  GetHNRec->TCPPort = i;
1052                                          } else {                                          } else {
1053                                                  UTIL_get_lang_msg("MSG_TCPPORT_NAN_ERROR", pvar,                                                  UTIL_get_lang_msg("MSG_TCPPORT_NAN_ERROR", pvar,
1054                                                                                    "The TCP port must be a number.");                                                                    "The TCP port must be a number.");
1055                                                  MessageBox(dlg, pvar->ts->UIMsg,                                                  MessageBox(dlg, pvar->ts->UIMsg,
1056                                                                     "Teraterm", MB_OK | MB_ICONEXCLAMATION);                                                             "Teraterm", MB_OK | MB_ICONEXCLAMATION);
1057                                                  return TRUE;                                                  return TRUE;
1058                                          }                                          }
1059  #ifndef NO_INET6  #ifndef NO_INET6
# Line 1062  static BOOL CALLBACK TTXHostDlg(HWND dlg Line 1062  static BOOL CALLBACK TTXHostDlg(HWND dlg
1062   ((strcmp((str), "IPv4") == 0) ? AF_INET : AF_UNSPEC))   ((strcmp((str), "IPv4") == 0) ? AF_INET : AF_UNSPEC))
1063                                          memset(afstr, 0, sizeof(afstr));                                          memset(afstr, 0, sizeof(afstr));
1064                                          GetDlgItemText(dlg, IDC_HOSTTCPPROTOCOL, afstr,                                          GetDlgItemText(dlg, IDC_HOSTTCPPROTOCOL, afstr,
1065                                                                     sizeof(afstr));                                                         sizeof(afstr));
1066                                          GetHNRec->ProtocolFamily = getaf(afstr);                                          GetHNRec->ProtocolFamily = getaf(afstr);
1067  #endif                                                  /* NO_INET6 */  #endif                                                  /* NO_INET6 */
1068                                          GetHNRec->PortType = IdTCPIP;                                          GetHNRec->PortType = IdTCPIP;
1069                                          GetDlgItemText(dlg, IDC_HOSTNAME, GetHNRec->HostName,                                          GetDlgItemText(dlg, IDC_HOSTNAME, GetHNRec->HostName,
1070                                                                     HostNameMaxLength);                                                         HostNameMaxLength);
1071                                          GetHNRec->Telnet = FALSE;                                          GetHNRec->Telnet = FALSE;
1072                                          pvar->hostdlg_activated = TRUE;                                          pvar->hostdlg_activated = TRUE;
1073                                          pvar->hostdlg_Enabled = FALSE;                                          pvar->hostdlg_Enabled = FALSE;
# Line 1098  static BOOL CALLBACK TTXHostDlg(HWND dlg Line 1098  static BOOL CALLBACK TTXHostDlg(HWND dlg
1098                                          GetHNRec->HostName[0] = 0;                                          GetHNRec->HostName[0] = 0;
1099                                          memset(EntName, 0, sizeof(EntName));                                          memset(EntName, 0, sizeof(EntName));
1100                                          GetDlgItemText(dlg, IDC_HOSTCOM, EntName,                                          GetDlgItemText(dlg, IDC_HOSTCOM, EntName,
1101                                                                     sizeof(EntName) - 1);                                                         sizeof(EntName) - 1);
1102                                          if (strncmp(EntName, "COM", 3) == 0 && EntName[3] != '\0') {                                          if (strncmp(EntName, "COM", 3) == 0 && EntName[3] != '\0') {
1103  #if 0  #if 0
1104                                                  GetHNRec->ComPort = (BYTE) (EntName[3]) - 0x30;                                                  GetHNRec->ComPort = (BYTE) (EntName[3]) - 0x30;
# Line 1135  static BOOL CALLBACK TTXHostDlg(HWND dlg Line 1135  static BOOL CALLBACK TTXHostDlg(HWND dlg
1135    
1136                  case IDC_HOSTTCPIP:                  case IDC_HOSTTCPIP:
1137                          enable_dlg_items(dlg, IDC_HOSTNAMELABEL, IDC_HOSTTCPPORT,                          enable_dlg_items(dlg, IDC_HOSTNAMELABEL, IDC_HOSTTCPPORT,
1138                                                           TRUE);                                           TRUE);
1139  #ifndef NO_INET6  #ifndef NO_INET6
1140                          enable_dlg_items(dlg, IDC_HOSTTCPPROTOCOLLABEL,                          enable_dlg_items(dlg, IDC_HOSTTCPPROTOCOLLABEL,
1141                                                           IDC_HOSTTCPPROTOCOL, TRUE);                                           IDC_HOSTTCPPROTOCOL, TRUE);
1142  #endif                                                  /* NO_INET6 */  #endif                                                  /* NO_INET6 */
1143                          enable_dlg_items(dlg, IDC_HOSTCOMLABEL, IDC_HOSTCOM, FALSE);                          enable_dlg_items(dlg, IDC_HOSTCOMLABEL, IDC_HOSTCOM, FALSE);
1144    
# Line 1156  static BOOL CALLBACK TTXHostDlg(HWND dlg Line 1156  static BOOL CALLBACK TTXHostDlg(HWND dlg
1156                  case IDC_HOSTSERIAL:                  case IDC_HOSTSERIAL:
1157                          enable_dlg_items(dlg, IDC_HOSTCOMLABEL, IDC_HOSTCOM, TRUE);                          enable_dlg_items(dlg, IDC_HOSTCOMLABEL, IDC_HOSTCOM, TRUE);
1158                          enable_dlg_items(dlg, IDC_HOSTNAMELABEL, IDC_HOSTTCPPORT,                          enable_dlg_items(dlg, IDC_HOSTNAMELABEL, IDC_HOSTTCPPORT,
1159                                                           FALSE);                                           FALSE);
1160  #ifndef NO_INET6  #ifndef NO_INET6
1161                          enable_dlg_items(dlg, IDC_HOSTTCPPROTOCOLLABEL,                          enable_dlg_items(dlg, IDC_HOSTTCPPROTOCOLLABEL,
1162                                                           IDC_HOSTTCPPROTOCOL, FALSE);                                           IDC_HOSTTCPPROTOCOL, FALSE);
1163  #endif                                                  /* NO_INET6 */  #endif                                                  /* NO_INET6 */
1164                          enable_dlg_items(dlg, IDC_SSH_VERSION, IDC_SSH_VERSION, FALSE); // disabled                          enable_dlg_items(dlg, IDC_SSH_VERSION, IDC_SSH_VERSION, FALSE); // disabled
1165                          enable_dlg_items(dlg, IDC_SSH_VERSION_LABEL, IDC_SSH_VERSION_LABEL, FALSE); // disabled (2004.11.23 yutaka)                          enable_dlg_items(dlg, IDC_SSH_VERSION_LABEL, IDC_SSH_VERSION_LABEL, FALSE); // disabled (2004.11.23 yutaka)
# Line 1170  static BOOL CALLBACK TTXHostDlg(HWND dlg Line 1170  static BOOL CALLBACK TTXHostDlg(HWND dlg
1170    
1171                  case IDC_HOSTSSH:                  case IDC_HOSTSSH:
1172                          enable_dlg_items(dlg, IDC_SSH_VERSION,                          enable_dlg_items(dlg, IDC_SSH_VERSION,
1173                                                           IDC_SSH_VERSION, TRUE);                                           IDC_SSH_VERSION, TRUE);
1174                          goto hostssh_enabled;                          goto hostssh_enabled;
1175    
1176                  case IDC_HOSTTELNET:                  case IDC_HOSTTELNET:
# Line 1183  hostssh_enabled: Line 1183  hostssh_enabled:
1183                          if (IsDlgButtonChecked(dlg, IDC_HOSTTELNET)) {                          if (IsDlgButtonChecked(dlg, IDC_HOSTTELNET)) {
1184                                  if (GetHNRec != NULL)                                  if (GetHNRec != NULL)
1185                                          SetDlgItemInt(dlg, IDC_HOSTTCPPORT, GetHNRec->TelPort,                                          SetDlgItemInt(dlg, IDC_HOSTTCPPORT, GetHNRec->TelPort,
1186                                                                    FALSE);                                                        FALSE);
1187                          } else if (IsDlgButtonChecked(dlg, IDC_HOSTSSH)) {                          } else if (IsDlgButtonChecked(dlg, IDC_HOSTSSH)) {
1188                                  SetDlgItemInt(dlg, IDC_HOSTTCPPORT, 22, FALSE);                                  SetDlgItemInt(dlg, IDC_HOSTTCPPORT, 22, FALSE);
1189                          }                          }
# Line 1199  hostssh_enabled: Line 1199  hostssh_enabled:
1199  static BOOL FAR PASCAL TTXGetHostName(HWND parent, PGetHNRec rec)  static BOOL FAR PASCAL TTXGetHostName(HWND parent, PGetHNRec rec)
1200  {  {
1201          return (BOOL) DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_HOSTDLG),          return (BOOL) DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_HOSTDLG),
1202                                                                   parent, TTXHostDlg, (LONG) rec);                                       parent, TTXHostDlg, (LONG) rec);
1203  }  }
1204    
1205  static void PASCAL FAR TTXGetUIHooks(TTXUIHooks FAR * hooks)  static void PASCAL FAR TTXGetUIHooks(TTXUIHooks FAR * hooks)
# Line 1232  static void FAR PASCAL TTXWriteINIFile(P Line 1232  static void FAR PASCAL TTXWriteINIFile(P
1232  }  }
1233    
1234  static void read_ssh_options_from_user_file(PTInstVar pvar,  static void read_ssh_options_from_user_file(PTInstVar pvar,
1235                                                                                          char FAR * user_file_name)                                              char FAR * user_file_name)
1236  {  {
1237          if (user_file_name[0] == '.') {          if (user_file_name[0] == '.') {
1238                  read_ssh_options(pvar, user_file_name);                  read_ssh_options(pvar, user_file_name);
# Line 1279  static int parse_option(PTInstVar pvar, Line 1279  static int parse_option(PTInstVar pvar,
1279                  if (MATCH_STR(option + 1, "ssh") == 0) {                  if (MATCH_STR(option + 1, "ssh") == 0) {
1280                          if (option[4] == 0) {                          if (option[4] == 0) {
1281                                  pvar->settings.Enabled = 1;                                  pvar->settings.Enabled = 1;
1282                          } else if (MATCH_STR(option + 4, "-L") == 0                          } else if (MATCH_STR(option + 4, "-L") == 0 ||
1283                                             || MATCH_STR(option + 4, "-R") == 0                                     MATCH_STR(option + 4, "-R") == 0 ||
1284                                             || _stricmp(option + 4, "-X") == 0) {                                     _stricmp(option + 4, "-X") == 0) {
1285                                  if (pvar->settings.DefaultForwarding[0] == 0) {                                  if (pvar->settings.DefaultForwarding[0] == 0) {
1286                                          strncpy_s(pvar->settings.DefaultForwarding,                                          strncpy_s(pvar->settings.DefaultForwarding,
1287                                                  sizeof(pvar->settings.DefaultForwarding),                                                    sizeof(pvar->settings.DefaultForwarding),
1288                                                  option + 5, _TRUNCATE);                                                    option + 5, _TRUNCATE);
1289                                  } else {                                  } else {
1290                                          strncat_s(pvar->settings.DefaultForwarding,                                          strncat_s(pvar->settings.DefaultForwarding,
1291                                                  sizeof(pvar->settings.DefaultForwarding),                                                    sizeof(pvar->settings.DefaultForwarding),
1292                                                  ";", _TRUNCATE);                                                    ";", _TRUNCATE);
1293                                          strncat_s(pvar->settings.DefaultForwarding,                                          strncat_s(pvar->settings.DefaultForwarding,
1294                                                  sizeof(pvar->settings.DefaultForwarding),                                                    sizeof(pvar->settings.DefaultForwarding),
1295                                                  option + 5, _TRUNCATE);                                                    option + 5, _TRUNCATE);
1296                                  }                                  }
1297                          } else if (MATCH_STR(option + 4, "-f=") == 0) {                          } else if (MATCH_STR(option + 4, "-f=") == 0) {
1298                                  read_ssh_options_from_user_file(pvar, option + 7);                                  read_ssh_options_from_user_file(pvar, option + 7);
1299                          } else if (MATCH_STR(option + 4, "-v") == 0) {                          } else if (MATCH_STR(option + 4, "-v") == 0) {
1300                                  pvar->settings.LogLevel = LOG_LEVEL_VERBOSE;                                  pvar->settings.LogLevel = LOG_LEVEL_VERBOSE;
1301                          } else if (_stricmp(option + 4, "-autologin") == 0                          } else if (_stricmp(option + 4, "-autologin") == 0 ||
1302                                             || _stricmp(option + 4, "-autologon") == 0) {                                     _stricmp(option + 4, "-autologon") == 0) {
1303                                  pvar->settings.TryDefaultAuth = TRUE;                                  pvar->settings.TryDefaultAuth = TRUE;
1304    
1305                          } else if (MATCH_STR(option + 4, "-consume=") == 0) {                          } else if (MATCH_STR(option + 4, "-consume=") == 0) {
# Line 1316  static int parse_option(PTInstVar pvar, Line 1316  static int parse_option(PTInstVar pvar,
1316                                  char buf[1024];                                  char buf[1024];
1317    
1318                                  UTIL_get_lang_msg("MSG_UNKNOWN_OPTION_ERROR", pvar,                                  UTIL_get_lang_msg("MSG_UNKNOWN_OPTION_ERROR", pvar,
1319                                                                    "Unrecognized command-line option: %s");                                                    "Unrecognized command-line option: %s");
1320                                  _snprintf_s(buf, sizeof(buf), _TRUNCATE, pvar->ts->UIMsg, option);                                  _snprintf_s(buf, sizeof(buf), _TRUNCATE, pvar->ts->UIMsg, option);
1321    
1322                                  MessageBox(NULL, buf, "TTSSH", MB_OK | MB_ICONEXCLAMATION);                                  MessageBox(NULL, buf, "TTSSH", MB_OK | MB_ICONEXCLAMATION);
# Line 1413  static int parse_option(PTInstVar pvar, Line 1413  static int parse_option(PTInstVar pvar,
1413  }  }
1414    
1415  static void FAR PASCAL TTXParseParam(PCHAR param, PTTSet ts,  static void FAR PASCAL TTXParseParam(PCHAR param, PTTSet ts,
1416                                                                           PCHAR DDETopic)                                       PCHAR DDETopic)
1417  {  {
1418          // スペースを含むファイル名を認識するように修正 (2006.10.7 maya)          // スペースを含むファイル名を認識するように修正 (2006.10.7 maya)
1419          int i;          int i;
# Line 1429  static void FAR PASCAL TTXParseParam(PCH Line 1429  static void FAR PASCAL TTXParseParam(PCH
1429    
1430          for (i = 0; param[i] != 0; i++) {          for (i = 0; param[i] != 0; i++) {
1431                  if (inQuotes ? param[i] == '"'                  if (inQuotes ? param[i] == '"'
1432                                           : (param[i] == ' ' || param[i] == '\t')) {                               : (param[i] == ' ' || param[i] == '\t')) {
1433                          if (option != NULL) {                          if (option != NULL) {
1434                                  char ch = param[i];                                  char ch = param[i];
1435                                  PCHAR Equal;                                  PCHAR Equal;
# Line 1444  static void FAR PASCAL TTXParseParam(PCH Line 1444  static void FAR PASCAL TTXParseParam(PCH
1444                                          strncat_s(buf, buf_len, option, _TRUNCATE);                                          strncat_s(buf, buf_len, option, _TRUNCATE);
1445                                          option[Equal - option + 1] = c;                                          option[Equal - option + 1] = c;
1446                                          strncat_s(buf, buf_len, Equal + 2, _TRUNCATE);                                          strncat_s(buf, buf_len, Equal + 2, _TRUNCATE);
1447                                          if (parse_option                                          if (parse_option(pvar, *buf == '"' ? buf + 1 : buf)) {
                                                 (pvar, *buf == '"' ? buf + 1 : buf)) {  
1448                                                  memset(option, ' ', i + 1 - (option - param));                                                  memset(option, ' ', i + 1 - (option - param));
1449                                          } else {                                          } else {
1450                                                  param[i] = ch;                                                  param[i] = ch;
# Line 1453  static void FAR PASCAL TTXParseParam(PCH Line 1452  static void FAR PASCAL TTXParseParam(PCH
1452                                          free(buf);                                          free(buf);
1453                                  }                                  }
1454                                  else {                                  else {
1455                                          if (parse_option                                          if (parse_option(pvar, *option == '"' ? option + 1 : option)) {
                                                 (pvar, *option == '"' ? option + 1 : option)) {  
1456                                                  memset(option, ' ', i + 1 - (option - param));                                                  memset(option, ' ', i + 1 - (option - param));
1457                                          } else {                                          } else {
1458                                                  param[i] = ch;                                                  param[i] = ch;
# Line 1479  static void FAR PASCAL TTXParseParam(PCH Line 1477  static void FAR PASCAL TTXParseParam(PCH
1477                                  continue;                                  continue;
1478                          }                          }
1479                          if ((option[0] == '-' || option[0] == '/') &&                          if ((option[0] == '-' || option[0] == '/') &&
1480                                  (MATCH_STR(option + 1, "ssh-f=") == 0 ||                              (MATCH_STR(option + 1, "ssh-f=") == 0 ||
1481                                   MATCH_STR(option + 1, "ssh-consume=") == 0 ||                               MATCH_STR(option + 1, "ssh-consume=") == 0 ||
1482                                   MATCH_STR_I(option + 1, "f=") == 0 ||                               MATCH_STR_I(option + 1, "f=") == 0 ||
1483                                   MATCH_STR(option + 1, "keyfile=") == 0)) {                               MATCH_STR(option + 1, "keyfile=") == 0)) {
1484                                  if (param[i] == '"') {                                  if (param[i] == '"') {
1485                                          inQuotes = TRUE;                                          inQuotes = TRUE;
1486                                  }                                  }
# Line 1501  static void FAR PASCAL TTXParseParam(PCH Line 1499  static void FAR PASCAL TTXParseParam(PCH
1499                          strncat_s(buf, buf_len, option, _TRUNCATE);                          strncat_s(buf, buf_len, option, _TRUNCATE);
1500                          option[Equal - option + 1] = c;                          option[Equal - option + 1] = c;
1501                          strncat_s(buf, buf_len, Equal + 2, _TRUNCATE);                          strncat_s(buf, buf_len, Equal + 2, _TRUNCATE);
1502                          if (parse_option                          if (parse_option(pvar, *buf == '"' ? buf + 1 : buf)) {
                                 (pvar, *buf == '"' ? buf + 1 : buf)) {  
1503                                  memset(option, ' ', i + 1 - (option - param));                                  memset(option, ' ', i + 1 - (option - param));
1504                          }                          }
1505                          free(buf);                          free(buf);
# Line 1541  static void PASCAL FAR TTXSetWinSize(int Line 1538  static void PASCAL FAR TTXSetWinSize(int
1538  }  }
1539    
1540  static void insertMenuBeforeItem(HMENU menu, WORD beforeItemID, WORD flags,  static void insertMenuBeforeItem(HMENU menu, WORD beforeItemID, WORD flags,
1541                                                                   WORD newItemID, char FAR * text)                                   WORD newItemID, char FAR * text)
1542  {  {
1543          int i, j;          int i, j;
1544    
# Line 1550  static void insertMenuBeforeItem(HMENU m Line 1547  static void insertMenuBeforeItem(HMENU m
1547    
1548                  for (j = GetMenuItemCount(submenu) - 1; j >= 0; j--) {                  for (j = GetMenuItemCount(submenu) - 1; j >= 0; j--) {
1549                          if (GetMenuItemID(submenu, j) == beforeItemID) {                          if (GetMenuItemID(submenu, j) == beforeItemID) {
1550                                  InsertMenu(submenu, j, MF_BYPOSITION | flags, newItemID,                                  InsertMenu(submenu, j, MF_BYPOSITION | flags, newItemID, text);
                                                    text);  
1551                                  return;                                  return;
1552                          }                          }
1553                  }                  }
# Line 1582  static void PASCAL FAR TTXModifyMenu(HME Line 1578  static void PASCAL FAR TTXModifyMenu(HME
1578  static void append_about_text(HWND dlg, char FAR * prefix, char FAR * msg)  static void append_about_text(HWND dlg, char FAR * prefix, char FAR * msg)
1579  {  {
1580          SendDlgItemMessage(dlg, IDC_ABOUTTEXT, EM_REPLACESEL, 0,          SendDlgItemMessage(dlg, IDC_ABOUTTEXT, EM_REPLACESEL, 0,
1581                                             (LPARAM) prefix);                             (LPARAM) prefix);
1582          SendDlgItemMessage(dlg, IDC_ABOUTTEXT, EM_REPLACESEL, 0, (LPARAM) msg);          SendDlgItemMessage(dlg, IDC_ABOUTTEXT, EM_REPLACESEL, 0, (LPARAM) msg);
1583          SendDlgItemMessage(dlg, IDC_ABOUTTEXT, EM_REPLACESEL, 0,          SendDlgItemMessage(dlg, IDC_ABOUTTEXT, EM_REPLACESEL, 0,
1584                                             (LPARAM) (char FAR *) "\r\n");                             (LPARAM) (char FAR *) "\r\n");
1585  }  }
1586    
1587  // 実行ファイルからバージョン情報を得る (2005.2.28 yutaka)  // 実行ファイルからバージョン情報を得る (2005.2.28 yutaka)
# Line 1623  void get_file_version(char *exefile, int Line 1619  void get_file_version(char *exefile, int
1619    
1620          for (i = 0 ; i < (int)(unLen / sizeof(LANGANDCODEPAGE)) ; i++) {          for (i = 0 ; i < (int)(unLen / sizeof(LANGANDCODEPAGE)) ; i++) {
1621                  _snprintf_s(fmt, sizeof(fmt), _TRUNCATE,                  _snprintf_s(fmt, sizeof(fmt), _TRUNCATE,
1622                          "\\StringFileInfo\\%04x%04x\\FileVersion",                              "\\StringFileInfo\\%04x%04x\\FileVersion",
1623                          lplgcode[i].wLanguage, lplgcode[i].wCodePage);                              lplgcode[i].wLanguage, lplgcode[i].wCodePage);
1624                  VerQueryValue(buf, fmt, &pbuf, &unLen);                  VerQueryValue(buf, fmt, &pbuf, &unLen);
1625                  if (unLen > 0) { // get success                  if (unLen > 0) { // get success
1626                          int n, a, b, c, d;                          int n, a, b, c, d;
# Line 1776  static void init_about_dlg(PTInstVar pva Line 1772  static void init_about_dlg(PTInstVar pva
1772  }  }
1773    
1774  static BOOL CALLBACK TTXAboutDlg(HWND dlg, UINT msg, WPARAM wParam,  static BOOL CALLBACK TTXAboutDlg(HWND dlg, UINT msg, WPARAM wParam,
1775                                                                   LPARAM lParam)                                   LPARAM lParam)
1776  {  {
1777          LOGFONT logfont;          LOGFONT logfont;
1778          HFONT font;          HFONT font;
# Line 1829  static char FAR *get_cipher_name(int cip Line 1825  static char FAR *get_cipher_name(int cip
1825          switch (cipher) {          switch (cipher) {
1826          case SSH_CIPHER_NONE:          case SSH_CIPHER_NONE:
1827                  UTIL_get_lang_msg("DLG_SSHSETUP_CIPHER_BORDER", pvar,                  UTIL_get_lang_msg("DLG_SSHSETUP_CIPHER_BORDER", pvar,
1828                                                    "<ciphers below this line are disabled>");                                    "<ciphers below this line are disabled>");
1829                  return pvar->ts->UIMsg;                  return pvar->ts->UIMsg;
1830          case SSH_CIPHER_RC4:          case SSH_CIPHER_RC4:
1831                  return "RC4";                  return "RC4";
# Line 1861  static void set_move_button_status(HWND Line 1857  static void set_move_button_status(HWND
1857          int curPos = (int) SendMessage(cipherControl, LB_GETCURSEL, 0, 0);          int curPos = (int) SendMessage(cipherControl, LB_GETCURSEL, 0, 0);
1858          int maxPos = (int) SendMessage(cipherControl, LB_GETCOUNT, 0, 0) - 1;          int maxPos = (int) SendMessage(cipherControl, LB_GETCOUNT, 0, 0) - 1;
1859    
1860          EnableWindow(GetDlgItem(dlg, IDC_SSHMOVECIPHERUP), curPos > 0          EnableWindow(GetDlgItem(dlg, IDC_SSHMOVECIPHERUP),
1861                                   && curPos <= maxPos);                       curPos > 0 && curPos <= maxPos);
1862          EnableWindow(GetDlgItem(dlg, IDC_SSHMOVECIPHERDOWN), curPos >= 0          EnableWindow(GetDlgItem(dlg, IDC_SSHMOVECIPHERDOWN),
1863                                   && curPos < maxPos);                       curPos >= 0 && curPos < maxPos);
1864  }  }
1865    
1866  static void init_setup_dlg(PTInstVar pvar, HWND dlg)  static void init_setup_dlg(PTInstVar pvar, HWND dlg)
# Line 1923  static void init_setup_dlg(PTInstVar pva Line 1919  static void init_setup_dlg(PTInstVar pva
1919                    
1920          SendMessage(compressionControl, TBM_SETRANGE, TRUE, MAKELONG(0, 9));          SendMessage(compressionControl, TBM_SETRANGE, TRUE, MAKELONG(0, 9));
1921          SendMessage(compressionControl, TBM_SETPOS, TRUE,          SendMessage(compressionControl, TBM_SETPOS, TRUE,
1922                                  pvar->settings.CompressionLevel);                      pvar->settings.CompressionLevel);
1923    
1924          normalize_cipher_order(pvar->settings.CipherOrder);          normalize_cipher_order(pvar->settings.CipherOrder);
1925    
# Line 1945  static void init_setup_dlg(PTInstVar pva Line 1941  static void init_setup_dlg(PTInstVar pva
1941          if (ch != 0) {          if (ch != 0) {
1942                  pvar->settings.KnownHostsFiles[i] = 0;                  pvar->settings.KnownHostsFiles[i] = 0;
1943                  SetDlgItemText(dlg, IDC_READWRITEFILENAME,                  SetDlgItemText(dlg, IDC_READWRITEFILENAME,
1944                                             pvar->settings.KnownHostsFiles);                                 pvar->settings.KnownHostsFiles);
1945                  pvar->settings.KnownHostsFiles[i] = ch;                  pvar->settings.KnownHostsFiles[i] = ch;
1946                  SetDlgItemText(dlg, IDC_READONLYFILENAME,                  SetDlgItemText(dlg, IDC_READONLYFILENAME,
1947                                             pvar->settings.KnownHostsFiles + i + 1);                                 pvar->settings.KnownHostsFiles + i + 1);
1948          } else {          } else {
1949                  SetDlgItemText(dlg, IDC_READWRITEFILENAME,                  SetDlgItemText(dlg, IDC_READWRITEFILENAME,
1950                                             pvar->settings.KnownHostsFiles);                                 pvar->settings.KnownHostsFiles);
1951          }          }
1952    
1953          // SSH2 HeartBeat(keep-alive)を追加 (2005.2.22 yutaka)          // SSH2 HeartBeat(keep-alive)を追加 (2005.2.22 yutaka)
1954          {          {
1955                  char buf[10];                  char buf[10];
1956                  _snprintf_s(buf, sizeof(buf), _TRUNCATE,                  _snprintf_s(buf, sizeof(buf), _TRUNCATE,
1957                          "%d", pvar->settings.ssh_heartbeat_overtime);                              "%d", pvar->settings.ssh_heartbeat_overtime);
1958                  SetDlgItemText(dlg, IDC_HEARTBEAT_EDIT, buf);                  SetDlgItemText(dlg, IDC_HEARTBEAT_EDIT, buf);
1959          }          }
1960    
1961  }  }
1962    
1963  void get_teraterm_dir_relative_name(char FAR * buf, int bufsize,  void get_teraterm_dir_relative_name(char FAR * buf, int bufsize,
1964                                                                          char FAR * basename)                                      char FAR * basename)
1965  {  {
1966          int filename_start = 0;          int filename_start = 0;
1967          int i;          int i;
1968          int ch;          int ch;
1969    
1970          if (basename[0] == '\\' || basename[0] == '/'          if (basename[0] == '\\' || basename[0] == '/'
1971                  || (basename[0] != 0 && basename[1] == ':')) {           || (basename[0] != 0 && basename[1] == ':')) {
1972                  strncpy_s(buf, bufsize, basename, _TRUNCATE);                  strncpy_s(buf, bufsize, basename, _TRUNCATE);
1973                  return;                  return;
1974          }          }
# Line 1990  void get_teraterm_dir_relative_name(char Line 1986  void get_teraterm_dir_relative_name(char
1986  }  }
1987    
1988  int copy_teraterm_dir_relative_path(char FAR * dest, int destsize,  int copy_teraterm_dir_relative_path(char FAR * dest, int destsize,
1989                                                                          char FAR * basename)                                      char FAR * basename)
1990  {  {
1991          char buf[1024];          char buf[1024];
1992          int filename_start = 0;          int filename_start = 0;
# Line 1998  int copy_teraterm_dir_relative_path(char Line 1994  int copy_teraterm_dir_relative_path(char
1994          int ch, ch2;          int ch, ch2;
1995    
1996          if (basename[0] != '\\' && basename[0] != '/'          if (basename[0] != '\\' && basename[0] != '/'
1997                  && (basename[0] == 0 || basename[1] != ':')) {           && (basename[0] == 0 || basename[1] != ':')) {
1998                  strncpy_s(dest, destsize, basename, _TRUNCATE);                  strncpy_s(dest, destsize, basename, _TRUNCATE);
1999                  return strlen(dest);                  return strlen(dest);
2000          }          }
# Line 2014  int copy_teraterm_dir_relative_path(char Line 2010  int copy_teraterm_dir_relative_path(char
2010                  ch = toupper(buf[i]);                  ch = toupper(buf[i]);
2011                  ch2 = toupper(basename[i]);                  ch2 = toupper(basename[i]);
2012    
2013                  if (ch == ch2                  if (ch == ch2 ||
2014                          || ((ch == '\\' || ch == '/')                      ((ch == '\\' || ch == '/') && (ch2 == '\\' || ch2 == '/'))) {
                                 && (ch2 == '\\' || ch2 == '/'))) {  
2015                  } else {                  } else {
2016                          break;                          break;
2017                  }                  }
# Line 2066  static void complete_setup_dlg(PTInstVar Line 2061  static void complete_setup_dlg(PTInstVar
2061          buf[0] = 0;          buf[0] = 0;
2062          GetDlgItemText(dlg, IDC_READWRITEFILENAME, buf, sizeof(buf));          GetDlgItemText(dlg, IDC_READWRITEFILENAME, buf, sizeof(buf));
2063          j = copy_teraterm_dir_relative_path(pvar->settings.KnownHostsFiles,          j = copy_teraterm_dir_relative_path(pvar->settings.KnownHostsFiles,
2064                                                                                  sizeof(pvar->settings.                                              sizeof(pvar->settings.KnownHostsFiles),
2065                                                                                             KnownHostsFiles), buf);                                              buf);
2066          buf[0] = 0;          buf[0] = 0;
2067          bufindex = 0;          bufindex = 0;
2068          GetDlgItemText(dlg, IDC_READONLYFILENAME, buf, sizeof(buf));          GetDlgItemText(dlg, IDC_READONLYFILENAME, buf, sizeof(buf));
# Line 2090  static void complete_setup_dlg(PTInstVar Line 2085  static void complete_setup_dlg(PTInstVar
2085                  pvar->settings.KnownHostsFiles[j] = ';';                  pvar->settings.KnownHostsFiles[j] = ';';
2086                  j++;                  j++;
2087                  copy_teraterm_dir_relative_path(pvar->settings.KnownHostsFiles + j,                  copy_teraterm_dir_relative_path(pvar->settings.KnownHostsFiles + j,
2088                                                                                  sizeof(pvar->settings.                                                  sizeof(pvar->settings. KnownHostsFiles) - j,
2089                                                                                             KnownHostsFiles) - j,                                                  buf + bufindex);
                                                                                 buf + bufindex);  
2090          }          }
2091    
2092          // get SSH HeartBeat(keep-alive)          // get SSH HeartBeat(keep-alive)
# Line 2119  static void move_cur_sel_delta(HWND list Line 2113  static void move_cur_sel_delta(HWND list
2113                          SendMessage(listbox, LB_GETTEXT, curPos, (LPARAM) buf);                          SendMessage(listbox, LB_GETTEXT, curPos, (LPARAM) buf);
2114                          SendMessage(listbox, LB_DELETESTRING, curPos, 0);                          SendMessage(listbox, LB_DELETESTRING, curPos, 0);
2115                          SendMessage(listbox, LB_INSERTSTRING, newPos,                          SendMessage(listbox, LB_INSERTSTRING, newPos,
2116                                                  (LPARAM) (char FAR *) buf);                                      (LPARAM) (char FAR *) buf);
2117                          SendMessage(listbox, LB_SETCURSEL, newPos, 0);                          SendMessage(listbox, LB_SETCURSEL, newPos, 0);
2118                  }                  }
2119          }          }
2120  }  }
2121    
2122  static int get_keys_file_name(HWND parent, char FAR * buf, int bufsize,  static int get_keys_file_name(HWND parent, char FAR * buf, int bufsize,
2123                                                            int readonly)                                int readonly)
2124  {  {
2125          OPENFILENAME params;          OPENFILENAME params;
2126          char fullname_buf[2048] = "ssh_known_hosts";          char fullname_buf[2048] = "ssh_known_hosts";
# Line 2143  static int get_keys_file_name(HWND paren Line 2137  static int get_keys_file_name(HWND paren
2137          params.lpstrInitialDir = NULL;          params.lpstrInitialDir = NULL;
2138          if (readonly) {          if (readonly) {
2139                  UTIL_get_lang_msg("MSG_OPEN_KNOWNHOSTS_RO_TITLE", pvar,                  UTIL_get_lang_msg("MSG_OPEN_KNOWNHOSTS_RO_TITLE", pvar,
2140                                                    "Choose a read-only known-hosts file to add");                                    "Choose a read-only known-hosts file to add");
2141          }          }
2142          else {          else {
2143                  UTIL_get_lang_msg("MSG_OPEN_KNOWNHOSTS_RW_TITLE", pvar,                  UTIL_get_lang_msg("MSG_OPEN_KNOWNHOSTS_RW_TITLE", pvar,
2144                                                    "Choose a read/write known-hosts file");                                    "Choose a read/write known-hosts file");
2145          }          }
2146          params.lpstrTitle = pvar->ts->UIMsg;          params.lpstrTitle = pvar->ts->UIMsg;
2147          params.Flags = (readonly ? OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST : 0)          params.Flags = (readonly ? OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST : 0)
2148                  | OFN_HIDEREADONLY | (!readonly ? OFN_NOREADONLYRETURN : 0);                       | OFN_HIDEREADONLY | (!readonly ? OFN_NOREADONLYRETURN : 0);
2149          params.lpstrDefExt = NULL;          params.lpstrDefExt = NULL;
2150    
2151          if (GetOpenFileName(&params) != 0) {          if (GetOpenFileName(&params) != 0) {
# Line 2163  static int get_keys_file_name(HWND paren Line 2157  static int get_keys_file_name(HWND paren
2157                  if (err != 0) {                  if (err != 0) {
2158                          char buf[1024];                          char buf[1024];
2159                          UTIL_get_lang_msg("MSG_OPEN_FILEDLG_KNOWNHOSTS_ERROR", pvar,                          UTIL_get_lang_msg("MSG_OPEN_FILEDLG_KNOWNHOSTS_ERROR", pvar,
2160                                                            "Unable to display file dialog box: error %d");                                            "Unable to display file dialog box: error %d");
2161                          _snprintf_s(buf, sizeof(buf), _TRUNCATE, pvar->ts->UIMsg, err);                          _snprintf_s(buf, sizeof(buf), _TRUNCATE, pvar->ts->UIMsg, err);
2162                          MessageBox(parent, buf, "TTSSH Error",                          MessageBox(parent, buf, "TTSSH Error",
2163                                             MB_OK | MB_ICONEXCLAMATION);                                     MB_OK | MB_ICONEXCLAMATION);
2164                  }                  }
2165    
2166                  return 0;                  return 0;
# Line 2199  static void choose_read_only_file(HWND d Line 2193  static void choose_read_only_file(HWND d
2193  }  }
2194    
2195  static BOOL CALLBACK TTXSetupDlg(HWND dlg, UINT msg, WPARAM wParam,  static BOOL CALLBACK TTXSetupDlg(HWND dlg, UINT msg, WPARAM wParam,
2196                                                                   LPARAM lParam)                                   LPARAM lParam)
2197  {  {
2198          LOGFONT logfont;          LOGFONT logfont;
2199          HFONT font;          HFONT font;
# Line 2239  static BOOL CALLBACK TTXSetupDlg(HWND dl Line 2233  static BOOL CALLBACK TTXSetupDlg(HWND dl
2233          case WM_COMMAND:          case WM_COMMAND:
2234                  switch (LOWORD(wParam)) {                  switch (LOWORD(wParam)) {
2235                  case IDOK:                  case IDOK:
2236                          complete_setup_dlg((PTInstVar) GetWindowLong(dlg, DWL_USER),                          complete_setup_dlg((PTInstVar) GetWindowLong(dlg, DWL_USER), dlg);
                                                            dlg);  
2237                          EndDialog(dlg, 1);                          EndDialog(dlg, 1);
2238                          if (DlgSetupFont != NULL) {                          if (DlgSetupFont != NULL) {
2239                                  DeleteObject(DlgSetupFont);                                  DeleteObject(DlgSetupFont);
# Line 2403  static RC4_KEY rc4; Line 2396  static RC4_KEY rc4;
2396    
2397  static void seed_rng(void)  static void seed_rng(void)
2398  {  {
2399      if (RAND_status() != 1)          if (RAND_status() != 1)
2400                  return;                  return;
2401  }  }
2402    
2403  static void arc4random_stir(void)  static void arc4random_stir(void)
2404  {  {
2405      unsigned char rand_buf[SEED_SIZE];          unsigned char rand_buf[SEED_SIZE];
2406      int i;          int i;
2407    
2408      memset(&rc4, 0, sizeof(rc4));          memset(&rc4, 0, sizeof(rc4));
2409          if (RAND_bytes(rand_buf, sizeof(rand_buf)) <= 0) {          if (RAND_bytes(rand_buf, sizeof(rand_buf)) <= 0) {
2410          //fatal("Couldn't obtain random bytes (error %ld)",                  //fatal("Couldn't obtain random bytes (error %ld)",
2411          //    ERR_get_error());                  //    ERR_get_error());
2412          }          }
2413      RC4_set_key(&rc4, sizeof(rand_buf), rand_buf);          RC4_set_key(&rc4, sizeof(rand_buf), rand_buf);
2414    
2415      /*          /*
2416       * Discard early keystream, as per recommendations in:           * Discard early keystream, as per recommendations in:
2417       * http://www.wisdom.weizmann.ac.il/~itsik/RC4/Papers/Rc4_ksa.ps           * http://www.wisdom.weizmann.ac.il/~itsik/RC4/Papers/Rc4_ksa.ps
2418       */           */
2419      for(i = 0; i <= 256; i += sizeof(rand_buf))          for(i = 0; i <= 256; i += sizeof(rand_buf))
2420          RC4(&rc4, sizeof(rand_buf), rand_buf, rand_buf);                  RC4(&rc4, sizeof(rand_buf), rand_buf, rand_buf);
2421    
2422      memset(rand_buf, 0, sizeof(rand_buf));          memset(rand_buf, 0, sizeof(rand_buf));
2423    
2424      rc4_ready = REKEY_BYTES;          rc4_ready = REKEY_BYTES;
2425  }  }
2426    
2427  static unsigned int arc4random(void)  static unsigned int arc4random(void)
2428  {  {
2429      unsigned int r = 0;          unsigned int r = 0;
2430      static int first_time = 1;          static int first_time = 1;
2431    
2432      if (rc4_ready <= 0) {          if (rc4_ready <= 0) {
2433                  if (first_time) {                  if (first_time) {
2434              seed_rng();                          seed_rng();
2435                  }                  }
2436          first_time = 0;                  first_time = 0;
2437          arc4random_stir();                  arc4random_stir();
2438      }          }
2439    
2440      RC4(&rc4, sizeof(r), (unsigned char *)&r, (unsigned char *)&r);          RC4(&rc4, sizeof(r), (unsigned char *)&r, (unsigned char *)&r);
2441    
2442      rc4_ready -= sizeof(r);          rc4_ready -= sizeof(r);
2443    
2444      return(r);          return(r);
2445  }  }
2446    
2447  //  //
# Line 2470  static unsigned int arc4random(void) Line 2463  static unsigned int arc4random(void)
2463   */   */
2464  struct ssh1_3des_ctx  struct ssh1_3des_ctx
2465  {  {
2466          EVP_CIPHER_CTX  k1, k2, k3;          EVP_CIPHER_CTX  k1, k2, k3;
2467  };  };
2468    
2469  static int ssh1_3des_init(EVP_CIPHER_CTX *ctx, const u_char *key, const u_char *iv, int enc)  static int ssh1_3des_init(EVP_CIPHER_CTX *ctx, const u_char *key, const u_char *iv, int enc)
# Line 2612  int uuencode(unsigned char *src, int src Line 2605  int uuencode(unsigned char *src, int src
2605  {  {
2606          char base64[] ="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";          char base64[] ="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
2607          char pad = '=';          char pad = '=';
2608      int datalength = 0;          int datalength = 0;
2609      unsigned char input[3];          unsigned char input[3];
2610      unsigned char output[4];          unsigned char output[4];
2611      int i;          int i;
2612    
2613      while (srclen > 2) {          while (srclen > 2) {
2614          input[0] = *src++;                  input[0] = *src++;
2615          input[1] = *src++;                  input[1] = *src++;
2616          input[2] = *src++;                  input[2] = *src++;
2617          srclen -= 3;                  srclen -= 3;
2618    
2619          output[0] = input[0] >> 2;                  output[0] = input[0] >> 2;
2620          output[1] = ((input[0] & 0x03) << 4) + (input[1] >> 4);                  output[1] = ((input[0] & 0x03) << 4) + (input[1] >> 4);
2621          output[2] = ((input[1] & 0x0f) << 2) + (input[2] >> 6);                  output[2] = ((input[1] & 0x0f) << 2) + (input[2] >> 6);
2622          output[3] = input[2] & 0x3f;                  output[3] = input[2] & 0x3f;
2623                  if (output[0] >= 64 ||                  if (output[0] >= 64 ||
2624                          output[1] >= 64 ||                      output[1] >= 64 ||
2625                          output[2] >= 64 ||                      output[2] >= 64 ||
2626                          output[3] >= 64)                      output[3] >= 64)
2627                          return -1;                          return -1;
2628    
2629          if (datalength + 4 > targsize)                  if (datalength + 4 > targsize)
2630              return (-1);                          return (-1);
2631          target[datalength++] = base64[output[0]];                  target[datalength++] = base64[output[0]];
2632          target[datalength++] = base64[output[1]];                  target[datalength++] = base64[output[1]];
2633          target[datalength++] = base64[output[2]];                  target[datalength++] = base64[output[2]];
2634          target[datalength++] = base64[output[3]];                  target[datalength++] = base64[output[3]];
2635      }          }
2636    
2637      if (srclen != 0) {          if (srclen != 0) {
2638          /* Get what's left. */                  /* Get what's left. */
2639          input[0] = input[1] = input[2] = '\0';                  input[0] = input[1] = input[2] = '\0';
2640          for (i = 0; i < srclen; i++)                  for (i = 0; i < srclen; i++)
2641              input[i] = *src++;                          input[i] = *src++;
2642    
2643          output[0] = input[0] >> 2;                  output[0] = input[0] >> 2;
2644          output[1] = ((input[0] & 0x03) << 4) + (input[1] >> 4);                  output[1] = ((input[0] & 0x03) << 4) + (input[1] >> 4);
2645          output[2] = ((input[1] & 0x0f) << 2) + (input[2] >> 6);                  output[2] = ((input[1] & 0x0f) << 2) + (input[2] >> 6);
2646                  if (output[0] >= 64 ||                  if (output[0] >= 64 ||
2647                          output[1] >= 64 ||                      output[1] >= 64 ||
2648                          output[2] >= 64)                      output[2] >= 64)
2649                          return -1;                          return -1;
2650    
2651          if (datalength + 4 > targsize)                  if (datalength + 4 > targsize)
2652              return (-1);                          return (-1);
2653          target[datalength++] = base64[output[0]];                  target[datalength++] = base64[output[0]];
2654          target[datalength++] = base64[output[1]];                  target[datalength++] = base64[output[1]];
2655          if (srclen == 1)                  if (srclen == 1)
2656              target[datalength++] = pad;                          target[datalength++] = pad;
2657          else                  else
2658              target[datalength++] = base64[output[2]];                          target[datalength++] = base64[output[2]];
2659          target[datalength++] = pad;                  target[datalength++] = pad;
2660      }          }
2661      if (datalength >= targsize)          if (datalength >= targsize)
2662          return (-1);                  return (-1);
2663      target[datalength] = '\0';  /* Returned value doesn't count \0. */          target[datalength] = '\0';  /* Returned value doesn't count \0. */
2664    
2665          return (datalength); // success          return (datalength); // success
2666  }  }
2667    
2668  static BOOL CALLBACK TTXKeyGenerator(HWND dlg, UINT msg, WPARAM wParam,  static BOOL CALLBACK TTXKeyGenerator(HWND dlg, UINT msg, WPARAM wParam,
2669                                                                   LPARAM lParam)                                       LPARAM lParam)
2670  {  {
2671          static enum hostkey_type key_type;          static enum hostkey_type key_type;
2672          char uimsg[MAX_UIMSG];          char uimsg[MAX_UIMSG];
# Line 2807  static BOOL CALLBACK TTXKeyGenerator(HWN Line 2800  static BOOL CALLBACK TTXKeyGenerator(HWN
2800                          ofn.hwndOwner = dlg;                          ofn.hwndOwner = dlg;
2801                          if (key_type == KEY_RSA1) {                          if (key_type == KEY_RSA1) {
2802                                  UTIL_get_lang_msg("FILEDLG_SAVE_PUBLICKEY_RSA1_FILTER", pvar,                                  UTIL_get_lang_msg("FILEDLG_SAVE_PUBLICKEY_RSA1_FILTER", pvar,
2803                                                                    "SSH1 RSA key(identity.pub)\\0identity.pub\\0All Files(*.*)\\0*.*\\0\\0");                                                    "SSH1 RSA key(identity.pub)\\0identity.pub\\0All Files(*.*)\\0*.*\\0\\0");
2804                                  memcpy(uimsg, pvar->ts->UIMsg, sizeof(uimsg));                                  memcpy(uimsg, pvar->ts->UIMsg, sizeof(uimsg));
2805                                  ofn.lpstrFilter = uimsg;                                  ofn.lpstrFilter = uimsg;
2806                                  strncpy_s(filename, sizeof(filename), "identity.pub", _TRUNCATE);                                  strncpy_s(filename, sizeof(filename), "identity.pub", _TRUNCATE);
2807                          } else if (key_type == KEY_RSA) {                          } else if (key_type == KEY_RSA) {
2808                                  UTIL_get_lang_msg("FILEDLG_SAVE_PUBLICKEY_RSA_FILTER", pvar,                                  UTIL_get_lang_msg("FILEDLG_SAVE_PUBLICKEY_RSA_FILTER", pvar,
2809                                                                    "SSH2 RSA key(id_rsa.pub)\\0id_rsa.pub\\0All Files(*.*)\\0*.*\\0\\0");                                                    "SSH2 RSA key(id_rsa.pub)\\0id_rsa.pub\\0All Files(*.*)\\0*.*\\0\\0");
2810                                  memcpy(uimsg, pvar->ts->UIMsg, sizeof(uimsg));                                  memcpy(uimsg, pvar->ts->UIMsg, sizeof(uimsg));
2811                                  ofn.lpstrFilter = uimsg;                                  ofn.lpstrFilter = uimsg;
2812                                  strncpy_s(filename, sizeof(filename), "id_rsa.pub", _TRUNCATE);                                  strncpy_s(filename, sizeof(filename), "id_rsa.pub", _TRUNCATE);
2813                          } else {                          } else {
2814                                  UTIL_get_lang_msg("FILEDLG_SAVE_PUBLICKEY_DSA_FILTER", pvar,                                  UTIL_get_lang_msg("FILEDLG_SAVE_PUBLICKEY_DSA_FILTER", pvar,
2815                                                                    "SSH2 DSA key(id_dsa.pub)\\0id_dsa.pub\\0All Files(*.*)\\0*.*\\0\\0");                                                    "SSH2 DSA key(id_dsa.pub)\\0id_dsa.pub\\0All Files(*.*)\\0*.*\\0\\0");
2816                                  memcpy(uimsg, pvar->ts->UIMsg, sizeof(uimsg));                                  memcpy(uimsg, pvar->ts->UIMsg, sizeof(uimsg));
2817                                  ofn.lpstrFilter = uimsg;                                  ofn.lpstrFilter = uimsg;
2818                                  strncpy_s(filename, sizeof(filename), "id_dsa.pub", _TRUNCATE);                                  strncpy_s(filename, sizeof(filename), "id_dsa.pub", _TRUNCATE);
# Line 2827  static BOOL CALLBACK TTXKeyGenerator(HWN Line 2820  static BOOL CALLBACK TTXKeyGenerator(HWN
2820                          ofn.lpstrFile = filename;                          ofn.lpstrFile = filename;
2821                          ofn.nMaxFile = sizeof(filename);                          ofn.nMaxFile = sizeof(filename);
2822                          UTIL_get_lang_msg("FILEDLG_SAVE_PUBLICKEY_TITLE", pvar,                          UTIL_get_lang_msg("FILEDLG_SAVE_PUBLICKEY_TITLE", pvar,
2823                                                            "Save public key as:");                                            "Save public key as:");
2824                          ofn.lpstrTitle = pvar->ts->UIMsg;                          ofn.lpstrTitle = pvar->ts->UIMsg;
2825                          if (GetSaveFileName(&ofn) == 0) { // failure                          if (GetSaveFileName(&ofn) == 0) { // failure
2826                                  ret = CommDlgExtendedError();                                  ret = CommDlgExtendedError();
# Line 2840  static BOOL CALLBACK TTXKeyGenerator(HWN Line 2833  static BOOL CALLBACK TTXKeyGenerator(HWN
2833                          fp = fopen(filename, "wb");                          fp = fopen(filename, "wb");
2834                          if (fp == NULL) {                          if (fp == NULL) {
2835                                  UTIL_get_lang_msg("MSG_SAVE_KEY_OPENFILE_ERROR", pvar,                                  UTIL_get_lang_msg("MSG_SAVE_KEY_OPENFILE_ERROR", pvar,
2836                                                                    "Can't open key file");                                                    "Can't open key file");
2837                                  strncpy_s(uimsg, sizeof(uimsg), pvar->ts->UIMsg, _TRUNCATE);                                  strncpy_s(uimsg, sizeof(uimsg), pvar->ts->UIMsg, _TRUNCATE);
2838                                  UTIL_get_lang_msg("MSG_ERROR", pvar, "ERROR");                                  UTIL_get_lang_msg("MSG_ERROR", pvar, "ERROR");
2839                                  MessageBox(dlg, uimsg, pvar->ts->UIMsg, MB_OK | MB_ICONEXCLAMATION);                                  MessageBox(dlg, uimsg, pvar->ts->UIMsg, MB_OK | MB_ICONEXCLAMATION);
# Line 2933  public_error: Line 2926  public_error:
2926                          // check matching                          // check matching
2927                          if (strcmp(buf, buf_conf) != 0) {                          if (strcmp(buf, buf_conf) != 0) {
2928                                  UTIL_get_lang_msg("MSG_SAVE_PRIVATE_KEY_MISMATCH_ERROR", pvar,                                  UTIL_get_lang_msg("MSG_SAVE_PRIVATE_KEY_MISMATCH_ERROR", pvar,
2929                                                                    "Two passphrases don't match.");                                                    "Two passphrases don't match.");
2930                                  strncpy_s(uimsg, sizeof(uimsg), pvar->ts->UIMsg, _TRUNCATE);                                  strncpy_s(uimsg, sizeof(uimsg), pvar->ts->UIMsg, _TRUNCATE);
2931                                  UTIL_get_lang_msg("MSG_ERROR", pvar, "ERROR");                                  UTIL_get_lang_msg("MSG_ERROR", pvar, "ERROR");
2932                                  MessageBox(dlg, uimsg, pvar->ts->UIMsg, MB_OK | MB_ICONEXCLAMATION);                                  MessageBox(dlg, uimsg, pvar->ts->UIMsg, MB_OK | MB_ICONEXCLAMATION);
# Line 2943  public_error: Line 2936  public_error:
2936                          // check empty-passphrase (this is warning level)                          // check empty-passphrase (this is warning level)
2937                          if (buf[0] == '\0') {                          if (buf[0] == '\0') {
2938                                  UTIL_get_lang_msg("MSG_SAVE_PRIVATEKEY_EMPTY_WARN", pvar,                                  UTIL_get_lang_msg("MSG_SAVE_PRIVATEKEY_EMPTY_WARN", pvar,
2939                                                                    "Are you sure that you want to use a empty passphrase?");                                                    "Are you sure that you want to use a empty passphrase?");
2940                                  strncpy_s(uimsg, sizeof(uimsg), pvar->ts->UIMsg, _TRUNCATE);                                  strncpy_s(uimsg, sizeof(uimsg), pvar->ts->UIMsg, _TRUNCATE);
2941                                  UTIL_get_lang_msg("MSG_WARNING", pvar, "WARNING");                                  UTIL_get_lang_msg("MSG_WARNING", pvar, "WARNING");
2942                                  ret = MessageBox(dlg, uimsg, pvar->ts->UIMsg, MB_YESNO | MB_ICONWARNING);                                  ret = MessageBox(dlg, uimsg, pvar->ts->UIMsg, MB_YESNO | MB_ICONWARNING);
# Line 2959  public_error: Line 2952  public_error:
2952                          ofn.hwndOwner = dlg;                          ofn.hwndOwner = dlg;
2953                          if (key_type == KEY_RSA1) {                          if (key_type == KEY_RSA1) {
2954                                  UTIL_get_lang_msg("FILEDLG_SAVE_PRIVATEKEY_RSA1_FILTER", pvar,                                  UTIL_get_lang_msg("FILEDLG_SAVE_PRIVATEKEY_RSA1_FILTER", pvar,
2955                                                                    "SSH1 RSA key(identity)\\0identity\\0All Files(*.*)\\0*.*\\0\\0");                                                    "SSH1 RSA key(identity)\\0identity\\0All Files(*.*)\\0*.*\\0\\0");
2956                                  memcpy(uimsg, pvar->ts->UIMsg, sizeof(uimsg));                                  memcpy(uimsg, pvar->ts->UIMsg, sizeof(uimsg));
2957                                  ofn.lpstrFilter = uimsg;                                  ofn.lpstrFilter = uimsg;
2958                                  strncpy_s(filename, sizeof(filename), "identity", _TRUNCATE);                                  strncpy_s(filename, sizeof(filename), "identity", _TRUNCATE);
2959                          } else if (key_type == KEY_RSA) {                          } else if (key_type == KEY_RSA) {
2960                                  UTIL_get_lang_msg("FILEDLG_SAVE_PRIVATEKEY_RSA_FILTER", pvar,                                  UTIL_get_lang_msg("FILEDLG_SAVE_PRIVATEKEY_RSA_FILTER", pvar,
2961                                                                    "SSH2 RSA key(id_rsa)\\0id_rsa\\0All Files(*.*)\\0*.*\\0\\0");                                                    "SSH2 RSA key(id_rsa)\\0id_rsa\\0All Files(*.*)\\0*.*\\0\\0");
2962                                  memcpy(uimsg, pvar->ts->UIMsg, sizeof(uimsg));                                  memcpy(uimsg, pvar->ts->UIMsg, sizeof(uimsg));
2963                                  ofn.lpstrFilter = uimsg;                                  ofn.lpstrFilter = uimsg;
2964                                  strncpy_s(filename, sizeof(filename), "id_rsa", _TRUNCATE);                                  strncpy_s(filename, sizeof(filename), "id_rsa", _TRUNCATE);
2965                          } else {                          } else {
2966                                  UTIL_get_lang_msg("FILEDLG_SAVE_PRIVATEKEY_DSA_FILTER", pvar,                                  UTIL_get_lang_msg("FILEDLG_SAVE_PRIVATEKEY_DSA_FILTER", pvar,
2967                                                                    "SSH2 DSA key(id_dsa)\\0id_dsa\\0All Files(*.*)\\0*.*\\0\\0");                                                    "SSH2 DSA key(id_dsa)\\0id_dsa\\0All Files(*.*)\\0*.*\\0\\0");
2968                                  memcpy(uimsg, pvar->ts->UIMsg, sizeof(uimsg));                                  memcpy(uimsg, pvar->ts->UIMsg, sizeof(uimsg));
2969                                  ofn.lpstrFilter = uimsg;                                  ofn.lpstrFilter = uimsg;
2970                                  strncpy_s(filename, sizeof(filename), "id_dsa", _TRUNCATE);                                  strncpy_s(filename, sizeof(filename), "id_dsa", _TRUNCATE);
# Line 2979  public_error: Line 2972  public_error:
2972                          ofn.lpstrFile = filename;                          ofn.lpstrFile = filename;
2973                          ofn.nMaxFile = sizeof(filename);                          ofn.nMaxFile = sizeof(filename);
2974                          UTIL_get_lang_msg("FILEDLG_SAVE_PRIVATEKEY_TITLE", pvar,                          UTIL_get_lang_msg("FILEDLG_SAVE_PRIVATEKEY_TITLE", pvar,
2975                                                            "Save private key as:");                                            "Save private key as:");
2976                          ofn.lpstrTitle = pvar->ts->UIMsg;                          ofn.lpstrTitle = pvar->ts->UIMsg;
2977                          if (GetSaveFileName(&ofn) == 0) { // failure                          if (GetSaveFileName(&ofn) == 0) { // failure
2978                                  ret = CommDlgExtendedError();                                  ret = CommDlgExtendedError();
# Line 3090  public_error: Line 3083  public_error:
3083                                  fp = fopen(filename, "wb");                                  fp = fopen(filename, "wb");
3084                                  if (fp == NULL) {                                  if (fp == NULL) {
3085                                          UTIL_get_lang_msg("MSG_SAVE_KEY_OPENFILE_ERROR", pvar,                                          UTIL_get_lang_msg("MSG_SAVE_KEY_OPENFILE_ERROR", pvar,
3086                                                                            "Can't open key file");                                                            "Can't open key file");
3087                                          strncpy_s(uimsg, sizeof(uimsg), pvar->ts->UIMsg, _TRUNCATE);                                          strncpy_s(uimsg, sizeof(uimsg), pvar->ts->UIMsg, _TRUNCATE);
3088                                          UTIL_get_lang_msg("MSG_ERROR", pvar, "ERROR");                                          UTIL_get_lang_msg("MSG_ERROR", pvar, "ERROR");
3089                                          MessageBox(dlg, uimsg, pvar->ts->UIMsg, MB_OK | MB_ICONEXCLAMATION);                                          MessageBox(dlg, uimsg, pvar->ts->UIMsg, MB_OK | MB_ICONEXCLAMATION);
# Line 3120  error:; Line 3113  error:;
3113                                  fp = fopen(filename, "w");                                  fp = fopen(filename, "w");
3114                                  if (fp == NULL) {                                  if (fp == NULL) {
3115                                          UTIL_get_lang_msg("MSG_SAVE_KEY_OPENFILE_ERROR", pvar,                                          UTIL_get_lang_msg("MSG_SAVE_KEY_OPENFILE_ERROR", pvar,
3116                                                                            "Can't open key file");                                                            "Can't open key file");
3117                                          strncpy_s(uimsg, sizeof(uimsg), pvar->ts->UIMsg, _TRUNCATE);                                          strncpy_s(uimsg, sizeof(uimsg), pvar->ts->UIMsg, _TRUNCATE);
3118                                          UTIL_get_lang_msg("MSG_ERROR", pvar, "ERROR");                                          UTIL_get_lang_msg("MSG_ERROR", pvar, "ERROR");
3119                                          MessageBox(dlg, uimsg, pvar->ts->UIMsg, MB_OK | MB_ICONEXCLAMATION);                                          MessageBox(dlg, uimsg, pvar->ts->UIMsg, MB_OK | MB_ICONEXCLAMATION);
# Line 3134  error:; Line 3127  error:;
3127                                  }                                  }
3128                                  if (ret == 0) {                                  if (ret == 0) {
3129                                          UTIL_get_lang_msg("MSG_SAVE_KEY_WRITEFILE_ERROR", pvar,                                          UTIL_get_lang_msg("MSG_SAVE_KEY_WRITEFILE_ERROR", pvar,
3130                                                                            "Can't open key file");                                                            "Can't open key file");
3131                                          strncpy_s(uimsg, sizeof(uimsg), pvar->ts->UIMsg, _TRUNCATE);                                          strncpy_s(uimsg, sizeof(uimsg), pvar->ts->UIMsg, _TRUNCATE);
3132                                          UTIL_get_lang_msg("MSG_ERROR", pvar, "ERROR");                                          UTIL_get_lang_msg("MSG_ERROR", pvar, "ERROR");
3133                                          MessageBox(dlg, uimsg, pvar->ts->UIMsg, MB_OK | MB_ICONEXCLAMATION);                                          MessageBox(dlg, uimsg, pvar->ts->UIMsg, MB_OK | MB_ICONEXCLAMATION);
# Line 3169  static int PASCAL FAR TTXProcessCommand( Line 3162  static int PASCAL FAR TTXProcessCommand(
3162                  if (DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_SSHKEYGEN), hWin, TTXKeyGenerator,                  if (DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_SSHKEYGEN), hWin, TTXKeyGenerator,
3163                          (LPARAM) pvar) == -1) {                          (LPARAM) pvar) == -1) {
3164                          UTIL_get_lang_msg("MSG_CREATEWINDOW_KEYGEN_ERROR", pvar,                          UTIL_get_lang_msg("MSG_CREATEWINDOW_KEYGEN_ERROR", pvar,
3165                                                            "Unable to display Key Generator dialog box.");                                            "Unable to display Key Generator dialog box.");
3166                          strncpy_s(uimsg, sizeof(uimsg), pvar->ts->UIMsg, _TRUNCATE);                          strncpy_s(uimsg, sizeof(uimsg), pvar->ts->UIMsg, _TRUNCATE);
3167                          UTIL_get_lang_msg("MSG_TTSSH_ERROR", pvar, "TTSSH Error");                          UTIL_get_lang_msg("MSG_TTSSH_ERROR", pvar, "TTSSH Error");
3168                          MessageBox(hWin, uimsg, pvar->ts->UIMsg, MB_OK | MB_ICONEXCLAMATION);                          MessageBox(hWin, uimsg, pvar->ts->UIMsg, MB_OK | MB_ICONEXCLAMATION);
# Line 3177  static int PASCAL FAR TTXProcessCommand( Line 3170  static int PASCAL FAR TTXProcessCommand(
3170                  return 1;                  return 1;
3171    
3172          case ID_ABOUTMENU:          case ID_ABOUTMENU:
3173                  if (DialogBoxParam                  if (DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_ABOUTDIALOG),
3174                          (hInst, MAKEINTRESOURCE(IDD_ABOUTDIALOG), hWin, TTXAboutDlg,                                     hWin, TTXAboutDlg, (LPARAM) pvar) == -1) {
                          (LPARAM) pvar)  
                         == -1) {  
3175                          UTIL_get_lang_msg("MSG_CREATEWINDOW_ABOUT_ERROR", pvar,                          UTIL_get_lang_msg("MSG_CREATEWINDOW_ABOUT_ERROR", pvar,
3176                                                            "Unable to display About dialog box.");                                            "Unable to display About dialog box.");
3177                          strncpy_s(uimsg, sizeof(uimsg), pvar->ts->UIMsg, _TRUNCATE);                          strncpy_s(uimsg, sizeof(uimsg), pvar->ts->UIMsg, _TRUNCATE);
3178                          UTIL_get_lang_msg("MSG_TTSSH_ERROR", pvar, "TTSSH Error");                          UTIL_get_lang_msg("MSG_TTSSH_ERROR", pvar, "TTSSH Error");
3179                          MessageBox(hWin, uimsg, pvar->ts->UIMsg, MB_OK | MB_ICONEXCLAMATION);                          MessageBox(hWin, uimsg, pvar->ts->UIMsg, MB_OK | MB_ICONEXCLAMATION);
# Line 3192  static int PASCAL FAR TTXProcessCommand( Line 3183  static int PASCAL FAR TTXProcessCommand(
3183                  AUTH_do_cred_dialog(pvar);                  AUTH_do_cred_dialog(pvar);
3184                  return 1;                  return 1;
3185          case ID_SSHSETUPMENU:          case ID_SSHSETUPMENU:
3186                  if (DialogBoxParam                  if (DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_SSHSETUP),
3187                          (hInst, MAKEINTRESOURCE(IDD_SSHSETUP), hWin, TTXSetupDlg,                                     hWin, TTXSetupDlg, (LPARAM) pvar) == -1) {
                          (LPARAM) pvar)  
                         == -1) {  
3188                          UTIL_get_lang_msg("MSG_CREATEWINDOW_SETUP_ERROR", pvar,                          UTIL_get_lang_msg("MSG_CREATEWINDOW_SETUP_ERROR", pvar,
3189                                                            "Unable to display TTSSH Setup dialog box.");                                            "Unable to display TTSSH Setup dialog box.");
3190                          strncpy_s(uimsg, sizeof(uimsg), pvar->ts->UIMsg, _TRUNCATE);                          strncpy_s(uimsg, sizeof(uimsg), pvar->ts->UIMsg, _TRUNCATE);
3191                          UTIL_get_lang_msg("MSG_TTSSH_ERROR", pvar, "TTSSH Error");                          UTIL_get_lang_msg("MSG_TTSSH_ERROR", pvar, "TTSSH Error");
3192                          MessageBox(hWin, uimsg, pvar->ts->UIMsg, MB_OK | MB_ICONEXCLAMATION);                          MessageBox(hWin, uimsg, pvar->ts->UIMsg, MB_OK | MB_ICONEXCLAMATION);
# Line 3343  static void PASCAL FAR TTXSetCommandLine Line 3332  static void PASCAL FAR TTXSetCommandLine
3332                                  pvar->auth_state.cur_cred.method == SSH_AUTH_PASSWORD) {                                  pvar->auth_state.cur_cred.method == SSH_AUTH_PASSWORD) {
3333                                  replace_blank_to_mark(pvar->auth_state.cur_cred.password, mark, sizeof(mark));                                  replace_blank_to_mark(pvar->auth_state.cur_cred.password, mark, sizeof(mark));
3334                                  _snprintf_s(tmp, sizeof(tmp), _TRUNCATE,                                  _snprintf_s(tmp, sizeof(tmp), _TRUNCATE,
3335                                          " /auth=password /user=%s /passwd=%s", pvar->auth_state.user, mark);                                              " /auth=password /user=%s /passwd=%s", pvar->auth_state.user, mark);
3336                                  strncat_s(cmd, cmdlen, tmp, _TRUNCATE);                                  strncat_s(cmd, cmdlen, tmp, _TRUNCATE);
3337    
3338                          } else if (pvar->settings.remember_password &&                          } else if (pvar->settings.remember_password &&
3339                                                  pvar->auth_state.cur_cred.method == SSH_AUTH_RSA) {                                                  pvar->auth_state.cur_cred.method == SSH_AUTH_RSA) {
3340                                  replace_blank_to_mark(pvar->auth_state.cur_cred.password, mark, sizeof(mark));                                  replace_blank_to_mark(pvar->auth_state.cur_cred.password, mark, sizeof(mark));
3341                                  _snprintf_s(tmp, sizeof(tmp), _TRUNCATE,                                  _snprintf_s(tmp, sizeof(tmp), _TRUNCATE,
3342                                          " /auth=publickey /user=%s /passwd=%s", pvar->auth_state.user, mark);                                              " /auth=publickey /user=%s /passwd=%s", pvar->auth_state.user, mark);
3343                                  strncat_s(cmd, cmdlen, tmp, _TRUNCATE);                                  strncat_s(cmd, cmdlen, tmp, _TRUNCATE);
3344    
3345                                  replace_blank_to_mark(pvar->session_settings.DefaultRSAPrivateKeyFile, mark, sizeof(mark));                                  replace_blank_to_mark(pvar->session_settings.DefaultRSAPrivateKeyFile, mark, sizeof(mark));
# Line 3390  static void PASCAL FAR TTXEnd(void) Line 3379  static void PASCAL FAR TTXEnd(void)
3379                  }                  }
3380    
3381                  MessageBox(NULL, pvar->err_msg, "TTSSH",                  MessageBox(NULL, pvar->err_msg, "TTSSH",
3382                                     MB_TASKMODAL | MB_ICONEXCLAMATION);                             MB_TASKMODAL | MB_ICONEXCLAMATION);
3383    
3384                  free(pvar->err_msg);                  free(pvar->err_msg);
3385                  pvar->err_msg = NULL;                  pvar->err_msg = NULL;
# Line 3440  PASCAL FAR TTXBind(WORD Version, TTXExpo Line 3429  PASCAL FAR TTXBind(WORD Version, TTXExpo
3429  static HANDLE __mem_mapping = NULL;  static HANDLE __mem_mapping = NULL;
3430    
3431  BOOL WINAPI DllMain(HANDLE hInstance,  BOOL WINAPI DllMain(HANDLE hInstance,
3432                                          ULONG ul_reason_for_call, LPVOID lpReserved)                      ULONG ul_reason_for_call, LPVOID lpReserved)
3433  {  {
3434          switch (ul_reason_for_call) {          switch (ul_reason_for_call) {
3435          case DLL_THREAD_ATTACH:          case DLL_THREAD_ATTACH:
# Line 3456  BOOL WINAPI DllMain(HANDLE hInstance, Line 3445  BOOL WINAPI DllMain(HANDLE hInstance,
3445                  pvar = &InstVar;                  pvar = &InstVar;
3446                  __mem_mapping =                  __mem_mapping =
3447                          CreateFileMapping((HANDLE) 0xFFFFFFFF, NULL, PAGE_READWRITE, 0,                          CreateFileMapping((HANDLE) 0xFFFFFFFF, NULL, PAGE_READWRITE, 0,
3448                                                            sizeof(TS_SSH), "TTSSH_1-4_TS_data");                                            sizeof(TS_SSH), "TTSSH_1-4_TS_data");
3449                  if (__mem_mapping == NULL) {                  if (__mem_mapping == NULL) {
3450                          /* fake it. The settings won't be shared, but what the heck. */                          /* fake it. The settings won't be shared, but what the heck. */
3451                          pvar->ts_SSH = NULL;                          pvar->ts_SSH = NULL;
3452                  } else {                  } else {
3453                          pvar->ts_SSH =                          pvar->ts_SSH =
3454                                  (TS_SSH *) MapViewOfFile(__mem_mapping, FILE_MAP_WRITE, 0,                                  (TS_SSH *) MapViewOfFile(__mem_mapping, FILE_MAP_WRITE, 0,
3455                                                                                   0, 0);                                                           0, 0);
3456                  }                  }
3457                  if (pvar->ts_SSH == NULL) {                  if (pvar->ts_SSH == NULL) {
3458                          /* fake it. The settings won't be shared, but what the heck. */                          /* fake it. The settings won't be shared, but what the heck. */

Legend:
Removed from v.3002  
changed lines
  Added in v.3003

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