FFFTPのソースコードです。
Revisión | 1be34e62758784330c25d54eac3d08f72fe649a5 (tree) |
---|---|
Tiempo | 2016-12-10 17:41:20 |
Autor | s_kawamoto <s_kawamoto@user...> |
Commiter | s_kawamoto |
Add options to ignore addresses returned by PASV.
@@ -1400,14 +1400,15 @@ BEGIN | ||
1400 | 1400 | EDITTEXT HSET_THREAD_COUNT,72,8,17,12,ES_AUTOHSCROLL | ES_NUMBER |
1401 | 1401 | CONTROL "Spin1",HSET_THREAD_COUNT_SPN,"msctls_updown32",UDS_SETBUDDYINT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,89,7,9,14 |
1402 | 1402 | LTEXT "(1〜4)",-1,102,10,31,8 |
1403 | - CONTROL "メインウィンドウのソケットを再利用(&S)",HSET_REUSE_SOCKET,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,27,131,10 | |
1404 | - LTEXT "接続維持用コマンド周期(&K)",-1,7,44,84,8 | |
1405 | - EDITTEXT HSET_NOOP_INTERVAL,92,42,17,12,ES_AUTOHSCROLL | ES_NUMBER | |
1406 | - CONTROL "Spin1",HSET_NOOP_INTERVAL_SPN,"msctls_updown32",UDS_SETBUDDYINT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,109,41,9,14 | |
1407 | - LTEXT "(0〜300秒; 0=無効)",-1,122,44,76,8 | |
1408 | - LTEXT "転送エラー時の処理(&E)",-1,7,61,81,8 | |
1409 | - COMBOBOX HSET_ERROR_MODE,7,71,71,75,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP | |
1410 | - CONTROL "転送エラー後に再接続(&R)",HSET_ERROR_RECONNECT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,84,71,102,10 | |
1403 | + CONTROL "メインウィンドウのソケットを再利用(&S)",HSET_REUSE_SOCKET,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,27,148,10 | |
1404 | + CONTROL "PASVで返されるアドレスを無視(&A)",HSET_NO_PASV_ADRS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,41,148,10 | |
1405 | + LTEXT "接続維持用コマンド周期(&K)",-1,7,58,84,8 | |
1406 | + EDITTEXT HSET_NOOP_INTERVAL,92,56,17,12,ES_AUTOHSCROLL | ES_NUMBER | |
1407 | + CONTROL "Spin1",HSET_NOOP_INTERVAL_SPN,"msctls_updown32",UDS_SETBUDDYINT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,109,55,9,14 | |
1408 | + LTEXT "(0〜300秒; 0=無効)",-1,122,58,76,8 | |
1409 | + LTEXT "転送エラー時の処理(&E)",-1,7,75,81,8 | |
1410 | + COMBOBOX HSET_ERROR_MODE,7,85,71,75,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP | |
1411 | + CONTROL "転送エラー後に再接続(&R)",HSET_ERROR_RECONNECT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,84,85,102,10 | |
1411 | 1412 | END |
1412 | 1413 | |
1413 | 1414 | savecrypt_dlg DIALOG 0, 0, 146, 62 |
@@ -472,6 +472,7 @@ | ||
472 | 472 | #define HOST_SET_DEFAULT 1227 |
473 | 473 | #define TRMODE_LISTERROR 1228 |
474 | 474 | #define MIRROR_NO_TRANSFER 1229 |
475 | +#define HSET_NO_PASV_ADRS 1230 | |
475 | 476 | #define MENU_END 40001 |
476 | 477 | #define MENU_EXIT 40001 |
477 | 478 | #define MENU_CONNECT 40003 |
@@ -664,7 +665,7 @@ | ||
664 | 665 | #ifndef APSTUDIO_READONLY_SYMBOLS |
665 | 666 | #define _APS_NEXT_RESOURCE_VALUE 199 |
666 | 667 | #define _APS_NEXT_COMMAND_VALUE 40182 |
667 | -#define _APS_NEXT_CONTROL_VALUE 1230 | |
668 | +#define _APS_NEXT_CONTROL_VALUE 1231 | |
668 | 669 | #define _APS_NEXT_SYMED_VALUE 101 |
669 | 670 | #endif |
670 | 671 | #endif |
@@ -1440,14 +1440,16 @@ BEGIN | ||
1440 | 1440 | CONTROL "Spin1",HSET_THREAD_COUNT_SPN,"msctls_updown32",UDS_SETBUDDYINT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,89,7,9,14 |
1441 | 1441 | LTEXT "(1 to 4 threads)",-1,102,10,53,8 |
1442 | 1442 | CONTROL "Reuse &socket of the main window",HSET_REUSE_SOCKET, |
1443 | - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,27,131,10 | |
1444 | - LTEXT "Command for &Keep Alive",-1,7,44,84,8 | |
1445 | - EDITTEXT HSET_NOOP_INTERVAL,92,42,17,12,ES_AUTOHSCROLL | ES_NUMBER | |
1446 | - CONTROL "Spin1",HSET_NOOP_INTERVAL_SPN,"msctls_updown32",UDS_SETBUDDYINT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,109,41,9,14 | |
1447 | - LTEXT "(0 to 300sec; 0=Never)",-1,122,44,76,8 | |
1448 | - LTEXT "When transfer &errors",-1,7,61,81,8 | |
1449 | - COMBOBOX HSET_ERROR_MODE,7,71,71,75,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP | |
1450 | - CONTROL "&Reconnect after errors",HSET_ERROR_RECONNECT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,84,71,102,10 | |
1443 | + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,27,148,10 | |
1444 | + CONTROL "Ignore &addresses returned by PASV",HSET_NO_PASV_ADRS, | |
1445 | + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,41,148,10 | |
1446 | + LTEXT "Command for &Keep Alive",-1,7,58,84,8 | |
1447 | + EDITTEXT HSET_NOOP_INTERVAL,92,56,17,12,ES_AUTOHSCROLL | ES_NUMBER | |
1448 | + CONTROL "Spin1",HSET_NOOP_INTERVAL_SPN,"msctls_updown32",UDS_SETBUDDYINT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,109,55,9,14 | |
1449 | + LTEXT "(0 to 300sec; 0=Never)",-1,122,58,76,8 | |
1450 | + LTEXT "When transfer &errors",-1,7,75,81,8 | |
1451 | + COMBOBOX HSET_ERROR_MODE,7,85,71,75,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP | |
1452 | + CONTROL "&Reconnect after errors",HSET_ERROR_RECONNECT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,84,85,102,10 | |
1451 | 1453 | END |
1452 | 1454 | |
1453 | 1455 | savecrypt_dlg DIALOG 0, 0, 146, 62 |
@@ -472,6 +472,7 @@ | ||
472 | 472 | #define HOST_SET_DEFAULT 1227 |
473 | 473 | #define TRMODE_LISTERROR 1228 |
474 | 474 | #define MIRROR_NO_TRANSFER 1229 |
475 | +#define HSET_NO_PASV_ADRS 1230 | |
475 | 476 | #define MENU_END 40001 |
476 | 477 | #define MENU_EXIT 40001 |
477 | 478 | #define MENU_CONNECT 40003 |
@@ -664,7 +665,7 @@ | ||
664 | 665 | #ifndef APSTUDIO_READONLY_SYMBOLS |
665 | 666 | #define _APS_NEXT_RESOURCE_VALUE 199 |
666 | 667 | #define _APS_NEXT_COMMAND_VALUE 40182 |
667 | -#define _APS_NEXT_CONTROL_VALUE 1230 | |
668 | +#define _APS_NEXT_CONTROL_VALUE 1231 | |
668 | 669 | #define _APS_NEXT_SYMED_VALUE 101 |
669 | 670 | #endif |
670 | 671 | #endif |
@@ -76,8 +76,8 @@ | ||
76 | 76 | #else |
77 | 77 | #define VER_STR "1.99a-20161113" |
78 | 78 | #endif |
79 | -#define VER_NUM 1990 /* 設定バージョン */ | |
80 | -#define PROGRAM_VERSION_NUM 1990 /* バージョン */ | |
79 | +#define VER_NUM 1991 /* 設定バージョン */ | |
80 | +#define PROGRAM_VERSION_NUM 1991 /* バージョン */ | |
81 | 81 | // ソフトウェア自動更新 |
82 | 82 | // リリースバージョンはリリース予定年(10進数4桁)+月(2桁)+日(2桁)+通し番号(0スタート2桁)とする |
83 | 83 | // 2014年7月31日中の30個目のリリースは2014073129 |
@@ -1064,6 +1064,8 @@ typedef struct { | ||
1064 | 1064 | int TransferErrorNotify; /* 転送エラー時に確認ダイアログを出すかどうか (YES/NO) */ |
1065 | 1065 | // セッションあたりの転送量制限対策 |
1066 | 1066 | int TransferErrorReconnect; /* 転送エラー時に再接続する (YES/NO) */ |
1067 | + // ホスト側の設定ミス対策 | |
1068 | + int NoPasvAdrs; /* PASVで返されるアドレスを無視する (YES/NO) */ | |
1067 | 1069 | } HOSTDATA; |
1068 | 1070 | |
1069 | 1071 |
@@ -1131,6 +1133,8 @@ typedef struct historydata { | ||
1131 | 1133 | int TransferErrorNotify; /* 転送エラー時に確認ダイアログを出すかどうか (YES/NO) */ |
1132 | 1134 | // セッションあたりの転送量制限対策 |
1133 | 1135 | int TransferErrorReconnect; /* 転送エラー時に再接続する (YES/NO) */ |
1136 | + // ホスト側の設定ミス対策 | |
1137 | + int NoPasvAdrs; /* PASVで返されるアドレスを無視する (YES/NO) */ | |
1134 | 1138 | struct historydata *Next; |
1135 | 1139 | } HISTORYDATA; |
1136 | 1140 |
@@ -1644,6 +1648,8 @@ int AskTransferErrorMode(void); | ||
1644 | 1648 | int AskTransferErrorNotify(void); |
1645 | 1649 | // セッションあたりの転送量制限対策 |
1646 | 1650 | int AskErrorReconnect(void); |
1651 | +// ホスト側の設定ミス対策 | |
1652 | +int AskNoPasvAdrs(void); | |
1647 | 1653 | |
1648 | 1654 | /*===== cache.c =====*/ |
1649 | 1655 |
@@ -3419,3 +3419,9 @@ int AskErrorReconnect(void) | ||
3419 | 3419 | return(CurHost.TransferErrorReconnect); |
3420 | 3420 | } |
3421 | 3421 | |
3422 | +// ホスト側の設定ミス対策 | |
3423 | +int AskNoPasvAdrs(void) | |
3424 | +{ | |
3425 | + return(CurHost.NoPasvAdrs); | |
3426 | +} | |
3427 | + |
@@ -4109,6 +4109,8 @@ static int GetAdrsAndPortIPv4(SOCKET Skt, char *Str, char *Adrs, int *Port, int | ||
4109 | 4109 | // コンマではなくドットを返すホストがあるため |
4110 | 4110 | char *OldBtm; |
4111 | 4111 | int Sts; |
4112 | + // ホスト側の設定ミス対策 | |
4113 | + struct sockaddr_in SockAddr; | |
4112 | 4114 | |
4113 | 4115 | Sts = FFFTP_FAIL; |
4114 | 4116 |
@@ -4151,9 +4153,21 @@ static int GetAdrsAndPortIPv4(SOCKET Skt, char *Str, char *Adrs, int *Port, int | ||
4151 | 4153 | { |
4152 | 4154 | if((Btm - Pos) <= Max) |
4153 | 4155 | { |
4154 | - strncpy(Adrs, Pos, Btm - Pos); | |
4155 | - *(Adrs + (Btm - Pos)) = NUL; | |
4156 | - ReplaceAll(Adrs, ',', '.'); | |
4156 | + // ホスト側の設定ミス対策 | |
4157 | +// strncpy(Adrs, Pos, Btm - Pos); | |
4158 | +// *(Adrs + (Btm - Pos)) = NUL; | |
4159 | +// ReplaceAll(Adrs, ',', '.'); | |
4160 | + if(AskNoPasvAdrs() == NO) | |
4161 | + { | |
4162 | + strncpy(Adrs, Pos, Btm - Pos); | |
4163 | + *(Adrs + (Btm - Pos)) = NUL; | |
4164 | + ReplaceAll(Adrs, ',', '.'); | |
4165 | + } | |
4166 | + else | |
4167 | + { | |
4168 | + if(GetAsyncTableDataIPv4(Skt, &SockAddr, NULL) == YES) | |
4169 | + AddressToStringIPv4(Adrs, &SockAddr.sin_addr); | |
4170 | + } | |
4157 | 4171 | |
4158 | 4172 | Pos = Btm + 1; |
4159 | 4173 | Btm = strchr(Pos, ','); |
@@ -4204,7 +4218,8 @@ static int GetAdrsAndPortIPv6(SOCKET Skt, char *Str, char *Adrs, int *Port, int | ||
4204 | 4218 | { |
4205 | 4219 | if((Btm - Pos) <= Max) |
4206 | 4220 | { |
4207 | - if((Btm - Pos) > 0) | |
4221 | + // ホスト側の設定ミス対策 | |
4222 | + if(AskNoPasvAdrs() == NO && (Btm - Pos) > 0) | |
4208 | 4223 | { |
4209 | 4224 | strncpy(Adrs, Pos, Btm - Pos); |
4210 | 4225 | *(Adrs + (Btm - Pos)) = NUL; |
@@ -247,6 +247,8 @@ static void CopyHostToHistory(HOSTDATA *Host, HISTORYDATA *New) | ||
247 | 247 | New->TransferErrorNotify = Host->TransferErrorNotify; |
248 | 248 | // セッションあたりの転送量制限対策 |
249 | 249 | New->TransferErrorReconnect = Host->TransferErrorReconnect; |
250 | + // ホスト側の設定ミス対策 | |
251 | + New->NoPasvAdrs = Host->NoPasvAdrs; | |
250 | 252 | return; |
251 | 253 | } |
252 | 254 |
@@ -317,6 +319,8 @@ void CopyHistoryToHost(HISTORYDATA *Hist, HOSTDATA *Host) | ||
317 | 319 | Host->TransferErrorNotify = Hist->TransferErrorNotify; |
318 | 320 | // セッションあたりの転送量制限対策 |
319 | 321 | Host->TransferErrorReconnect = Hist->TransferErrorReconnect; |
322 | + // ホスト側の設定ミス対策 | |
323 | + Host->NoPasvAdrs = Hist->NoPasvAdrs; | |
320 | 324 | return; |
321 | 325 | } |
322 | 326 |
@@ -1088,6 +1088,8 @@ int CopyHostFromListInConnect(int Num, HOSTDATA *Set) | ||
1088 | 1088 | Set->TransferErrorNotify = Pos->Set.TransferErrorNotify; |
1089 | 1089 | // セッションあたりの転送量制限対策 |
1090 | 1090 | Set->TransferErrorReconnect = Pos->Set.TransferErrorReconnect; |
1091 | + // ホスト側の設定ミス対策 | |
1092 | + Set->NoPasvAdrs = Pos->Set.NoPasvAdrs; | |
1091 | 1093 | Sts = FFFTP_SUCCESS; |
1092 | 1094 | } |
1093 | 1095 | return(Sts); |
@@ -1447,6 +1449,8 @@ void CopyDefaultDefaultHost(HOSTDATA *Set) | ||
1447 | 1449 | Set->TransferErrorNotify = YES; |
1448 | 1450 | // セッションあたりの転送量制限対策 |
1449 | 1451 | Set->TransferErrorReconnect = YES; |
1452 | + // ホスト側の設定ミス対策 | |
1453 | + Set->NoPasvAdrs = YES; | |
1450 | 1454 | return; |
1451 | 1455 | } |
1452 | 1456 |
@@ -2440,6 +2444,7 @@ static INT_PTR CALLBACK Adv3SettingProc(HWND hDlg, UINT iMessage, WPARAM wParam, | ||
2440 | 2444 | else |
2441 | 2445 | SendDlgItemMessage(hDlg, HSET_ERROR_MODE, CB_SETCURSEL, 0, 0); |
2442 | 2446 | SendDlgItemMessage(hDlg, HSET_ERROR_RECONNECT, BM_SETCHECK, TmpHost.TransferErrorReconnect, 0); |
2447 | + SendDlgItemMessage(hDlg, HSET_NO_PASV_ADRS, BM_SETCHECK, TmpHost.NoPasvAdrs, 0); | |
2443 | 2448 | return(TRUE); |
2444 | 2449 | |
2445 | 2450 | case WM_NOTIFY: |
@@ -2472,6 +2477,7 @@ static INT_PTR CALLBACK Adv3SettingProc(HWND hDlg, UINT iMessage, WPARAM wParam, | ||
2472 | 2477 | break; |
2473 | 2478 | } |
2474 | 2479 | TmpHost.TransferErrorReconnect = SendDlgItemMessage(hDlg, HSET_ERROR_RECONNECT, BM_GETCHECK, 0, 0); |
2480 | + TmpHost.NoPasvAdrs = SendDlgItemMessage(hDlg, HSET_NO_PASV_ADRS, BM_GETCHECK, 0, 0); | |
2475 | 2481 | Apply = YES; |
2476 | 2482 | break; |
2477 | 2483 |
@@ -658,6 +658,8 @@ void SaveRegistry(void) | ||
658 | 658 | SaveIntNum(hKey5, "ErrNotify", Hist.TransferErrorNotify, DefaultHist.TransferErrorNotify); |
659 | 659 | // セッションあたりの転送量制限対策 |
660 | 660 | SaveIntNum(hKey5, "ErrReconnect", Hist.TransferErrorReconnect, DefaultHist.TransferErrorReconnect); |
661 | + // ホスト側の設定ミス対策 | |
662 | + SaveIntNum(hKey5, "NoPasvAdrs", Hist.NoPasvAdrs, DefaultHist.NoPasvAdrs); | |
661 | 663 | |
662 | 664 | CloseSubKey(hKey5); |
663 | 665 | n++; |
@@ -731,6 +733,7 @@ void SaveRegistry(void) | ||
731 | 733 | SaveIntNum(hKey5, "ErrMode", Host.TransferErrorMode, DefaultHost.TransferErrorMode); |
732 | 734 | SaveIntNum(hKey5, "ErrNotify", Host.TransferErrorNotify, DefaultHost.TransferErrorNotify); |
733 | 735 | SaveIntNum(hKey5, "ErrReconnect", Host.TransferErrorReconnect, DefaultHost.TransferErrorReconnect); |
736 | + SaveIntNum(hKey5, "NoPasvAdrs", Host.NoPasvAdrs, DefaultHost.NoPasvAdrs); | |
734 | 737 | CloseSubKey(hKey5); |
735 | 738 | } |
736 | 739 |
@@ -808,6 +811,8 @@ void SaveRegistry(void) | ||
808 | 811 | SaveIntNum(hKey5, "ErrNotify", Host.TransferErrorNotify, DefaultHost.TransferErrorNotify); |
809 | 812 | // セッションあたりの転送量制限対策 |
810 | 813 | SaveIntNum(hKey5, "ErrReconnect", Host.TransferErrorReconnect, DefaultHost.TransferErrorReconnect); |
814 | + // ホスト側の設定ミス対策 | |
815 | + SaveIntNum(hKey5, "NoPasvAdrs", Host.NoPasvAdrs, DefaultHost.NoPasvAdrs); | |
811 | 816 | } |
812 | 817 | CloseSubKey(hKey5); |
813 | 818 | } |
@@ -1239,6 +1244,8 @@ int LoadRegistry(void) | ||
1239 | 1244 | ReadIntValueFromReg(hKey5, "ErrNotify", &Hist.TransferErrorNotify); |
1240 | 1245 | // セッションあたりの転送量制限対策 |
1241 | 1246 | ReadIntValueFromReg(hKey5, "ErrReconnect", &Hist.TransferErrorReconnect); |
1247 | + // ホスト側の設定ミス対策 | |
1248 | + ReadIntValueFromReg(hKey5, "NoPasvAdrs", &Hist.NoPasvAdrs); | |
1242 | 1249 | |
1243 | 1250 | CloseSubKey(hKey5); |
1244 | 1251 | AddHistoryToHistory(&Hist); |
@@ -1305,6 +1312,7 @@ int LoadRegistry(void) | ||
1305 | 1312 | ReadIntValueFromReg(hKey5, "ErrMode", &Host.TransferErrorMode); |
1306 | 1313 | ReadIntValueFromReg(hKey5, "ErrNotify", &Host.TransferErrorNotify); |
1307 | 1314 | ReadIntValueFromReg(hKey5, "ErrReconnect", &Host.TransferErrorReconnect); |
1315 | + ReadIntValueFromReg(hKey5, "NoPasvAdrs", &Host.NoPasvAdrs); | |
1308 | 1316 | |
1309 | 1317 | CloseSubKey(hKey5); |
1310 | 1318 |
@@ -1410,6 +1418,8 @@ int LoadRegistry(void) | ||
1410 | 1418 | ReadIntValueFromReg(hKey5, "ErrNotify", &Host.TransferErrorNotify); |
1411 | 1419 | // セッションあたりの転送量制限対策 |
1412 | 1420 | ReadIntValueFromReg(hKey5, "ErrReconnect", &Host.TransferErrorReconnect); |
1421 | + // ホスト側の設定ミス対策 | |
1422 | + ReadIntValueFromReg(hKey5, "NoPasvAdrs", &Host.NoPasvAdrs); | |
1413 | 1423 | |
1414 | 1424 | CloseSubKey(hKey5); |
1415 | 1425 |