Loweynet
リビジョン | 28c49ec2cf7accdfadcbbd8b0670ea80809e4513 (tree) |
---|---|
日時 | 2011-11-18 00:55:30 |
作者 | s_kawamoto <s_kawamoto@user...> |
コミッター | s_kawamoto |
Enhance routines for connections with FTPIS.
Fix bugs of parsing PASV replies.
@@ -1540,6 +1540,18 @@ static SOCKET DoConnectCrypt(int CryptMode, HOSTDATA* HostData, char *Host, char | ||
1540 | 1540 | Sts = FTP_ERROR; |
1541 | 1541 | } |
1542 | 1542 | |
1543 | + // FTPIS対応 | |
1544 | + // "PBSZ 0"と"PROT P"は黙示的に設定されているはずだが念のため | |
1545 | + if(CryptMode == CRYPT_FTPIS) | |
1546 | + { | |
1547 | + if((Sts = command(ContSock, Reply, CancelCheckWork, "PBSZ 0")) == 200) | |
1548 | + { | |
1549 | + if((Sts = command(ContSock, Reply, CancelCheckWork, "PROT P")) == 200) | |
1550 | + { | |
1551 | + } | |
1552 | + } | |
1553 | + } | |
1554 | + | |
1543 | 1555 | ReInPass = NO; |
1544 | 1556 | do |
1545 | 1557 | { |
@@ -3784,6 +3784,8 @@ static int GetAdrsAndPortIPv4(SOCKET Skt, char *Str, char *Adrs, int *Port, int | ||
3784 | 3784 | { |
3785 | 3785 | char *Pos; |
3786 | 3786 | char *Btm; |
3787 | + // コンマではなくドットを返すホストがあるため | |
3788 | + char *OldBtm; | |
3787 | 3789 | int Sts; |
3788 | 3790 | |
3789 | 3791 | Sts = FFFTP_FAIL; |
@@ -3799,24 +3801,30 @@ static int GetAdrsAndPortIPv4(SOCKET Skt, char *Str, char *Adrs, int *Port, int | ||
3799 | 3801 | if(Btm != NULL) |
3800 | 3802 | { |
3801 | 3803 | Btm++; |
3802 | - Btm = strchr(Btm, ','); | |
3803 | 3804 | // コンマではなくドットを返すホストがあるため |
3805 | +// Btm = strchr(Btm, ','); | |
3806 | + OldBtm = Btm; | |
3807 | + Btm = strchr(OldBtm, ','); | |
3804 | 3808 | if(Btm == NULL) |
3805 | - Btm = strchr(Btm, '.'); | |
3809 | + Btm = strchr(OldBtm, '.'); | |
3806 | 3810 | if(Btm != NULL) |
3807 | 3811 | { |
3808 | 3812 | Btm++; |
3809 | - Btm = strchr(Btm, ','); | |
3810 | 3813 | // コンマではなくドットを返すホストがあるため |
3814 | +// Btm = strchr(Btm, ','); | |
3815 | + OldBtm = Btm; | |
3816 | + Btm = strchr(OldBtm, ','); | |
3811 | 3817 | if(Btm == NULL) |
3812 | - Btm = strchr(Btm, '.'); | |
3818 | + Btm = strchr(OldBtm, '.'); | |
3813 | 3819 | if(Btm != NULL) |
3814 | 3820 | { |
3815 | 3821 | Btm++; |
3816 | - Btm = strchr(Btm, ','); | |
3817 | 3822 | // コンマではなくドットを返すホストがあるため |
3823 | +// Btm = strchr(Btm, ','); | |
3824 | + OldBtm = Btm; | |
3825 | + Btm = strchr(OldBtm, ','); | |
3818 | 3826 | if(Btm == NULL) |
3819 | - Btm = strchr(Btm, '.'); | |
3827 | + Btm = strchr(OldBtm, '.'); | |
3820 | 3828 | if(Btm != NULL) |
3821 | 3829 | { |
3822 | 3830 | if((Btm - Pos) <= Max) |