--- ..\..\curl-7.21.1\lib\ftp.c	2010-08-10 11:19:00.000000000 +0200
+++ ftp.c	2010-09-20 12:56:31.511793100 +0200
@@ -314,6 +314,7 @@
   long timeout_ms;
   long interval_ms;
   curl_socket_t s = CURL_SOCKET_BAD;
+  int err = 0;
 #ifdef ENABLE_IPV6
   struct Curl_sockaddr_storage add;
 #else
@@ -343,13 +344,23 @@
       break; /* loop */
     default:
       /* we have received data here */
-      if(0 == getsockname(sock, (struct sockaddr *) &add, &size)) {
-        size = sizeof(add);
-
+      if(0 == getsockname(sock, (struct sockaddr *) &add, &size)) {       
+        size = sizeof(add);        
         s=accept(sock, (struct sockaddr *) &add, &size);
+
+        if (s != CURL_SOCKET_BAD && data->set.fsockopt) {
+          err = data->set.fsockopt(
+                  data->set.sockopt_client, s, CURLSOCKTYPE_FTPDATACXN);
+        }          
       }
       sclose(sock); /* close the first socket */
 
+      if (err) {
+        sclose(s);
+        failf(data, "Server accept() disallowed");
+        return err;
+      }
+
       if(CURL_SOCKET_BAD == s) {
         failf(data, "Error accept()ing server connect");
         return CURLE_FTP_PORT_FAILED;

