Просмотр исходного кода

Fix EPSV for domains with multiple A entries.

We can not use the DNS name to open the data connection, as we might get
another IP than the current host from the DNS resolution.
Julien Laffaye 10 лет назад
Родитель
Сommit
b33f6e0005
1 измененных файлов с 5 добавлено и 2 удалено
  1. 5 2
      ftp.go

+ 5 - 2
ftp.go

@@ -59,12 +59,15 @@ func Dial(addr string) (*ServerConn, error) {
 // It is generally followed by a call to Login() as most FTP commands require
 // an authenticated user.
 func DialTimeout(addr string, timeout time.Duration) (*ServerConn, error) {
-	host, _, err := net.SplitHostPort(addr)
+	tconn, err := net.DialTimeout("tcp", addr, timeout)
 	if err != nil {
 		return nil, err
 	}
 
-	tconn, err := net.DialTimeout("tcp", addr, timeout)
+	// Use the resolved IP address in case addr contains a domain name
+	// If we use the domain name, we might not resolve to the same IP.
+	remoteAddr := tconn.RemoteAddr().String()
+	host, _, err := net.SplitHostPort(remoteAddr)
 	if err != nil {
 		return nil, err
 	}