#include "common.h"\r
#include "resource.h"\r
#include "aes.h"\r
+// 暗号化通信対応\r
+#include "sha.h"\r
\r
#include <htmlhelp.h>\r
#include "helpid.h"\r
int FolderAttrNum = 777;\r
// 同時接続対応\r
int MaxThreadCount = 1;\r
+// 暗号化通信対応\r
+BYTE CertificateCacheHash[MAX_CERT_CACHE_HASH][20];\r
\r
\r
\r
\r
// 暗号化通信対応\r
SetSSLTimeoutCallback(TimeOut * 1000, SSLTimeoutCallback);\r
+ SetSSLConfirmCallback(SSLConfirmCallback);\r
\r
LoadJre();\r
if(NoRasControl == NO)\r
DispWindowTitle();\r
// SourceForge.JPによるフォーク\r
// SetTaskMsg("FFFTP Ver." VER_STR " Copyright(C) 1997-2010 Sota & cooperators.");\r
- SetTaskMsg("FFFTP Ver." VER_STR " Copyright(C) 1997-2010 Sota & cooperators.\r\nCopyright (C) 2011 FFFTP Project (Hiromichi Matsushima, Suguru Kawamoto).");\r
+ SetTaskMsg("FFFTP Ver." VER_STR " Copyright(C) 1997-2010 Sota & cooperators.\r\nCopyright (C) 2011 FFFTP Project (Hiromichi Matsushima, Suguru Kawamoto, IWAMOTO Kouichi, vitamin0x, unarist, raido).");\r
\r
if(ForceIni)\r
SetTaskMsg("%s%s", MSGJPN283, IniPath);\r
char AssocProg[FMAX_PATH+1];\r
char ComLine[FMAX_PATH*2+3+1];\r
char CurDir[FMAX_PATH+1];\r
+ // 任意のコードが実行されるバグ修正\r
+ char SysDir[FMAX_PATH+1];\r
\r
/* FindExecutable()は関連付けられたプログラムのパス名にスペースが */\r
/* 含まれている時、間違ったパス名を返す事がある。 */\r
memset(&Startup, NUL, sizeof(STARTUPINFO));\r
Startup.cb = sizeof(STARTUPINFO);\r
Startup.wShowWindow = SW_SHOW;\r
- if(CreateProcess(NULL, ComLine, NULL, NULL, FALSE, 0, NULL, NULL, &Startup, &Info) == FALSE)\r
+ // 任意のコードが実行されるバグ修正\r
+// if(CreateProcess(NULL, ComLine, NULL, NULL, FALSE, 0, NULL, NULL, &Startup, &Info) == FALSE)\r
+// {\r
+// SetTaskMsg(MSGJPN182, GetLastError());\r
+// SetTaskMsg(">>%s", ComLine);\r
+// }\r
+ if(GetCurrentDirectory(FMAX_PATH, CurDir) > 0)\r
{\r
- SetTaskMsg(MSGJPN182, GetLastError());\r
- SetTaskMsg(">>%s", ComLine);\r
+ if(GetSystemDirectory(SysDir, FMAX_PATH) > 0)\r
+ {\r
+ if(SetCurrentDirectory(SysDir))\r
+ {\r
+ if(CreateProcess(NULL, ComLine, NULL, NULL, FALSE, 0, NULL, NULL, &Startup, &Info) == FALSE)\r
+ {\r
+ SetTaskMsg(MSGJPN182, GetLastError());\r
+ SetTaskMsg(">>%s", ComLine);\r
+ }\r
+ SetCurrentDirectory(CurDir);\r
+ }\r
+ }\r
}\r
}\r
return;\r
char AssocProg[FMAX_PATH+1];\r
char ComLine[FMAX_PATH*2+3+1];\r
char CurDir[FMAX_PATH+1];\r
+ // 任意のコードが実行されるバグ修正\r
+ char SysDir[FMAX_PATH+1];\r
\r
/* FindExecutable()は関連付けられたプログラムのパス名にスペースが */\r
/* 含まれている時、間違ったパス名を返す事がある。 */\r
memset(&Startup, NUL, sizeof(STARTUPINFO));\r
Startup.cb = sizeof(STARTUPINFO);\r
Startup.wShowWindow = SW_SHOW;\r
- if(CreateProcess(NULL, ComLine, NULL, NULL, FALSE, 0, NULL, NULL, &Startup, &Info) == FALSE)\r
+ // 任意のコードが実行されるバグ修正\r
+// if(CreateProcess(NULL, ComLine, NULL, NULL, FALSE, 0, NULL, NULL, &Startup, &Info) == FALSE)\r
+// {\r
+// SetTaskMsg(MSGJPN182, GetLastError());\r
+// SetTaskMsg(">>%s", ComLine);\r
+// }\r
+ if(GetCurrentDirectory(FMAX_PATH, CurDir) > 0)\r
{\r
- SetTaskMsg(MSGJPN182, GetLastError());\r
- SetTaskMsg(">>%s", ComLine);\r
+ if(GetSystemDirectory(SysDir, FMAX_PATH) > 0)\r
+ {\r
+ if(SetCurrentDirectory(SysDir))\r
+ {\r
+ if(CreateProcess(NULL, ComLine, NULL, NULL, FALSE, 0, NULL, NULL, &Startup, &Info) == FALSE)\r
+ {\r
+ SetTaskMsg(MSGJPN182, GetLastError());\r
+ SetTaskMsg(">>%s", ComLine);\r
+ }\r
+ SetCurrentDirectory(CurDir);\r
+ }\r
+ }\r
}\r
\r
return;\r
Sleep(1);\r
if(BackgrndMessageProc() == YES)\r
return TRUE;\r
- // 念のためツールバーのMENU_ABORTも確認\r
-// if(MainTransPkt.Abort != ABORT_NONE)\r
-// {\r
-// MainTransPkt.Abort = ABORT_NONE;\r
-// return TRUE;\r
-// }\r
+ if(CancelFlg == YES)\r
+ return TRUE;\r
return FALSE;\r
}\r
\r
+BOOL __stdcall SSLConfirmCallback(BOOL bVerified, LPCSTR Certificate, LPCSTR CommonName)\r
+{\r
+ BOOL bResult;\r
+ int i;\r
+ uint32 Hash[5];\r
+ char* pm0;\r
+ bResult = FALSE;\r
+ sha_memory((char*)Certificate, (uint32)(strlen(Certificate) * sizeof(char)), (uint32*)&Hash);\r
+ i = 0;\r
+ while(i < MAX_CERT_CACHE_HASH)\r
+ {\r
+ if(memcmp(&CertificateCacheHash[i], &Hash, 20) == 0)\r
+ {\r
+ bResult = TRUE;\r
+ break;\r
+ }\r
+ i++;\r
+ }\r
+ if(!bResult)\r
+ {\r
+ if(pm0 = AllocateStringM(strlen(Certificate) + 1024))\r
+ {\r
+ sprintf(pm0, MSGJPN326, IsHostNameMatched(AskHostAdrs(), CommonName) ? MSGJPN327 : MSGJPN328, bVerified ? MSGJPN327 : MSGJPN328, Certificate);\r
+ if(MessageBox(GetMainHwnd(), pm0, "FFFTP", MB_YESNO) == IDYES)\r
+ {\r
+ for(i = MAX_CERT_CACHE_HASH - 1; i >= 1; i--)\r
+ memcpy(&CertificateCacheHash[i], &CertificateCacheHash[i - 1], 20);\r
+ memcpy(&CertificateCacheHash[0], &Hash, 20);\r
+ bResult = TRUE;\r
+ }\r
+ FreeDuplicatedString(pm0);\r
+ }\r
+ }\r
+ if(!bResult)\r
+ CancelFlg = YES;\r
+ return bResult;\r
+}\r
+\r