OSDN Git Service

Fix bugs of file deletion code on transfer thread (but it is unused).
authors_kawamoto <s_kawamoto@users.sourceforge.jp>
Thu, 13 Oct 2011 10:16:56 +0000 (19:16 +0900)
committers_kawamoto <s_kawamoto@users.sourceforge.jp>
Thu, 13 Oct 2011 10:16:56 +0000 (19:16 +0900)
Fix bugs on trying encrypted connection.
Remove log size limit for Windows 9x.

FFFTP_Eng_Release/FFFTP.exe
Release/FFFTP.exe
common.h
connect.c
getput.c
hostman.c
socket.c
taskwin.c

index 9842d71..9cd530b 100644 (file)
Binary files a/FFFTP_Eng_Release/FFFTP.exe and b/FFFTP_Eng_Release/FFFTP.exe differ
index 0141b13..fb471a7 100644 (file)
Binary files a/Release/FFFTP.exe and b/Release/FFFTP.exe differ
index 851bd6e..e477ee0 100644 (file)
--- a/common.h
+++ b/common.h
@@ -921,6 +921,7 @@ typedef struct {
        char DialEntry[RAS_NAME_LEN+1];         /* ダイアルアップエントリ */\r
        // 暗号化通信対応\r
        int CryptMode;                                          /* 暗号化通信モード (CRYPT_xxx) */\r
+       int UseNoEncryption;                            /* 暗号化なしで接続する (YES/NO) */\r
        int UseFTPES;                                           /* FTPESで接続する (YES/NO) */\r
        int UseFTPIS;                                           /* FTPISで接続する (YES/NO) */\r
        int UseSFTP;                                            /* SFTPで接続する (YES/NO) */\r
index 86b9b15..af55002 100644 (file)
--- a/connect.c
+++ b/connect.c
@@ -57,7 +57,10 @@ static int SendInitCommand(char *Cmd);
 static void AskUseFireWall(char *Host, int *Fire, int *Pasv, int *List);\r
 static void SaveCurrentSetToHistory(void);\r
 static int ReConnectSkt(SOCKET *Skt);\r
-static SOCKET DoConnect(char *Host, char *User, char *Pass, char *Acct, int Port, int Fwall, int SavePass, int Security);\r
+// 暗号化通信対応\r
+//static SOCKET DoConnect(char *Host, char *User, char *Pass, char *Acct, int Port, int Fwall, int SavePass, int Security);\r
+static SOCKET DoConnectCrypt(int CryptMode, HOSTDATA* HostData, char *Host, char *User, char *Pass, char *Acct, int Port, int Fwall, int SavePass, int Security);\r
+static SOCKET DoConnect(HOSTDATA* HostData, char *Host, char *User, char *Pass, char *Acct, int Port, int Fwall, int SavePass, int Security);\r
 static int CheckOneTimePassword(char *Pass, char *Reply, int Type);\r
 static BOOL CALLBACK BlkHookFnc(void);\r
 static int Socks5MakeCmdPacket(SOCKS5REQUEST *Packet, char Cmd, int ValidIP, ulong IP, char *Host, ushort Port);\r
@@ -159,7 +162,9 @@ void ConnectProc(int Type, int Num)
                                Save = YES;\r
 \r
                        DisableUserOpe();\r
-                       CmdCtrlSocket = DoConnect(CurHost.HostAdrs, CurHost.UserName, CurHost.PassWord, CurHost.Account, CurHost.Port, CurHost.FireWall, Save, CurHost.Security);\r
+                       // 暗号化通信対応\r
+//                     CmdCtrlSocket = DoConnect(CurHost.HostAdrs, CurHost.UserName, CurHost.PassWord, CurHost.Account, CurHost.Port, CurHost.FireWall, Save, CurHost.Security);\r
+                       CmdCtrlSocket = DoConnect(&CurHost, CurHost.HostAdrs, CurHost.UserName, CurHost.PassWord, CurHost.Account, CurHost.Port, CurHost.FireWall, Save, CurHost.Security);\r
                        TrnCtrlSocket = CmdCtrlSocket;\r
 \r
                        if(CmdCtrlSocket != INVALID_SOCKET)\r
@@ -238,7 +243,9 @@ void QuickConnectProc(void)
                        SetSyncMoveMode(CurHost.SyncMove);\r
 \r
                        DisableUserOpe();\r
-                       CmdCtrlSocket = DoConnect(CurHost.HostAdrs, CurHost.UserName, CurHost.PassWord, CurHost.Account, CurHost.Port, CurHost.FireWall, NO, CurHost.Security);\r
+                       // 暗号化通信対応\r
+//                     CmdCtrlSocket = DoConnect(CurHost.HostAdrs, CurHost.UserName, CurHost.PassWord, CurHost.Account, CurHost.Port, CurHost.FireWall, NO, CurHost.Security);\r
+                       CmdCtrlSocket = DoConnect(&CurHost, CurHost.HostAdrs, CurHost.UserName, CurHost.PassWord, CurHost.Account, CurHost.Port, CurHost.FireWall, NO, CurHost.Security);\r
                        TrnCtrlSocket = CmdCtrlSocket;\r
 \r
                        if(CmdCtrlSocket != INVALID_SOCKET)\r
@@ -410,7 +417,9 @@ void DirectConnectProc(char *unc, int Kanji, int Kana, int Fkanji, int TrMode)
                }\r
 \r
                DisableUserOpe();\r
-               CmdCtrlSocket = DoConnect(CurHost.HostAdrs, CurHost.UserName, CurHost.PassWord, CurHost.Account, CurHost.Port, CurHost.FireWall, NO, CurHost.Security);\r
+               // 暗号化通信対応\r
+//             CmdCtrlSocket = DoConnect(CurHost.HostAdrs, CurHost.UserName, CurHost.PassWord, CurHost.Account, CurHost.Port, CurHost.FireWall, NO, CurHost.Security);\r
+               CmdCtrlSocket = DoConnect(&CurHost, CurHost.HostAdrs, CurHost.UserName, CurHost.PassWord, CurHost.Account, CurHost.Port, CurHost.FireWall, NO, CurHost.Security);\r
                TrnCtrlSocket = CmdCtrlSocket;\r
 \r
                if(CmdCtrlSocket != INVALID_SOCKET)\r
@@ -486,7 +495,9 @@ void HistoryConnectProc(int MenuCmd)
                        DispTransferType();\r
 \r
                        DisableUserOpe();\r
-                       CmdCtrlSocket = DoConnect(CurHost.HostAdrs, CurHost.UserName, CurHost.PassWord, CurHost.Account, CurHost.Port, CurHost.FireWall, NO, CurHost.Security);\r
+                       // 暗号化通信対応\r
+//                     CmdCtrlSocket = DoConnect(CurHost.HostAdrs, CurHost.UserName, CurHost.PassWord, CurHost.Account, CurHost.Port, CurHost.FireWall, NO, CurHost.Security);\r
+                       CmdCtrlSocket = DoConnect(&CurHost, CurHost.HostAdrs, CurHost.UserName, CurHost.PassWord, CurHost.Account, CurHost.Port, CurHost.FireWall, NO, CurHost.Security);\r
                        TrnCtrlSocket = CmdCtrlSocket;\r
 \r
                        if(CmdCtrlSocket != INVALID_SOCKET)\r
@@ -959,6 +970,8 @@ int ReConnectTrnSkt(SOCKET *Skt)
 {\r
 //     char Path[FMAX_PATH+1];\r
        int Sts;\r
+       // 暗号化通信対応\r
+       HOSTDATA HostData;\r
 \r
        Sts = FFFTP_FAIL;\r
 \r
@@ -969,7 +982,18 @@ int ReConnectTrnSkt(SOCKET *Skt)
        if(*Skt != INVALID_SOCKET)\r
                do_closesocket(*Skt);\r
        /* 再接続 */\r
-       if((*Skt = DoConnect(CurHost.HostAdrs, CurHost.UserName, CurHost.PassWord, CurHost.Account, CurHost.Port, CurHost.FireWall, NO, CurHost.Security)) != INVALID_SOCKET)\r
+       // 暗号化通信対応\r
+       HostData = CurHost;\r
+       if(HostData.CryptMode != CRYPT_NONE)\r
+               HostData.UseNoEncryption = NO;\r
+       if(HostData.CryptMode != CRYPT_FTPES)\r
+               HostData.UseFTPES = NO;\r
+       if(HostData.CryptMode != CRYPT_FTPIS)\r
+               HostData.UseFTPIS = NO;\r
+       if(HostData.CryptMode != CRYPT_SFTP)\r
+               HostData.UseSFTP = NO;\r
+//     if((*Skt = DoConnect(CurHost.HostAdrs, CurHost.UserName, CurHost.PassWord, CurHost.Account, CurHost.Port, CurHost.FireWall, NO, CurHost.Security)) != INVALID_SOCKET)\r
+       if((*Skt = DoConnect(&HostData, CurHost.HostAdrs, CurHost.UserName, CurHost.PassWord, CurHost.Account, CurHost.Port, CurHost.FireWall, NO, CurHost.Security)) != INVALID_SOCKET)\r
        {\r
 //             AskRemoteCurDir(Path, FMAX_PATH);\r
 //             DoCWD(Path, YES, YES, YES);\r
@@ -1007,7 +1031,9 @@ static int ReConnectSkt(SOCKET *Skt)
        if(*Skt != INVALID_SOCKET)\r
                do_closesocket(*Skt);\r
        /* 再接続 */\r
-       if((*Skt = DoConnect(CurHost.HostAdrs, CurHost.UserName, CurHost.PassWord, CurHost.Account, CurHost.Port, CurHost.FireWall, NO, CurHost.Security)) != INVALID_SOCKET)\r
+       // 暗号化通信対応\r
+//     if((*Skt = DoConnect(CurHost.HostAdrs, CurHost.UserName, CurHost.PassWord, CurHost.Account, CurHost.Port, CurHost.FireWall, NO, CurHost.Security)) != INVALID_SOCKET)\r
+       if((*Skt = DoConnect(&CurHost, CurHost.HostAdrs, CurHost.UserName, CurHost.PassWord, CurHost.Account, CurHost.Port, CurHost.FireWall, NO, CurHost.Security)) != INVALID_SOCKET)\r
        {\r
                AskRemoteCurDir(Path, FMAX_PATH);\r
                DoCWD(Path, YES, YES, YES);\r
@@ -1216,7 +1242,8 @@ int AskConnecting(void)
 *                      none    Connect host →                                              USER user(h) →      PASS pass(h) → ACCT acct\r
 *----------------------------------------------------------------------------*/\r
 \r
-static SOCKET DoConnect(char *Host, char *User, char *Pass, char *Acct, int Port, int Fwall, int SavePass, int Security)\r
+// 暗号化通信対応\r
+static SOCKET DoConnectCrypt(int CryptMode, HOSTDATA* HostData, char *Host, char *User, char *Pass, char *Acct, int Port, int Fwall, int SavePass, int Security)\r
 {\r
        int Sts;\r
        int Flg;\r
@@ -1232,143 +1259,173 @@ static SOCKET DoConnect(char *Host, char *User, char *Pass, char *Acct, int Port
        char TmpBuf[ONELINE_BUF_SIZE];\r
        struct linger LingerOpt;\r
 \r
-       if(Fwall == YES)\r
-               Fwall = FwallType;\r
-       else\r
-               Fwall = FWALL_NONE;\r
+       // 暗号化通信対応\r
+       ContSock = INVALID_SOCKET;\r
 \r
-       TryConnect = YES;\r
-       CancelFlg = NO;\r
+       if(CryptMode == CRYPT_NONE || CryptMode == CRYPT_FTPES || CryptMode == CRYPT_FTPIS)\r
+       {\r
+               if(Fwall == YES)\r
+                       Fwall = FwallType;\r
+               else\r
+                       Fwall = FWALL_NONE;\r
+\r
+               TryConnect = YES;\r
+               CancelFlg = NO;\r
 #if 0\r
-//     WSASetBlockingHook(BlkHookFnc);\r
+//             WSASetBlockingHook(BlkHookFnc);\r
 #endif\r
 \r
-       ContSock = INVALID_SOCKET;\r
+               ContSock = INVALID_SOCKET;\r
 \r
-       HostPort = Port;\r
-       Tmp = Host;\r
-       if(((Fwall >= FWALL_FU_FP_SITE) && (Fwall <= FWALL_OPEN)) ||\r
-          (Fwall == FWALL_SIDEWINDER) ||\r
-          (Fwall == FWALL_FU_FP))\r
-       {\r
-               Tmp = FwallHost;\r
-               Port = FwallPort;\r
-       }\r
+               HostPort = Port;\r
+               Tmp = Host;\r
+               if(((Fwall >= FWALL_FU_FP_SITE) && (Fwall <= FWALL_OPEN)) ||\r
+                  (Fwall == FWALL_SIDEWINDER) ||\r
+                  (Fwall == FWALL_FU_FP))\r
+               {\r
+                       Tmp = FwallHost;\r
+                       Port = FwallPort;\r
+               }\r
 \r
-       if(strlen(Tmp) != 0)\r
-       {\r
-               if((ContSock = connectsock(Tmp, Port, "", &CancelFlg)) != INVALID_SOCKET)\r
+               if(strlen(Tmp) != 0)\r
                {\r
-                       // バッファを無効\r
+                       if((ContSock = connectsock(Tmp, Port, "", &CancelFlg)) != INVALID_SOCKET)\r
+                       {\r
+                               // バッファを無効\r
 #ifdef DISABLE_CONTROL_NETWORK_BUFFERS\r
-                       int BufferSize = 0;\r
-                       setsockopt(ContSock, SOL_SOCKET, SO_SNDBUF, (char*)&BufferSize, sizeof(int));\r
-                       setsockopt(ContSock, SOL_SOCKET, SO_RCVBUF, (char*)&BufferSize, sizeof(int));\r
+                               int BufferSize = 0;\r
+                               setsockopt(ContSock, SOL_SOCKET, SO_SNDBUF, (char*)&BufferSize, sizeof(int));\r
+                               setsockopt(ContSock, SOL_SOCKET, SO_RCVBUF, (char*)&BufferSize, sizeof(int));\r
 #endif\r
-                       while((Sts = ReadReplyMessage(ContSock, Buf, 1024, &CancelFlg, TmpBuf) / 100) == FTP_PRELIM)\r
-                               ;\r
+                               // FTPIS対応\r
+//                             while((Sts = ReadReplyMessage(ContSock, Buf, 1024, &CancelFlg, TmpBuf) / 100) == FTP_PRELIM)\r
+//                                     ;\r
+                               if(CryptMode == CRYPT_FTPIS)\r
+                               {\r
+                                       if(AttachSSL(ContSock))\r
+                                       {\r
+                                               while((Sts = ReadReplyMessage(ContSock, Buf, 1024, &CancelFlg, TmpBuf) / 100) == FTP_PRELIM)\r
+                                                       ;\r
+                                               if((Sts = command(ContSock, Reply, &CancelFlg, "PBSZ 0")) == 200)\r
+                                               {\r
+                                                       if((Sts = command(ContSock, Reply, &CancelFlg, "PROT P")) == 200)\r
+                                                       {\r
+                                                       }\r
+                                                       else\r
+                                                               Sts = FTP_ERROR;\r
+                                               }\r
+                                               else\r
+                                                       Sts = FTP_ERROR;\r
+                                       }\r
+                                       else\r
+                                               Sts = FTP_ERROR;\r
+                               }\r
+                               else\r
+                               {\r
+                                       while((Sts = ReadReplyMessage(ContSock, Buf, 1024, &CancelFlg, TmpBuf) / 100) == FTP_PRELIM)\r
+                                               ;\r
+                               }\r
 \r
-                       if(Sts == FTP_COMPLETE)\r
-                       {\r
-                               Flg = 1;\r
-                               if(setsockopt(ContSock, SOL_SOCKET, SO_OOBINLINE, (LPSTR)&Flg, sizeof(Flg)) == SOCKET_ERROR)\r
-                                       ReportWSError("setsockopt", WSAGetLastError());\r
-                               // データ転送用ソケットのTCP遅延転送が無効されているので念のため\r
-                               if(setsockopt(ContSock, IPPROTO_TCP, TCP_NODELAY, (LPSTR)&Flg, sizeof(Flg)) == SOCKET_ERROR)\r
-                                       ReportWSError("setsockopt", WSAGetLastError());\r
+                               if(Sts == FTP_COMPLETE)\r
+                               {\r
+                                       Flg = 1;\r
+                                       if(setsockopt(ContSock, SOL_SOCKET, SO_OOBINLINE, (LPSTR)&Flg, sizeof(Flg)) == SOCKET_ERROR)\r
+                                               ReportWSError("setsockopt", WSAGetLastError());\r
+                                       // データ転送用ソケットのTCP遅延転送が無効されているので念のため\r
+                                       if(setsockopt(ContSock, IPPROTO_TCP, TCP_NODELAY, (LPSTR)&Flg, sizeof(Flg)) == SOCKET_ERROR)\r
+                                               ReportWSError("setsockopt", WSAGetLastError());\r
 //#pragma aaa\r
-                               Flg = 1;\r
-                               if(setsockopt(ContSock, SOL_SOCKET, SO_KEEPALIVE, (LPSTR)&Flg, sizeof(Flg)) == SOCKET_ERROR)\r
-                                       ReportWSError("setsockopt", WSAGetLastError());\r
-                               LingerOpt.l_onoff = 1;\r
-                               LingerOpt.l_linger = 90;\r
-                               if(setsockopt(ContSock, SOL_SOCKET, SO_LINGER, (LPSTR)&LingerOpt, sizeof(LingerOpt)) == SOCKET_ERROR)\r
-                                       ReportWSError("setsockopt", WSAGetLastError());\r
+                                       Flg = 1;\r
+                                       if(setsockopt(ContSock, SOL_SOCKET, SO_KEEPALIVE, (LPSTR)&Flg, sizeof(Flg)) == SOCKET_ERROR)\r
+                                               ReportWSError("setsockopt", WSAGetLastError());\r
+                                       LingerOpt.l_onoff = 1;\r
+                                       LingerOpt.l_linger = 90;\r
+                                       if(setsockopt(ContSock, SOL_SOCKET, SO_LINGER, (LPSTR)&LingerOpt, sizeof(LingerOpt)) == SOCKET_ERROR)\r
+                                               ReportWSError("setsockopt", WSAGetLastError());\r
 ///////\r
 \r
 \r
-                               /*===== 認証を行なう =====*/\r
+                                       /*===== 認証を行なう =====*/\r
 \r
-                               Sts = FTP_COMPLETE;\r
-                               if((Fwall == FWALL_FU_FP_SITE) ||\r
-                                  (Fwall == FWALL_FU_FP_USER) ||\r
-                                  (Fwall == FWALL_FU_FP))\r
-                               {\r
-                                       if((Sts = command(ContSock, Reply, &CancelFlg, "USER %s", FwallUser) / 100) == FTP_CONTINUE)\r
+                                       Sts = FTP_COMPLETE;\r
+                                       if((Fwall == FWALL_FU_FP_SITE) ||\r
+                                          (Fwall == FWALL_FU_FP_USER) ||\r
+                                          (Fwall == FWALL_FU_FP))\r
                                        {\r
-                                               CheckOneTimePassword(FwallPass, Reply, FwallSecurity);\r
-                                               Sts = command(ContSock, NULL, &CancelFlg, "PASS %s", Reply) / 100;\r
+                                               if((Sts = command(ContSock, Reply, &CancelFlg, "USER %s", FwallUser) / 100) == FTP_CONTINUE)\r
+                                               {\r
+                                                       CheckOneTimePassword(FwallPass, Reply, FwallSecurity);\r
+                                                       Sts = command(ContSock, NULL, &CancelFlg, "PASS %s", Reply) / 100;\r
+                                               }\r
                                        }\r
-                               }\r
-                               else if(Fwall == FWALL_SIDEWINDER)\r
-                               {\r
-                                       Sts = command(ContSock, Reply, &CancelFlg, "USER %s:%s%c%s", FwallUser, FwallPass, FwallDelimiter, Host) / 100;\r
-                               }\r
-                               if((Sts != FTP_COMPLETE) && (Sts != FTP_CONTINUE))\r
-                               {\r
-                                       SetTaskMsg(MSGJPN006);\r
-                                       DoClose(ContSock);\r
-                                       ContSock = INVALID_SOCKET;\r
-                               }\r
-                               else\r
-                               {\r
-                                       if((Fwall == FWALL_FU_FP_SITE) || (Fwall == FWALL_OPEN))\r
+                                       else if(Fwall == FWALL_SIDEWINDER)\r
                                        {\r
-                                               Flg = 0;\r
-                                               if(Fwall == FWALL_OPEN)\r
-                                                       Flg = 2;\r
-                                               if(FwallLower == YES)\r
-                                                       Flg++;\r
-\r
-                                               if(HostPort == PORT_NOR)\r
-                                                       Sts = command(ContSock, NULL, &CancelFlg, "%s %s", SiteTbl[Flg], Host) / 100;\r
-                                               else\r
-                                                       Sts = command(ContSock, NULL, &CancelFlg, "%s %s %d", SiteTbl[Flg], Host, HostPort) / 100;\r
+                                               Sts = command(ContSock, Reply, &CancelFlg, "USER %s:%s%c%s", FwallUser, FwallPass, FwallDelimiter, Host) / 100;\r
                                        }\r
-\r
                                        if((Sts != FTP_COMPLETE) && (Sts != FTP_CONTINUE))\r
                                        {\r
-                                               SetTaskMsg(MSGJPN007, Host);\r
+                                               SetTaskMsg(MSGJPN006);\r
                                                DoClose(ContSock);\r
                                                ContSock = INVALID_SOCKET;\r
                                        }\r
                                        else\r
                                        {\r
-                                               Anony = NO;\r
-                                               if((strlen(User) != 0) || \r
-                                                  (InputDialogBox(username_dlg, GetMainHwnd(), NULL, User, USER_NAME_LEN+1, &Anony, IDH_HELP_TOPIC_0000001) == YES))\r
+                                               if((Fwall == FWALL_FU_FP_SITE) || (Fwall == FWALL_OPEN))\r
                                                {\r
-                                                       if(Anony == YES)\r
-                                                       {\r
-                                                               strcpy(User, "anonymous");\r
-                                                               strcpy(Pass, UserMailAdrs);\r
-                                                       }\r
+                                                       Flg = 0;\r
+                                                       if(Fwall == FWALL_OPEN)\r
+                                                               Flg = 2;\r
+                                                       if(FwallLower == YES)\r
+                                                               Flg++;\r
+\r
+                                                       if(HostPort == PORT_NOR)\r
+                                                               Sts = command(ContSock, NULL, &CancelFlg, "%s %s", SiteTbl[Flg], Host) / 100;\r
+                                                       else\r
+                                                               Sts = command(ContSock, NULL, &CancelFlg, "%s %s %d", SiteTbl[Flg], Host, HostPort) / 100;\r
+                                               }\r
 \r
-                                                       if((Fwall == FWALL_FU_FP_USER) || (Fwall == FWALL_USER))\r
+                                               if((Sts != FTP_COMPLETE) && (Sts != FTP_CONTINUE))\r
+                                               {\r
+                                                       SetTaskMsg(MSGJPN007, Host);\r
+                                                       DoClose(ContSock);\r
+                                                       ContSock = INVALID_SOCKET;\r
+                                               }\r
+                                               else\r
+                                               {\r
+                                                       Anony = NO;\r
+                                                       if((strlen(User) != 0) || \r
+                                                          (InputDialogBox(username_dlg, GetMainHwnd(), NULL, User, USER_NAME_LEN+1, &Anony, IDH_HELP_TOPIC_0000001) == YES))\r
                                                        {\r
-                                                               if(HostPort == PORT_NOR)\r
-                                                                       sprintf(Buf, "%s%c%s", User, FwallDelimiter, Host);\r
+                                                               if(Anony == YES)\r
+                                                               {\r
+                                                                       strcpy(User, "anonymous");\r
+                                                                       strcpy(Pass, UserMailAdrs);\r
+                                                               }\r
+\r
+                                                               if((Fwall == FWALL_FU_FP_USER) || (Fwall == FWALL_USER))\r
+                                                               {\r
+                                                                       if(HostPort == PORT_NOR)\r
+                                                                               sprintf(Buf, "%s%c%s", User, FwallDelimiter, Host);\r
+                                                                       else\r
+                                                                               sprintf(Buf, "%s%c%s %d", User, FwallDelimiter, Host, HostPort);\r
+                                                               }\r
                                                                else\r
-                                                                       sprintf(Buf, "%s%c%s %d", User, FwallDelimiter, Host, HostPort);\r
-                                                       }\r
-                                                       else\r
-                                                               strcpy(Buf, User);\r
+                                                                       strcpy(Buf, User);\r
 \r
-                                                       // FTPES対応\r
-                                                       // 2回以上呼ばれる事があるため既にFTPESで接続していても再確認\r
-                                                       if(CurHost.CryptMode == CRYPT_NONE || CurHost.CryptMode == CRYPT_FTPES)\r
-                                                       {\r
-                                                               if(IsOpenSSLLoaded() && CurHost.UseFTPES == YES && (Sts = command(ContSock, Reply, &CancelFlg, "AUTH TLS")) == 234)\r
+                                                               // FTPES対応\r
+                                                               if(CryptMode == CRYPT_FTPES)\r
                                                                {\r
-                                                                       // SSLに切り替え\r
-                                                                       SetTaskMsg(MSGJPN315);\r
-                                                                       CurHost.CryptMode = CRYPT_FTPES;\r
-                                                                       if(AttachSSL(ContSock))\r
+                                                                       if(IsOpenSSLLoaded() && (Sts = command(ContSock, Reply, &CancelFlg, "AUTH TLS")) == 234)\r
                                                                        {\r
-                                                                               if((Sts = command(ContSock, Reply, &CancelFlg, "PBSZ 0")) == 200)\r
+                                                                               if(AttachSSL(ContSock))\r
                                                                                {\r
-                                                                                       if((Sts = command(ContSock, Reply, &CancelFlg, "PROT P")) == 200)\r
+                                                                                       if((Sts = command(ContSock, Reply, &CancelFlg, "PBSZ 0")) == 200)\r
                                                                                        {\r
+                                                                                               if((Sts = command(ContSock, Reply, &CancelFlg, "PROT P")) == 200)\r
+                                                                                               {\r
+                                                                                               }\r
+                                                                                               else\r
+                                                                                                       Sts = FTP_ERROR;\r
                                                                                        }\r
                                                                                        else\r
                                                                                                Sts = FTP_ERROR;\r
@@ -1379,129 +1436,160 @@ static SOCKET DoConnect(char *Host, char *User, char *Pass, char *Acct, int Port
                                                                        else\r
                                                                                Sts = FTP_ERROR;\r
                                                                }\r
-                                                               else\r
-                                                               {\r
-                                                                       // 暗号化なし\r
-                                                                       CurHost.CryptMode = CRYPT_NONE;\r
-                                                                       SetTaskMsg(MSGJPN314);\r
-                                                               }\r
-                                                       }\r
 \r
-                                                       ReInPass = NO;\r
-                                                       do\r
-                                                       {\r
-                                                               Continue = NO;\r
-                                                               if((Sts = command(ContSock, Reply, &CancelFlg, "USER %s", Buf) / 100) == FTP_CONTINUE)\r
+                                                               ReInPass = NO;\r
+                                                               do\r
                                                                {\r
-                                                                       if((strlen(Pass) != 0) || \r
-                                                                          (InputDialogBox(passwd_dlg, GetMainHwnd(), NULL, Pass, PASSWORD_LEN+1, &Anony, IDH_HELP_TOPIC_0000001) == YES))\r
+                                                                       // FTPES対応\r
+                                                                       if(Sts == FTP_ERROR)\r
+                                                                               break;\r
+                                                                       Continue = NO;\r
+                                                                       if((Sts = command(ContSock, Reply, &CancelFlg, "USER %s", Buf) / 100) == FTP_CONTINUE)\r
                                                                        {\r
-                                                                               CheckOneTimePassword(Pass, Reply, Security);\r
+                                                                               if((strlen(Pass) != 0) || \r
+                                                                                  (InputDialogBox(passwd_dlg, GetMainHwnd(), NULL, Pass, PASSWORD_LEN+1, &Anony, IDH_HELP_TOPIC_0000001) == YES))\r
+                                                                               {\r
+                                                                                       CheckOneTimePassword(Pass, Reply, Security);\r
 \r
-                                                                               /* パスワードがスペース1個の時はパスワードの実体なしとする */\r
-                                                                               if(strcmp(Reply, " ") == 0)\r
-                                                                                       strcpy(Reply, "");\r
+                                                                                       /* パスワードがスペース1個の時はパスワードの実体なしとする */\r
+                                                                                       if(strcmp(Reply, " ") == 0)\r
+                                                                                               strcpy(Reply, "");\r
 \r
-                                                                               Sts = command(ContSock, NULL, &CancelFlg, "PASS %s", Reply) / 100;\r
-                                                                               if(Sts == FTP_ERROR)\r
-                                                                               {\r
-                                                                                       strcpy(Pass, "");\r
-                                                                                       if(InputDialogBox(re_passwd_dlg, GetMainHwnd(), NULL, Pass, PASSWORD_LEN+1, &Anony, IDH_HELP_TOPIC_0000001) == YES)\r
-                                                                                               Continue = YES;\r
-                                                                                       else\r
-                                                                                               DoPrintf("No password specified.");\r
-                                                                                       ReInPass = YES;\r
-                                                                               }\r
-                                                                               else if(Sts == FTP_CONTINUE)\r
-                                                                               {\r
-                                                                                       if((strlen(Acct) != 0) || \r
-                                                                                          (InputDialogBox(account_dlg, GetMainHwnd(), NULL, Acct, ACCOUNT_LEN+1, &Anony, IDH_HELP_TOPIC_0000001) == YES))\r
+                                                                                       Sts = command(ContSock, NULL, &CancelFlg, "PASS %s", Reply) / 100;\r
+                                                                                       if(Sts == FTP_ERROR)\r
                                                                                        {\r
-                                                                                               Sts = command(ContSock, NULL, &CancelFlg, "ACCT %s", Acct) / 100;\r
+                                                                                               strcpy(Pass, "");\r
+                                                                                               if(InputDialogBox(re_passwd_dlg, GetMainHwnd(), NULL, Pass, PASSWORD_LEN+1, &Anony, IDH_HELP_TOPIC_0000001) == YES)\r
+                                                                                                       Continue = YES;\r
+                                                                                               else\r
+                                                                                                       DoPrintf("No password specified.");\r
+                                                                                               ReInPass = YES;\r
+                                                                                       }\r
+                                                                                       else if(Sts == FTP_CONTINUE)\r
+                                                                                       {\r
+                                                                                               if((strlen(Acct) != 0) || \r
+                                                                                                  (InputDialogBox(account_dlg, GetMainHwnd(), NULL, Acct, ACCOUNT_LEN+1, &Anony, IDH_HELP_TOPIC_0000001) == YES))\r
+                                                                                               {\r
+                                                                                                       Sts = command(ContSock, NULL, &CancelFlg, "ACCT %s", Acct) / 100;\r
+                                                                                               }\r
+                                                                                               else\r
+                                                                                                       DoPrintf("No account specified");\r
                                                                                        }\r
-                                                                                       else\r
-                                                                                               DoPrintf("No account specified");\r
                                                                                }\r
-                                                                       }\r
-                                                                       else\r
-                                                                       {\r
-                                                                               Sts = FTP_ERROR;\r
-                                                                               DoPrintf("No password specified.");\r
+                                                                               else\r
+                                                                               {\r
+                                                                                       Sts = FTP_ERROR;\r
+                                                                                       DoPrintf("No password specified.");\r
+                                                                               }\r
                                                                        }\r
                                                                }\r
+                                                               while(Continue == YES);\r
+                                                       }\r
+                                                       else\r
+                                                       {\r
+                                                               Sts = FTP_ERROR;\r
+                                                               DoPrintf("No user name specified");\r
                                                        }\r
-                                                       while(Continue == YES);\r
-                                               }\r
-                                               else\r
-                                               {\r
-                                                       Sts = FTP_ERROR;\r
-                                                       DoPrintf("No user name specified");\r
-                                               }\r
 \r
-                                               if(Sts != FTP_COMPLETE)\r
-                                               {\r
-                                                       SetTaskMsg(MSGJPN008, Host);\r
-                                                       DoClose(ContSock);\r
-                                                       ContSock = INVALID_SOCKET;\r
-                                               }\r
-                                               else if((SavePass == YES) && (ReInPass == YES))\r
-                                               {\r
-                                                       if(DialogBox(GetFtpInst(), MAKEINTRESOURCE(savepass_dlg), GetMainHwnd(), ExeEscDialogProc) == YES)\r
-                                                               SetHostPassword(AskCurrentHost(), Pass);\r
+                                                       if(Sts != FTP_COMPLETE)\r
+                                                       {\r
+                                                               SetTaskMsg(MSGJPN008, Host);\r
+                                                               DoClose(ContSock);\r
+                                                               ContSock = INVALID_SOCKET;\r
+                                                       }\r
+                                                       else if((SavePass == YES) && (ReInPass == YES))\r
+                                                       {\r
+                                                               if(DialogBox(GetFtpInst(), MAKEINTRESOURCE(savepass_dlg), GetMainHwnd(), ExeEscDialogProc) == YES)\r
+                                                                       SetHostPassword(AskCurrentHost(), Pass);\r
+                                                       }\r
                                                }\r
                                        }\r
                                }\r
-                       }\r
-                       else\r
-                       {\r
+                               else\r
+                               {\r
 //#pragma aaa\r
-                               SetTaskMsg(MSGJPN009/*"接続できません(1) %x", ContSock*/);\r
-                               DoClose(ContSock);\r
-                               ContSock = INVALID_SOCKET;\r
+                                       SetTaskMsg(MSGJPN009/*"接続できません(1) %x", ContSock*/);\r
+                                       DoClose(ContSock);\r
+                                       ContSock = INVALID_SOCKET;\r
+                               }\r
                        }\r
                }\r
-       }\r
-       else\r
-       {\r
-\r
-               if(((Fwall >= FWALL_FU_FP_SITE) && (Fwall <= FWALL_OPEN)) ||\r
-                  (Fwall == FWALL_FU_FP))\r
-                       SetTaskMsg(MSGJPN010);\r
                else\r
-                       SetTaskMsg(MSGJPN011);\r
-       }\r
+               {\r
+\r
+                       if(((Fwall >= FWALL_FU_FP_SITE) && (Fwall <= FWALL_OPEN)) ||\r
+                          (Fwall == FWALL_FU_FP))\r
+                               SetTaskMsg(MSGJPN010);\r
+                       else\r
+                               SetTaskMsg(MSGJPN011);\r
+               }\r
 \r
 #if 0\r
-//     WSAUnhookBlockingHook();\r
+//             WSAUnhookBlockingHook();\r
 #endif\r
-       TryConnect = NO;\r
+               TryConnect = NO;\r
 \r
-       // FEAT対応\r
-       // ホストの機能を確認\r
-       if(ContSock != INVALID_SOCKET)\r
-       {\r
-               if((Sts = command(ContSock, Reply, &CancelFlg, "FEAT")) == 211)\r
+               // FEAT対応\r
+               // ホストの機能を確認\r
+               if(ContSock != INVALID_SOCKET)\r
                {\r
-                       // 改行文字はReadReplyMessageで消去されるため区切り文字に空白を使用\r
+                       if((Sts = command(ContSock, Reply, &CancelFlg, "FEAT")) == 211)\r
+                       {\r
+                               // 改行文字はReadReplyMessageで消去されるため区切り文字に空白を使用\r
+                               // UTF-8対応\r
+                               if(strstr(Reply, " UTF8 "))\r
+                                       HostData->Feature |= FEATURE_UTF8;\r
+                               // MLST対応\r
+                               if(strstr(Reply, " MLST ") || strstr(Reply, " MLSD "))\r
+                                       HostData->Feature |= FEATURE_MLSD;\r
+                       }\r
                        // UTF-8対応\r
-                       if(strstr(Reply, " UTF8 "))\r
-                               CurHost.Feature |= FEATURE_UTF8;\r
-                       // MLST対応\r
-                       if(strstr(Reply, " MLST ") || strstr(Reply, " MLSD "))\r
-                               CurHost.Feature |= FEATURE_MLSD;\r
-               }\r
-               // UTF-8対応\r
-               if(CurHost.NameKanjiCode == KANJI_AUTO && (CurHost.Feature & FEATURE_UTF8))\r
-               {\r
-                       if((Sts = command(ContSock, Reply, &CancelFlg, "OPTS UTF8 ON")) == 200)\r
+                       if(HostData->NameKanjiCode == KANJI_AUTO && (HostData->Feature & FEATURE_UTF8))\r
                        {\r
+                               if((Sts = command(ContSock, Reply, &CancelFlg, "OPTS UTF8 ON")) == 200)\r
+                               {\r
+                               }\r
                        }\r
                }\r
        }\r
+       else if(CryptMode == CRYPT_SFTP)\r
+       {\r
+       }\r
 \r
        return(ContSock);\r
 }\r
 \r
+static SOCKET DoConnect(HOSTDATA* HostData, char *Host, char *User, char *Pass, char *Acct, int Port, int Fwall, int SavePass, int Security)\r
+{\r
+       SOCKET ContSock;\r
+       ContSock = INVALID_SOCKET;\r
+       if(ContSock == INVALID_SOCKET && HostData->UseSFTP == YES)\r
+       {\r
+               SetTaskMsg(MSGJPN317);\r
+               if((ContSock = DoConnectCrypt(CRYPT_SFTP, HostData, Host, User, Pass, Acct, Port, Fwall, SavePass, Security)) != INVALID_SOCKET)\r
+                       HostData->CryptMode = CRYPT_SFTP;\r
+       }\r
+//     if(ContSock == INVALID_SOCKET && HostData->UseFTPIS == YES)\r
+//     {\r
+//             SetTaskMsg(MSGJPN316);\r
+//             if((ContSock = DoConnectCrypt(CRYPT_FTPIS, HostData, Host, User, Pass, Acct, Port, Fwall, SavePass, Security)) != INVALID_SOCKET)\r
+//                     HostData->CryptMode = CRYPT_FTPIS;\r
+//     }\r
+       if(ContSock == INVALID_SOCKET && HostData->UseFTPES == YES)\r
+       {\r
+               SetTaskMsg(MSGJPN315);\r
+               if((ContSock = DoConnectCrypt(CRYPT_FTPES, HostData, Host, User, Pass, Acct, Port, Fwall, SavePass, Security)) != INVALID_SOCKET)\r
+                       HostData->CryptMode = CRYPT_FTPES;\r
+       }\r
+       if(ContSock == INVALID_SOCKET && HostData->UseNoEncryption == YES)\r
+       {\r
+               SetTaskMsg(MSGJPN314);\r
+               if((ContSock = DoConnectCrypt(CRYPT_NONE, HostData, Host, User, Pass, Acct, Port, Fwall, SavePass, Security)) != INVALID_SOCKET)\r
+                       HostData->CryptMode = CRYPT_NONE;\r
+       }\r
+       return ContSock;\r
+}\r
+\r
 \r
 /*----- ワンタイムパスワードのチェック ----------------------------------------\r
 *\r
@@ -2240,6 +2328,11 @@ int AskCryptMode(void)
        return(CurHost.CryptMode);\r
 }\r
 \r
+int AskUseNoEncryption(void)\r
+{\r
+       return(CurHost.UseNoEncryption);\r
+}\r
+\r
 int AskUseFTPES(void)\r
 {\r
        return(CurHost.UseFTPES);\r
index 1c287b6..99a45a6 100644 (file)
--- a/getput.c
+++ b/getput.c
@@ -900,7 +900,6 @@ static ULONG WINAPI TransferThread(void *Dummy)
 //                     else if(strncmp(TransPacketBase->Cmd, "R-DELE", 6) == 0)\r
                        else if(strncmp(Pos->Cmd, "R-DELE", 6) == 0)\r
                        {\r
-                               ReleaseMutex(hListAccMutex);\r
 //                             DispTransFileInfo(TransPacketBase, MSGJPN081, FALSE, YES);\r
                                DispTransFileInfo(Pos, MSGJPN081, FALSE, YES);\r
 \r
@@ -917,6 +916,7 @@ static ULONG WINAPI TransferThread(void *Dummy)
                                                CommandProcTrn(TrnSkt, NULL, "%s%s", Pos->Cmd+2, Pos->RemoteFile);\r
                                        }\r
                                }\r
+                               ReleaseMutex(hListAccMutex);\r
                        }\r
                        /* ディレクトリ作成(常にローカル側) */\r
 //                     else if(strncmp(TransPacketBase->Cmd, "L-MKD", 5) == 0)\r
index 9496ddc..02a6fc9 100644 (file)
--- a/hostman.c
+++ b/hostman.c
@@ -1312,6 +1312,7 @@ void CopyDefaultHost(HOSTDATA *Set)
        strcpy(Set->DialEntry, "");\r
        // 暗号化通信対応\r
        Set->CryptMode = CRYPT_NONE;\r
+       Set->UseNoEncryption = YES;\r
        Set->UseFTPES = YES;\r
        Set->UseFTPIS = YES;\r
        Set->UseSFTP = YES;\r
index 7c80486..86dac35 100644 (file)
--- a/socket.c
+++ b/socket.c
@@ -740,10 +740,7 @@ int do_closesocket(SOCKET s)
 \r
        // FTPS対応\r
 //     Ret = closesocket(s);\r
-       if(AskCryptMode() == CRYPT_FTPES || AskCryptMode() == CRYPT_FTPIS)\r
-               Ret = closesocketS(s);\r
-       else\r
-               Ret = closesocketS(s);\r
+       Ret = closesocketS(s);\r
        if(Ret == SOCKET_ERROR)\r
        {\r
                Error = 0;\r
@@ -970,7 +967,7 @@ int do_recv(SOCKET s, char *buf, int len, int flags, int *TimeOutErr, int *Cance
        // FTPS対応\r
        // OpenSSLでは受信確認はFD_READが複数回受信される可能性がある\r
 //     while((*CancelCheckWork == NO) && (AskAsyncDone(s, &Error, FD_READ_BIT) != YES))\r
-       while(AskCryptMode() == CRYPT_NONE && (*CancelCheckWork == NO) && (AskAsyncDone(s, &Error, FD_READ_BIT) != YES))\r
+       while(!IsSSLAttached(s) && (*CancelCheckWork == NO) && (AskAsyncDone(s, &Error, FD_READ_BIT) != YES))\r
        {\r
                if(AskAsyncDone(s, &Error, FD_CLOSE_BIT) == YES)\r
                {\r
@@ -1003,10 +1000,7 @@ int do_recv(SOCKET s, char *buf, int len, int flags, int *TimeOutErr, int *Cance
 \r
                        // FTPS対応\r
 //                     Ret = recv(s, buf, len, flags);\r
-                       if(AskCryptMode() == CRYPT_FTPES || AskCryptMode() == CRYPT_FTPIS)\r
-                               Ret = recvS(s, buf, len, flags);\r
-                       else\r
-                               Ret = recv(s, buf, len, flags);\r
+                       Ret = recvS(s, buf, len, flags);\r
                        if(Ret != SOCKET_ERROR)\r
                                break;\r
                        Error = WSAGetLastError();\r
@@ -1015,11 +1009,8 @@ int do_recv(SOCKET s, char *buf, int len, int flags, int *TimeOutErr, int *Cance
                                break;\r
                        // FTPS対応\r
                        // 受信確認をバイパスしたためここでタイムアウトの確認\r
-                       if(AskCryptMode() == CRYPT_FTPES || AskCryptMode() == CRYPT_FTPIS)\r
-                       {\r
-                               if(BackgrndMessageProc() == YES)\r
-                                       *CancelCheckWork = YES;\r
-                       }\r
+                       if(BackgrndMessageProc() == YES)\r
+                               *CancelCheckWork = YES;\r
                        else if(TimeOut != 0)\r
                        {\r
                                time(&ElapseTime);\r
@@ -1080,7 +1071,7 @@ int do_send(SOCKET s, const char *buf, int len, int flags, int *TimeOutErr, int
        // FTPS対応\r
        // 送信バッファの空き確認には影響しないが念のため\r
 //     while((*CancelCheckWork == NO) && (AskAsyncDone(s, &Error, FD_WRITE_BIT) != YES))\r
-       while(AskCryptMode() == CRYPT_NONE && (*CancelCheckWork == NO) && (AskAsyncDone(s, &Error, FD_WRITE_BIT) != YES))\r
+       while(!IsSSLAttached(s) && (*CancelCheckWork == NO) && (AskAsyncDone(s, &Error, FD_WRITE_BIT) != YES))\r
        {\r
                if(AskAsyncDone(s, &Error, FD_CLOSE_BIT) == YES)\r
                {\r
@@ -1114,10 +1105,7 @@ int do_send(SOCKET s, const char *buf, int len, int flags, int *TimeOutErr, int
 \r
                        // FTPS対応\r
 //                     Ret = send(s, buf, len, flags);\r
-                       if(AskCryptMode() == CRYPT_FTPES || AskCryptMode() == CRYPT_FTPIS)\r
-                               Ret = sendS(s, buf, len, flags);\r
-                       else\r
-                               Ret = send(s, buf, len, flags);\r
+                       Ret = sendS(s, buf, len, flags);\r
                        if(Ret != SOCKET_ERROR)\r
                        {\r
 #if DBG_MSG\r
@@ -1131,11 +1119,8 @@ int do_send(SOCKET s, const char *buf, int len, int flags, int *TimeOutErr, int
                                break;\r
                        // FTPS対応\r
                        // 送信バッファ確認をバイパスしたためここでタイムアウトの確認\r
-                       if(AskCryptMode() == CRYPT_FTPES || AskCryptMode() == CRYPT_FTPIS)\r
-                       {\r
-                               if(BackgrndMessageProc() == YES)\r
-                                       *CancelCheckWork = YES;\r
-                       }\r
+                       if(BackgrndMessageProc() == YES)\r
+                               *CancelCheckWork = YES;\r
                        else if(TimeOut != 0)\r
                        {\r
                                time(&ElapseTime);\r
index 1465aa3..5b950d4 100644 (file)
--- a/taskwin.c
+++ b/taskwin.c
@@ -42,7 +42,8 @@
 #include "common.h"\r
 #include "resource.h"\r
 \r
-#define TASK_BUFSIZE   (16*1024)\r
+// Windows 9x系をサポートしないため不要\r
+//#define TASK_BUFSIZE (16*1024)\r
 \r
 \r
 \r
@@ -90,7 +91,9 @@ int MakeTaskWindow(HWND hWnd, HINSTANCE hInst)
 \r
        if(hWndTask != NULL)\r
        {\r
-               SendMessage(hWndTask, EM_LIMITTEXT, TASK_BUFSIZE, 0);\r
+               // Windows 9x系をサポートしないため不要\r
+//             SendMessage(hWndTask, EM_LIMITTEXT, TASK_BUFSIZE, 0);\r
+               SendMessage(hWndTask, EM_LIMITTEXT, 0x7fffffff, 0);\r
 \r
                if(ListFont != NULL)\r
                        SendMessage(hWndTask, WM_SETFONT, (WPARAM)ListFont, MAKELPARAM(TRUE, 0));\r
@@ -177,16 +180,17 @@ void SetTaskMsg(char *szFormat, ...)
                                Pos = SendMessage(GetTaskWnd(), WM_GETTEXTLENGTH, 0, 0);\r
 \r
                                /* テキストサイズのリミット値をチェック */\r
-                               if((Pos + strlen(szBuf)) >= TASK_BUFSIZE)\r
-                               {\r
-                                       /* リミットを越えそうなら、先頭部分を切り捨てる */\r
-                                       Pos = SendMessage(GetTaskWnd(), EM_LINEFROMCHAR, TASK_BUFSIZE/10, 0) + 1;\r
-                                       Pos = SendMessage(GetTaskWnd(), EM_LINEINDEX, Pos, 0);\r
-                                       SendMessage(GetTaskWnd(), EM_SETSEL, 0, Pos);\r
-                                       SendMessage(GetTaskWnd(), EM_REPLACESEL, FALSE, (LPARAM)"");\r
-\r
-                                       Pos = SendMessage(GetTaskWnd(), WM_GETTEXTLENGTH, 0, 0);\r
-                               }\r
+                               // Windows 9x系をサポートしないため不要\r
+//                             if((Pos + strlen(szBuf)) >= TASK_BUFSIZE)\r
+//                             {\r
+//                                     /* リミットを越えそうなら、先頭部分を切り捨てる */\r
+//                                     Pos = SendMessage(GetTaskWnd(), EM_LINEFROMCHAR, TASK_BUFSIZE/10, 0) + 1;\r
+//                                     Pos = SendMessage(GetTaskWnd(), EM_LINEINDEX, Pos, 0);\r
+//                                     SendMessage(GetTaskWnd(), EM_SETSEL, 0, Pos);\r
+//                                     SendMessage(GetTaskWnd(), EM_REPLACESEL, FALSE, (LPARAM)"");\r
+//\r
+//                                     Pos = SendMessage(GetTaskWnd(), WM_GETTEXTLENGTH, 0, 0);\r
+//                             }\r
 \r
                                SendMessage(GetTaskWnd(), EM_SETSEL, Pos, Pos);\r
                                SendMessage(GetTaskWnd(), EM_REPLACESEL, FALSE, (LPARAM)szBuf);\r