OSDN Git Service

Add options for disabling weak encryption methods.
authors_kawamoto <s_kawamoto@users.sourceforge.jp>
Sun, 8 Jun 2014 16:43:17 +0000 (01:43 +0900)
committers_kawamoto <s_kawamoto@users.sourceforge.jp>
Sun, 8 Jun 2014 16:43:17 +0000 (01:43 +0900)
14 files changed:
FFFTP_Eng_Release/FFFTP.exe
Release/FFFTP.exe
Resource/FFFTP.rc
Resource/resource.h
Resource_eng/FFFTP-eng.rc
Resource_eng/resource.h
common.h
connect.c
getput.c
history.c
hostman.c
registry.c
socketwrapper.c
socketwrapper.h

index 8138f62..6ba3e78 100644 (file)
Binary files a/FFFTP_Eng_Release/FFFTP.exe and b/FFFTP_Eng_Release/FFFTP.exe differ
index 710febc..f93b7ae 100644 (file)
Binary files a/Release/FFFTP.exe and b/Release/FFFTP.exe differ
index 3234e02..68cfb98 100644 (file)
@@ -1376,31 +1376,32 @@ hset_crypt_dlg DIALOG  0, 0, 207, 155
 STYLE DS_SETFONT | WS_CHILD | WS_DISABLED | WS_CAPTION\r
 FONT 9, "MS Shell Dlg"\r
 BEGIN\r
-    CONTROL         "\88Ã\8d\86\89»\82È\82µ\82Å\90Ú\91±\82ð\8b\96\89Â",HSET_NO_ENCRYPTION,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,7,148,10\r
-    CONTROL         "FTPS (Explicit)\82Å\90Ú\91±",HSET_FTPES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,21,148,10\r
-    CONTROL         "FTPS (Implicit)\82Å\90Ú\91±",HSET_FTPIS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,35,148,10\r
-    CONTROL         "SFTP\82Å\90Ú\91±",HSET_SFTP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,49,148,10\r
+    CONTROL         "\88Ã\8d\86\89»\82È\82µ\82Å\90Ú\91±\82ð\8b\96\89Â(&A)",HSET_NO_ENCRYPTION,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,7,148,10\r
+    CONTROL         "FTPS (Explicit)\82Å\90Ú\91±(&E)",HSET_FTPES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,21,148,10\r
+    CONTROL         "FTPS (Implicit)\82Å\90Ú\91±(&I)",HSET_FTPIS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,35,148,10\r
+    CONTROL         "SFTP\82Å\90Ú\91±(&S)",HSET_SFTP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,49,148,10\r
     LTEXT           "\94é\96§\8c®\82Ì\83e\83L\83X\83g",-1,7,63,64,8\r
     PUSHBUTTON      "...",PKEY_FILE_BR,72,63,13,12\r
     EDITTEXT        HSET_PRIVATE_KEY,7,79,193,44,ES_MULTILINE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_VSCROLL | WS_HSCROLL\r
+    CONTROL         "\8eã\82¢\88Ã\8d\86\89»\95û\8e®\82ð\8eg\97p\82µ\82È\82¢(&W)",HSET_NO_WEAK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,127,148,10\r
 END\r
 \r
 hset_adv3_dlg DIALOG  0, 0, 207, 155\r
 STYLE DS_SETFONT | WS_CHILD | WS_DISABLED | WS_CAPTION\r
 FONT 9, "MS Shell Dlg"\r
 BEGIN\r
-    LTEXT           "\8dÅ\91å\93¯\8e\9e\90Ú\91±\90\94",-1,7,10,64,8\r
+    LTEXT           "\8dÅ\91å\93¯\8e\9e\90Ú\91±\90\94(&M)",-1,7,10,64,8\r
     EDITTEXT        HSET_THREAD_COUNT,72,8,17,12,ES_AUTOHSCROLL | ES_NUMBER\r
     CONTROL         "Spin1",HSET_THREAD_COUNT_SPN,"msctls_updown32",UDS_SETBUDDYINT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,89,7,9,14\r
     LTEXT           "(1\81`4)",-1,102,10,31,8\r
-    CONTROL         "\83\81\83C\83\93\83E\83B\83\93\83h\83E\82Ì\83\\83P\83b\83g\82ð\8dÄ\97\98\97p",HSET_REUSE_SOCKET,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,27,131,10\r
-    LTEXT           "\90Ú\91±\88Û\8e\9d\97p\83R\83}\83\93\83h\8eü\8aú",-1,7,44,84,8\r
+    CONTROL         "\83\81\83C\83\93\83E\83B\83\93\83h\83E\82Ì\83\\83P\83b\83g\82ð\8dÄ\97\98\97p(&S)",HSET_REUSE_SOCKET,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,27,131,10\r
+    LTEXT           "\90Ú\91±\88Û\8e\9d\97p\83R\83}\83\93\83h\8eü\8aú(&K)",-1,7,44,84,8\r
     EDITTEXT        HSET_NOOP_INTERVAL,92,42,17,12,ES_AUTOHSCROLL | ES_NUMBER\r
     CONTROL         "Spin1",HSET_NOOP_INTERVAL_SPN,"msctls_updown32",UDS_SETBUDDYINT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,109,41,9,14\r
     LTEXT           "(0\81`300\95b; 0=\96³\8cø)",-1,122,44,76,8\r
-    LTEXT           "\93]\91\97\83G\83\89\81[\8e\9e\82Ì\8f\88\97\9d",-1,7,61,81,8\r
+    LTEXT           "\93]\91\97\83G\83\89\81[\8e\9e\82Ì\8f\88\97\9d(&E)",-1,7,61,81,8\r
     COMBOBOX        HSET_ERROR_MODE,7,71,71,75,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP\r
-    CONTROL         "\93]\91\97\83G\83\89\81[\8cã\82É\8dÄ\90Ú\91±",HSET_ERROR_RECONNECT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,84,71,102,10\r
+    CONTROL         "\93]\91\97\83G\83\89\81[\8cã\82É\8dÄ\90Ú\91±(&R)",HSET_ERROR_RECONNECT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,84,71,102,10\r
 END\r
 \r
 savecrypt_dlg DIALOG  0, 0, 146, 62\r
index 6f062d7..4604f8c 100644 (file)
 #define UPDATES_AUTO_APPLY              1223\r
 #define UPDATES_INTERVAL                1224\r
 #define UPDATES_INTERVAL_SPN            1225\r
+#define HSET_NO_WEAK                    1226\r
 #define MENU_END                        40001\r
 #define MENU_EXIT                       40001\r
 #define MENU_CONNECT                    40003\r
 #ifndef APSTUDIO_READONLY_SYMBOLS\r
 #define _APS_NEXT_RESOURCE_VALUE        197\r
 #define _APS_NEXT_COMMAND_VALUE         40182\r
-#define _APS_NEXT_CONTROL_VALUE         1226\r
+#define _APS_NEXT_CONTROL_VALUE         1227\r
 #define _APS_NEXT_SYMED_VALUE           101\r
 #endif\r
 #endif\r
index 03abd22..4798cdb 100644 (file)
@@ -1408,33 +1408,35 @@ hset_crypt_dlg DIALOG  0, 0, 207, 155
 STYLE DS_SETFONT | WS_CHILD | WS_DISABLED | WS_CAPTION\r
 FONT 9, "MS Shell Dlg"\r
 BEGIN\r
-    CONTROL         "Allow to connect without encryption",HSET_NO_ENCRYPTION,\r
+    CONTROL         "&Allow to connect without encryption",HSET_NO_ENCRYPTION,\r
                     "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,7,148,10\r
-    CONTROL         "Connect with FTPS (Explicit)",HSET_FTPES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,21,148,10\r
-    CONTROL         "Connect with FTPS (Implicit)",HSET_FTPIS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,35,148,10\r
-    CONTROL         "Connect with SFTP",HSET_SFTP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,49,148,10\r
+    CONTROL         "Connect with FTPS (&Explicit)",HSET_FTPES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,21,148,10\r
+    CONTROL         "Connect with FTPS (&Implicit)",HSET_FTPIS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,35,148,10\r
+    CONTROL         "Connect with &SFTP",HSET_SFTP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,49,148,10\r
     LTEXT           "Private key text",-1,7,63,64,8\r
     PUSHBUTTON      "...",PKEY_FILE_BR,72,63,13,12\r
     EDITTEXT        HSET_PRIVATE_KEY,7,79,193,44,ES_MULTILINE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_VSCROLL | WS_HSCROLL\r
+    CONTROL         "Do not use &weak encryption methods",HSET_NO_WEAK,\r
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,127,148,10\r
 END\r
 \r
 hset_adv3_dlg DIALOG  0, 0, 207, 155\r
 STYLE DS_SETFONT | WS_CHILD | WS_DISABLED | WS_CAPTION\r
 FONT 9, "MS Shell Dlg"\r
 BEGIN\r
-    LTEXT           "Max Connections",-1,7,10,64,8\r
+    LTEXT           "&Max Connections",-1,7,10,64,8\r
     EDITTEXT        HSET_THREAD_COUNT,72,8,17,12,ES_AUTOHSCROLL | ES_NUMBER\r
     CONTROL         "Spin1",HSET_THREAD_COUNT_SPN,"msctls_updown32",UDS_SETBUDDYINT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,89,7,9,14\r
     LTEXT           "(1 to 4 threads)",-1,102,10,53,8\r
-    CONTROL         "Reuse socket of the main window",HSET_REUSE_SOCKET,\r
+    CONTROL         "Reuse &socket of the main window",HSET_REUSE_SOCKET,\r
                     "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,27,131,10\r
-    LTEXT           "Command for Keep Alive",-1,7,44,84,8\r
+    LTEXT           "Command for &Keep Alive",-1,7,44,84,8\r
     EDITTEXT        HSET_NOOP_INTERVAL,92,42,17,12,ES_AUTOHSCROLL | ES_NUMBER\r
     CONTROL         "Spin1",HSET_NOOP_INTERVAL_SPN,"msctls_updown32",UDS_SETBUDDYINT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,109,41,9,14\r
     LTEXT           "(0 to 300sec; 0=Never)",-1,122,44,76,8\r
-    LTEXT           "When transfer errors",-1,7,61,81,8\r
+    LTEXT           "When transfer &errors",-1,7,61,81,8\r
     COMBOBOX        HSET_ERROR_MODE,7,71,71,75,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP\r
-    CONTROL         "Reconnect after errors",HSET_ERROR_RECONNECT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,84,71,102,10\r
+    CONTROL         "&Reconnect after errors",HSET_ERROR_RECONNECT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,84,71,102,10\r
 END\r
 \r
 savecrypt_dlg DIALOG  0, 0, 146, 62\r
index 044ff82..259894e 100644 (file)
 #define UPDATES_AUTO_APPLY              1223\r
 #define UPDATES_INTERVAL                1224\r
 #define UPDATES_INTERVAL_SPN            1225\r
+#define HSET_NO_WEAK                    1226\r
 #define MENU_END                        40001\r
 #define MENU_EXIT                       40001\r
 #define MENU_CONNECT                    40003\r
 #ifndef APSTUDIO_READONLY_SYMBOLS\r
 #define _APS_NEXT_RESOURCE_VALUE        197\r
 #define _APS_NEXT_COMMAND_VALUE         40182\r
-#define _APS_NEXT_CONTROL_VALUE         1226\r
+#define _APS_NEXT_CONTROL_VALUE         1227\r
 #define _APS_NEXT_SYMED_VALUE           101\r
 #endif\r
 #endif\r
index 7d37076..829c4fe 100644 (file)
--- a/common.h
+++ b/common.h
@@ -1041,6 +1041,7 @@ typedef struct {
        int UseFTPIS;                                           /* FTPISで接続する (YES/NO) */\r
        int UseSFTP;                                            /* SFTPで接続する (YES/NO) */\r
        char PrivateKey[PRIVATE_KEY_LEN+1];     /* テキスト形式の秘密鍵 */\r
+       int NoWeakEncryption;                           /* 弱い暗号を拒否 (YES/NO) */\r
        // 同時接続対応\r
        int MaxThreadCount;                                     /* 同時接続数 */\r
        int ReuseCmdSkt;                                        /* メインウィンドウのソケットを再利用する (YES/NO) */\r
@@ -1111,6 +1112,7 @@ typedef struct historydata {
        int UseFTPIS;                                           /* FTPISで接続する (YES/NO) */\r
        int UseSFTP;                                            /* SFTPで接続する (YES/NO) */\r
        char PrivateKey[PRIVATE_KEY_LEN+1];     /* テキスト形式の秘密鍵 */\r
+       int NoWeakEncryption;                           /* 弱い暗号を拒否 (YES/NO) */\r
        // 同時接続対応\r
        int MaxThreadCount;                                     /* 同時接続数 */\r
        int ReuseCmdSkt;                                        /* メインウィンドウのソケットを再利用する (YES/NO) */\r
index 633adb9..d81d866 100644 (file)
--- a/connect.c
+++ b/connect.c
@@ -1653,7 +1653,7 @@ static SOCKET DoConnectCrypt(int CryptMode, HOSTDATA* HostData, char *Host, char
 //                                     ;\r
                                if(CryptMode == CRYPT_FTPIS)\r
                                {\r
-                                       if(AttachSSL(ContSock, INVALID_SOCKET, CancelCheckWork))\r
+                                       if(AttachSSL(ContSock, INVALID_SOCKET, CancelCheckWork, HostData->NoWeakEncryption))\r
                                        {\r
                                                while((Sts = ReadReplyMessage(ContSock, Buf, 1024, CancelCheckWork, TmpBuf) / 100) == FTP_PRELIM)\r
                                                        ;\r
@@ -1780,7 +1780,7 @@ static SOCKET DoConnectCrypt(int CryptMode, HOSTDATA* HostData, char *Host, char
                                                                {\r
                                                                        if(IsOpenSSLLoaded() && ((Sts = command(ContSock, Reply, CancelCheckWork, "AUTH TLS")) == 234 || (Sts = command(ContSock, Reply, CancelCheckWork, "AUTH SSL")) == 234))\r
                                                                        {\r
-                                                                               if(AttachSSL(ContSock, INVALID_SOCKET, CancelCheckWork))\r
+                                                                               if(AttachSSL(ContSock, INVALID_SOCKET, CancelCheckWork, HostData->NoWeakEncryption))\r
                                                                                {\r
                                                                                        if((Sts = command(ContSock, Reply, CancelCheckWork, "PBSZ 0")) == 200)\r
                                                                                        {\r
index 39a7194..3c19302 100644 (file)
--- a/getput.c
+++ b/getput.c
@@ -1520,7 +1520,7 @@ static int DownloadNonPassive(TRANSPACKET *Pkt, int *CancelCheckWork)
 //                                     iRetCode = DownloadFile(Pkt, data_socket, CreateMode, CancelCheckWork);\r
                                        if(IsSSLAttached(Pkt->ctrl_skt))\r
                                        {\r
-                                               if(AttachSSL(data_socket, Pkt->ctrl_skt, CancelCheckWork))\r
+                                               if(AttachSSL(data_socket, Pkt->ctrl_skt, CancelCheckWork, FALSE))\r
                                                        iRetCode = DownloadFile(Pkt, data_socket, CreateMode, CancelCheckWork);\r
                                                else\r
                                                        iRetCode = 500;\r
@@ -1630,7 +1630,7 @@ static int DownloadPassive(TRANSPACKET *Pkt, int *CancelCheckWork)
 //                                             iRetCode = DownloadFile(Pkt, data_socket, CreateMode, CancelCheckWork);\r
                                                if(IsSSLAttached(Pkt->ctrl_skt))\r
                                                {\r
-                                                       if(AttachSSL(data_socket, Pkt->ctrl_skt, CancelCheckWork))\r
+                                                       if(AttachSSL(data_socket, Pkt->ctrl_skt, CancelCheckWork, FALSE))\r
                                                                iRetCode = DownloadFile(Pkt, data_socket, CreateMode, CancelCheckWork);\r
                                                        else\r
                                                                iRetCode = 500;\r
@@ -2846,7 +2846,7 @@ static int UploadNonPassive(TRANSPACKET *Pkt)
 //                             iRetCode = UploadFile(Pkt, data_socket);\r
                                if(IsSSLAttached(Pkt->ctrl_skt))\r
                                {\r
-                                       if(AttachSSL(data_socket, Pkt->ctrl_skt, &Canceled[Pkt->ThreadCount]))\r
+                                       if(AttachSSL(data_socket, Pkt->ctrl_skt, &Canceled[Pkt->ThreadCount], FALSE))\r
                                                iRetCode = UploadFile(Pkt, data_socket);\r
                                        else\r
                                                iRetCode = 500;\r
@@ -2965,7 +2965,7 @@ static int UploadPassive(TRANSPACKET *Pkt)
 //                                     iRetCode = UploadFile(Pkt, data_socket);\r
                                        if(IsSSLAttached(Pkt->ctrl_skt))\r
                                        {\r
-                                               if(AttachSSL(data_socket, Pkt->ctrl_skt, &Canceled[Pkt->ThreadCount]))\r
+                                               if(AttachSSL(data_socket, Pkt->ctrl_skt, &Canceled[Pkt->ThreadCount], FALSE))\r
                                                        iRetCode = UploadFile(Pkt, data_socket);\r
                                                else\r
                                                        iRetCode = 500;\r
index 1124089..7d6af76 100644 (file)
--- a/history.c
+++ b/history.c
@@ -232,6 +232,7 @@ static void CopyHostToHistory(HOSTDATA *Host, HISTORYDATA *New)
        New->UseFTPIS = Host->UseFTPIS;\r
        New->UseSFTP = Host->UseSFTP;\r
        strcpy(New->PrivateKey, Host->PrivateKey);\r
+       New->NoWeakEncryption = Host->NoWeakEncryption;\r
        // 同時接続対応\r
        New->MaxThreadCount = Host->MaxThreadCount;\r
        New->ReuseCmdSkt = Host->ReuseCmdSkt;\r
@@ -301,6 +302,7 @@ void CopyHistoryToHost(HISTORYDATA *Hist, HOSTDATA *Host)
        Host->UseFTPIS = Hist->UseFTPIS;\r
        Host->UseSFTP = Hist->UseSFTP;\r
        strcpy(Host->PrivateKey, Hist->PrivateKey);\r
+       Host->NoWeakEncryption = Hist->NoWeakEncryption;\r
        // 同時接続対応\r
        Host->MaxThreadCount = Hist->MaxThreadCount;\r
        Host->ReuseCmdSkt = Hist->ReuseCmdSkt;\r
index 996b7e7..0059a3b 100644 (file)
--- a/hostman.c
+++ b/hostman.c
@@ -1347,6 +1347,7 @@ void CopyDefaultHost(HOSTDATA *Set)
        Set->UseFTPIS = YES;\r
        Set->UseSFTP = YES;\r
        strcpy(Set->PrivateKey, "");\r
+       Set->NoWeakEncryption = NO;\r
        // 同時接続対応\r
        Set->MaxThreadCount = 1;\r
        Set->ReuseCmdSkt = YES;\r
@@ -2294,6 +2295,7 @@ static INT_PTR CALLBACK CryptSettingProc(HWND hDlg, UINT iMessage, WPARAM wParam
                                EnableWindow(GetDlgItem(hDlg, PKEY_FILE_BR), FALSE);\r
                                EnableWindow(GetDlgItem(hDlg, HSET_PRIVATE_KEY), FALSE);\r
                        }\r
+                       SendDlgItemMessage(hDlg, HSET_NO_WEAK, BM_SETCHECK, TmpHost.NoWeakEncryption, 0);\r
                        return(TRUE);\r
 \r
                case WM_NOTIFY:\r
@@ -2312,6 +2314,7 @@ static INT_PTR CALLBACK CryptSettingProc(HWND hDlg, UINT iMessage, WPARAM wParam
                                                TmpHost.UseSFTP = SendDlgItemMessage(hDlg, HSET_SFTP, BM_GETCHECK, 0, 0);\r
                                                SendDlgItemMessage(hDlg, HSET_PRIVATE_KEY, WM_GETTEXT, PRIVATE_KEY_LEN+1, (LPARAM)TmpHost.PrivateKey);\r
                                        }\r
+                                       TmpHost.NoWeakEncryption = SendDlgItemMessage(hDlg, HSET_NO_WEAK, BM_GETCHECK, 0, 0);\r
                                        Apply = YES;\r
                                        break;\r
 \r
index 6e7b53d..fb8a8d3 100644 (file)
@@ -642,6 +642,7 @@ void SaveRegistry(void)
                                                        SaveIntNum(hKey5, "SFTP", Host.UseSFTP, DefaultHost.UseSFTP);\r
                                                        EncodePassword(Host.PrivateKey, Str);\r
                                                        SaveStr(hKey5, "PKey", Str, DefaultHost.PrivateKey);\r
+                                                       SaveIntNum(hKey5, "NoWeak", Host.NoWeakEncryption, DefaultHost.NoWeakEncryption);\r
                                                        // 同時接続対応\r
                                                        SaveIntNum(hKey5, "ThreadCount", Host.MaxThreadCount, DefaultHost.MaxThreadCount);\r
                                                        SaveIntNum(hKey5, "ReuseCmdSkt", Host.ReuseCmdSkt, DefaultHost.ReuseCmdSkt);\r
@@ -1133,6 +1134,7 @@ int LoadRegistry(void)
                                        strcpy(Str, "");\r
                                        ReadStringFromReg(hKey5, "PKey", Str, PRIVATE_KEY_LEN*4+1);\r
                                        DecodePassword(Str, Host.PrivateKey);\r
+                                       ReadIntValueFromReg(hKey5, "NoWeak", &Host.NoWeakEncryption);\r
                                        // 同時接続対応\r
                                        ReadIntValueFromReg(hKey5, "ThreadCount", &Host.MaxThreadCount);\r
                                        ReadIntValueFromReg(hKey5, "ReuseCmdSkt", &Host.ReuseCmdSkt);\r
index c55a578..b862175 100644 (file)
 typedef void (__cdecl* _SSL_load_error_strings)();\r
 typedef int (__cdecl* _SSL_library_init)();\r
 typedef SSL_METHOD* (__cdecl* _SSLv23_method)();\r
-typedef SSL_CTX* (__cdecl* _SSL_CTX_new)(SSL_METHOD*);\r
-typedef void (__cdecl* _SSL_CTX_free)(SSL_CTX*);\r
 typedef SSL* (__cdecl* _SSL_new)(SSL_CTX*);\r
 typedef void (__cdecl* _SSL_free)(SSL*);\r
+typedef long (__cdecl* _SSL_ctrl)(SSL*, int, long, void*);\r
 typedef int (__cdecl* _SSL_shutdown)(SSL*);\r
 typedef int (__cdecl* _SSL_get_fd)(SSL*);\r
 typedef int (__cdecl* _SSL_set_fd)(SSL*, int);\r
@@ -38,6 +37,9 @@ typedef X509* (__cdecl* _SSL_get_peer_certificate)(const SSL*);
 typedef long (__cdecl* _SSL_get_verify_result)(const SSL*);\r
 typedef SSL_SESSION* (__cdecl* _SSL_get_session)(SSL*);\r
 typedef int (__cdecl* _SSL_set_session)(SSL*, SSL_SESSION*);\r
+typedef int (__cdecl* _SSL_set_cipher_list)(SSL*, const char*);\r
+typedef SSL_CTX* (__cdecl* _SSL_CTX_new)(SSL_METHOD*);\r
+typedef void (__cdecl* _SSL_CTX_free)(SSL_CTX*);\r
 typedef X509_STORE* (__cdecl* _SSL_CTX_get_cert_store)(const SSL_CTX*);\r
 typedef long (__cdecl* _SSL_CTX_ctrl)(SSL_CTX*, int, long, void*);\r
 typedef BIO_METHOD* (__cdecl* _BIO_s_mem)();\r
@@ -69,10 +71,9 @@ typedef unsigned char* (__cdecl* _SHA512)(const unsigned char*, size_t, unsigned
 _SSL_load_error_strings p_SSL_load_error_strings;\r
 _SSL_library_init p_SSL_library_init;\r
 _SSLv23_method p_SSLv23_method;\r
-_SSL_CTX_new p_SSL_CTX_new;\r
-_SSL_CTX_free p_SSL_CTX_free;\r
 _SSL_new p_SSL_new;\r
 _SSL_free p_SSL_free;\r
+_SSL_ctrl p_SSL_ctrl;\r
 _SSL_shutdown p_SSL_shutdown;\r
 _SSL_get_fd p_SSL_get_fd;\r
 _SSL_set_fd p_SSL_set_fd;\r
@@ -86,6 +87,9 @@ _SSL_get_peer_certificate p_SSL_get_peer_certificate;
 _SSL_get_verify_result p_SSL_get_verify_result;\r
 _SSL_get_session p_SSL_get_session;\r
 _SSL_set_session p_SSL_set_session;\r
+_SSL_set_cipher_list p_SSL_set_cipher_list;\r
+_SSL_CTX_new p_SSL_CTX_new;\r
+_SSL_CTX_free p_SSL_CTX_free;\r
 _SSL_CTX_get_cert_store p_SSL_CTX_get_cert_store;\r
 _SSL_CTX_ctrl p_SSL_CTX_ctrl;\r
 _BIO_s_mem p_BIO_s_mem;\r
@@ -164,10 +168,9 @@ BOOL LoadOpenSSL()
                || !(p_SSL_load_error_strings = (_SSL_load_error_strings)GetProcAddress(g_hOpenSSL, "SSL_load_error_strings"))\r
                || !(p_SSL_library_init = (_SSL_library_init)GetProcAddress(g_hOpenSSL, "SSL_library_init"))\r
                || !(p_SSLv23_method = (_SSLv23_method)GetProcAddress(g_hOpenSSL, "SSLv23_method"))\r
-               || !(p_SSL_CTX_new = (_SSL_CTX_new)GetProcAddress(g_hOpenSSL, "SSL_CTX_new"))\r
-               || !(p_SSL_CTX_free = (_SSL_CTX_free)GetProcAddress(g_hOpenSSL, "SSL_CTX_free"))\r
                || !(p_SSL_new = (_SSL_new)GetProcAddress(g_hOpenSSL, "SSL_new"))\r
                || !(p_SSL_free = (_SSL_free)GetProcAddress(g_hOpenSSL, "SSL_free"))\r
+               || !(p_SSL_ctrl = (_SSL_ctrl)GetProcAddress(g_hOpenSSL, "SSL_ctrl"))\r
                || !(p_SSL_shutdown = (_SSL_shutdown)GetProcAddress(g_hOpenSSL, "SSL_shutdown"))\r
                || !(p_SSL_get_fd = (_SSL_get_fd)GetProcAddress(g_hOpenSSL, "SSL_get_fd"))\r
                || !(p_SSL_set_fd = (_SSL_set_fd)GetProcAddress(g_hOpenSSL, "SSL_set_fd"))\r
@@ -181,6 +184,9 @@ BOOL LoadOpenSSL()
                || !(p_SSL_get_verify_result = (_SSL_get_verify_result)GetProcAddress(g_hOpenSSL, "SSL_get_verify_result"))\r
                || !(p_SSL_get_session = (_SSL_get_session)GetProcAddress(g_hOpenSSL, "SSL_get_session"))\r
                || !(p_SSL_set_session = (_SSL_set_session)GetProcAddress(g_hOpenSSL, "SSL_set_session"))\r
+               || !(p_SSL_set_cipher_list = (_SSL_set_cipher_list)GetProcAddress(g_hOpenSSL, "SSL_set_cipher_list"))\r
+               || !(p_SSL_CTX_new = (_SSL_CTX_new)GetProcAddress(g_hOpenSSL, "SSL_CTX_new"))\r
+               || !(p_SSL_CTX_free = (_SSL_CTX_free)GetProcAddress(g_hOpenSSL, "SSL_CTX_free"))\r
                || !(p_SSL_CTX_get_cert_store = (_SSL_CTX_get_cert_store)GetProcAddress(g_hOpenSSL, "SSL_CTX_get_cert_store"))\r
                || !(p_SSL_CTX_ctrl = (_SSL_CTX_ctrl)GetProcAddress(g_hOpenSSL, "SSL_CTX_ctrl")))\r
        {\r
@@ -609,11 +615,12 @@ BOOL GetHashSHA512(const void* pData, DWORD Size, void* pHash)
 }\r
 \r
 // SSLセッションを開始\r
-BOOL AttachSSL(SOCKET s, SOCKET parent, BOOL* pbAborted)\r
+BOOL AttachSSL(SOCKET s, SOCKET parent, BOOL* pbAborted, BOOL bStrengthen)\r
 {\r
        BOOL r;\r
        DWORD Time;\r
        SSL** ppSSL;\r
+       BOOL bInherited;\r
        SSL** ppSSLParent;\r
        SSL_SESSION* pSession;\r
        int Return;\r
@@ -636,6 +643,7 @@ BOOL AttachSSL(SOCKET s, SOCKET parent, BOOL* pbAborted)
                        {\r
                                if(p_SSL_set_fd(*ppSSL, s) != 0)\r
                                {\r
+                                       bInherited = FALSE;\r
                                        if(parent != INVALID_SOCKET)\r
                                        {\r
                                                if(ppSSLParent = FindSSLPointerFromSocket(parent))\r
@@ -643,11 +651,18 @@ BOOL AttachSSL(SOCKET s, SOCKET parent, BOOL* pbAborted)
                                                        if(pSession = p_SSL_get_session(*ppSSLParent))\r
                                                        {\r
                                                                if(p_SSL_set_session(*ppSSL, pSession) == 1)\r
-                                                               {\r
-                                                               }\r
+                                                                       bInherited = TRUE;\r
                                                        }\r
                                                }\r
                                        }\r
+                                       if(!bInherited)\r
+                                       {\r
+                                               if(bStrengthen)\r
+                                               {\r
+                                                       p_SSL_ctrl(*ppSSL, SSL_CTRL_OPTIONS, SSL_OP_NO_SSLv2, NULL);\r
+                                                       p_SSL_set_cipher_list(*ppSSL, "HIGH");\r
+                                               }\r
+                                       }\r
                                        // SSLのネゴシエーションには時間がかかる場合がある\r
                                        r = TRUE;\r
                                        while(r)\r
@@ -757,7 +772,7 @@ SOCKET FTPS_accept(SOCKET s, struct sockaddr *addr, int *addrlen)
        BOOL bAborted;\r
        r = accept(s, addr, addrlen);\r
        bAborted = FALSE;\r
-       if(!AttachSSL(r, INVALID_SOCKET, &bAborted))\r
+       if(!AttachSSL(r, INVALID_SOCKET, &bAborted, TRUE))\r
        {\r
                closesocket(r);\r
                return INVALID_SOCKET;\r
@@ -773,7 +788,7 @@ int FTPS_connect(SOCKET s, const struct sockaddr *name, int namelen)
        BOOL bAborted;\r
        r = connect(s, name, namelen);\r
        bAborted = FALSE;\r
-       if(!AttachSSL(r, INVALID_SOCKET, &bAborted))\r
+       if(!AttachSSL(r, INVALID_SOCKET, &bAborted, TRUE))\r
                return SOCKET_ERROR;\r
        return r;\r
 }\r
index 0415e5b..3a206f0 100644 (file)
@@ -26,7 +26,7 @@ BOOL GetHashSHA224(const void* pData, DWORD Size, void* pHash);
 BOOL GetHashSHA256(const void* pData, DWORD Size, void* pHash);\r
 BOOL GetHashSHA384(const void* pData, DWORD Size, void* pHash);\r
 BOOL GetHashSHA512(const void* pData, DWORD Size, void* pHash);\r
-BOOL AttachSSL(SOCKET s, SOCKET parent, BOOL* pbAborted);\r
+BOOL AttachSSL(SOCKET s, SOCKET parent, BOOL* pbAborted, BOOL bStrengthen);\r
 BOOL DetachSSL(SOCKET s);\r
 BOOL IsSSLAttached(SOCKET s);\r
 SOCKET FTPS_socket(int af, int type, int protocol);\r