OSDN Git Service

Fix bugs of importing INI file created by 1.97b or earlier.
[ffftp/ffftp.git] / registory.c
index b6e4648..2d5b07e 100644 (file)
@@ -99,6 +99,9 @@ static int IsMasterPasswordError = PASSWORD_OK;
 static int IsRndSourceInit = 0;\r
 static ulong RndSource[9];\r
 \r
+// UTF-8対応\r
+static int IniKanjiCode = KANJI_NOCNV;\r
+\r
 /*===== 外部参照 =====*/\r
 \r
 /* 設定値 */\r
@@ -182,6 +185,9 @@ extern int MirDownDelNotify;
 extern int FolderAttr;\r
 extern int FolderAttrNum;\r
 \r
+// 暗号化通信対応\r
+extern BYTE CertificateCacheHash[MAX_CERT_CACHE_HASH][20];\r
+\r
 /*----- マスタパスワードの設定 ----------------------------------------------\r
 *\r
 *      Parameter\r
@@ -284,7 +290,9 @@ void SaveRegistory(void)
        void *hKey3;\r
        void *hKey4;\r
        void *hKey5;\r
-       char Str[FMAX_PATH+1];\r
+       // 暗号化通信対応\r
+//     char Str[FMAX_PATH+1];\r
+       char Str[PRIVATE_KEY_LEN*4+1];\r
        int i;\r
        int n;\r
        HOSTDATA DefaultHost;\r
@@ -463,13 +471,18 @@ void SaveRegistory(void)
                                                        SaveIntNum(hKey5, "Notify", Hist.DialupNotify, DefaultHist.DialupNotify);\r
                                                        SaveStr(hKey5, "DialTo", Hist.DialEntry, DefaultHist.DialEntry);\r
                                                        // 暗号化通信対応\r
+                                                       SaveIntNum(hKey5, "NoEncryption", Hist.UseNoEncryption, DefaultHist.UseNoEncryption);\r
                                                        SaveIntNum(hKey5, "FTPES", Hist.UseFTPES, DefaultHist.UseFTPES);\r
                                                        SaveIntNum(hKey5, "FTPIS", Hist.UseFTPIS, DefaultHist.UseFTPIS);\r
                                                        SaveIntNum(hKey5, "SFTP", Hist.UseSFTP, DefaultHist.UseSFTP);\r
+                                                       EncodePassword(Hist.PrivateKey, Str);\r
+                                                       SaveStr(hKey5, "PKey", Str, DefaultHist.PrivateKey);\r
                                                        // 同時接続対応\r
                                                        SaveIntNum(hKey5, "ThreadCount", Hist.MaxThreadCount, DefaultHist.MaxThreadCount);\r
                                                        // MLSD対応\r
                                                        SaveIntNum(hKey5, "MLSD", Hist.UseMLSD, DefaultHist.UseMLSD);\r
+                                                       // IPv6対応\r
+                                                       SaveIntNum(hKey5, "IPv6", Hist.UseIPv6, DefaultHist.UseIPv6);\r
 \r
                                                        CloseSubKey(hKey5);\r
                                                        n++;\r
@@ -539,13 +552,18 @@ void SaveRegistory(void)
                                                        SaveIntNum(hKey5, "Notify", Host.DialupNotify, DefaultHost.DialupNotify);\r
                                                        SaveStr(hKey5, "DialTo", Host.DialEntry, DefaultHost.DialEntry);\r
                                                        // 暗号化通信対応\r
+                                                       SaveIntNum(hKey5, "NoEncryption", Host.UseNoEncryption, DefaultHost.UseNoEncryption);\r
                                                        SaveIntNum(hKey5, "FTPES", Host.UseFTPES, DefaultHost.UseFTPES);\r
                                                        SaveIntNum(hKey5, "FTPIS", Host.UseFTPIS, DefaultHost.UseFTPIS);\r
                                                        SaveIntNum(hKey5, "SFTP", Host.UseSFTP, DefaultHost.UseSFTP);\r
+                                                       EncodePassword(Host.PrivateKey, Str);\r
+                                                       SaveStr(hKey5, "PKey", Str, DefaultHost.PrivateKey);\r
                                                        // 同時接続対応\r
                                                        SaveIntNum(hKey5, "ThreadCount", Host.MaxThreadCount, DefaultHost.MaxThreadCount);\r
                                                        // MLSD対応\r
                                                        SaveIntNum(hKey5, "MLSD", Host.UseMLSD, DefaultHost.UseMLSD);\r
+                                                       // IPv6対応\r
+                                                       SaveIntNum(hKey5, "IPv6", Host.UseIPv6, DefaultHost.UseIPv6);\r
                                                }\r
                                                CloseSubKey(hKey5);\r
                                        }\r
@@ -564,6 +582,9 @@ void SaveRegistory(void)
                                if((i = AskCurrentHost()) == HOSTNUM_NOENTRY)\r
                                        i = 0;\r
                                WriteIntValueToReg(hKey4, "CurSet", i);\r
+\r
+                               // 暗号化通信対応\r
+                               WriteBinaryToReg(hKey4, "CertCacheHash", &CertificateCacheHash, sizeof(CertificateCacheHash));\r
                        }\r
                        CloseSubKey(hKey4);\r
                }\r
@@ -591,7 +612,9 @@ int LoadRegistory(void)
        void *hKey5;\r
        int i;\r
        int Sets;\r
-       char Str[256];  /* ASCII_EXT_LENより大きい事 */\r
+       // 暗号化通信対応\r
+//     char Str[256];  /* ASCII_EXT_LENより大きい事 */\r
+       char Str[PRIVATE_KEY_LEN*4+1];\r
        char *Pos;\r
        char *Pos2;\r
        HOSTDATA Host;\r
@@ -613,11 +636,14 @@ int LoadRegistory(void)
 \r
        if(i == FFFTP_SUCCESS)\r
        {\r
-               char checkbuf[48];\r
+//             char checkbuf[48];\r
                int salt = 0;\r
                Sts = YES;\r
 \r
                ReadIntValueFromReg(hKey3, "Version", &Version);\r
+               // UTF-8対応\r
+               if(Version < 1980)\r
+                       IniKanjiCode = KANJI_SJIS;\r
 \r
                if(OpenSubKey(hKey3, "Options", &hKey4) == FFFTP_SUCCESS)\r
                {\r
@@ -797,13 +823,19 @@ int LoadRegistory(void)
                                        ReadIntValueFromReg(hKey5, "Notify", &Hist.DialupNotify);\r
                                        ReadStringFromReg(hKey5, "DialTo", Hist.DialEntry, RAS_NAME_LEN+1);\r
                                        // 暗号化通信対応\r
+                                       ReadIntValueFromReg(hKey5, "NoEncryption", &Hist.UseNoEncryption);\r
                                        ReadIntValueFromReg(hKey5, "FTPES", &Hist.UseFTPES);\r
                                        ReadIntValueFromReg(hKey5, "FTPIS", &Hist.UseFTPIS);\r
                                        ReadIntValueFromReg(hKey5, "SFTP", &Hist.UseSFTP);\r
+                                       strcpy(Str, "");\r
+                                       ReadStringFromReg(hKey5, "PKey", Str, PRIVATE_KEY_LEN*4+1);\r
+                                       DecodePassword(Str, Hist.PrivateKey);\r
                                        // 同時接続対応\r
                                        ReadIntValueFromReg(hKey5, "ThreadCount", &Hist.MaxThreadCount);\r
                                        // MLSD対応\r
                                        ReadIntValueFromReg(hKey5, "MLSD", &Hist.UseMLSD);\r
+                                       // IPv6対応\r
+                                       ReadIntValueFromReg(hKey5, "IPv6", &Hist.UseIPv6);\r
 \r
                                        CloseSubKey(hKey5);\r
                                        AddHistoryToHistory(&Hist);\r
@@ -828,6 +860,9 @@ int LoadRegistory(void)
                                                Host.Pasv = NO;\r
                                                Host.ListCmdOnly = NO;\r
                                        }\r
+                                       // 1.97b以前はデフォルトでShift_JIS\r
+                                       if(Version < 1980)\r
+                                               Host.NameKanjiCode = KANJI_SJIS;\r
                                        ReadIntValueFromReg(hKey5, "Set", &Host.Level);\r
 \r
                                        ReadStringFromReg(hKey5, "HostName", Host.HostName, HOST_NAME_LEN+1);\r
@@ -872,13 +907,19 @@ int LoadRegistory(void)
                                        ReadIntValueFromReg(hKey5, "Notify", &Host.DialupNotify);\r
                                        ReadStringFromReg(hKey5, "DialTo", Host.DialEntry, RAS_NAME_LEN+1);\r
                                        // 暗号化通信対応\r
+                                       ReadIntValueFromReg(hKey5, "NoEncryption", &Host.UseNoEncryption);\r
                                        ReadIntValueFromReg(hKey5, "FTPES", &Host.UseFTPES);\r
                                        ReadIntValueFromReg(hKey5, "FTPIS", &Host.UseFTPIS);\r
                                        ReadIntValueFromReg(hKey5, "SFTP", &Host.UseSFTP);\r
+                                       strcpy(Str, "");\r
+                                       ReadStringFromReg(hKey5, "PKey", Str, PRIVATE_KEY_LEN*4+1);\r
+                                       DecodePassword(Str, Host.PrivateKey);\r
                                        // 同時接続対応\r
                                        ReadIntValueFromReg(hKey5, "ThreadCount", &Host.MaxThreadCount);\r
                                        // MLSD対応\r
                                        ReadIntValueFromReg(hKey5, "MLSD", &Host.UseMLSD);\r
+                                       // IPv6対応\r
+                                       ReadIntValueFromReg(hKey5, "IPv6", &Host.UseIPv6);\r
 \r
                                        CloseSubKey(hKey5);\r
 \r
@@ -889,6 +930,9 @@ int LoadRegistory(void)
                        ReadIntValueFromReg(hKey4, "CurSet", &Sets);\r
                        SetCurrentHost(Sets);\r
 \r
+                       // 暗号化通信対応\r
+                       ReadBinaryFromReg(hKey4, "CertCacheHash", &CertificateCacheHash, sizeof(CertificateCacheHash));\r
+\r
                        CloseSubKey(hKey4);\r
                }\r
                CloseReg(hKey3);\r
@@ -2222,6 +2266,10 @@ static int ReadStringFromReg(void *Handle, char *Name, char *Str, DWORD Size)
 {\r
        int Sts;\r
        char *Pos;\r
+       // UTF-8対応\r
+       char* pa0;\r
+       wchar_t* pw0;\r
+       DWORD TempSize;\r
 \r
        Sts = FFFTP_FAIL;\r
        if(TmpRegType == REGTYPE_REG)\r
@@ -2237,10 +2285,37 @@ static int ReadStringFromReg(void *Handle, char *Name, char *Str, DWORD Size)
        {\r
                if((Pos = ScanValue(Handle, Name)) != NULL)\r
                {\r
-                       Size = min1(Size-1, strlen(Pos));\r
-                       Size = StrReadIn(Pos, Size, Str);\r
-                       *(Str + Size) = NUL;\r
-                       Sts = FFFTP_SUCCESS;\r
+                       // UTF-8対応\r
+//                     Size = min1(Size-1, strlen(Pos));\r
+//                     Size = StrReadIn(Pos, Size, Str);\r
+//                     *(Str + Size) = NUL;\r
+//                     Sts = FFFTP_SUCCESS;\r
+                       switch(IniKanjiCode)\r
+                       {\r
+                       case KANJI_SJIS:\r
+                               if(pa0 = AllocateStringA(Size * 4))\r
+                               {\r
+                                       if(pw0 = AllocateStringW(Size * 4 * 4))\r
+                                       {\r
+                                               TempSize = min1((Size * 4) - 1, strlen(Pos));\r
+                                               TempSize = StrReadIn(Pos, TempSize, pa0);\r
+                                               *(pa0 + TempSize) = NUL;\r
+                                               AtoW(pw0, Size * 4 * 4, pa0, -1);\r
+                                               WtoM(Str, Size, pw0, -1);\r
+                                               TerminateStringM(Str, Size);\r
+                                               Sts = FFFTP_SUCCESS;\r
+                                               FreeDuplicatedString(pw0);\r
+                                       }\r
+                                       FreeDuplicatedString(pa0);\r
+                               }\r
+                               break;\r
+                       case KANJI_NOCNV:\r
+                               Size = min1(Size-1, strlen(Pos));\r
+                               Size = StrReadIn(Pos, Size, Str);\r
+                               *(Str + Size) = NUL;\r
+                               Sts = FFFTP_SUCCESS;\r
+                               break;\r
+                       }\r
                }\r
        }\r
        return(Sts);\r