--- tcp_subr.c.orig	2008-12-15 18:25:25.000000000 +0100
+++ tcp_subr.c	2008-12-31 12:24:01.000000000 +0100
@@ -667,6 +667,12 @@
                 /*
                  * Need to emulate the PORT command
                  */
+                struct sockaddr_in addr;
+                socklen_t addrlen = sizeof addr;
+
+                if ( getsockname(so->s,(struct sockaddr *)&addr,&addrlen))
+                    return 1;
+
                 x = sscanf(bptr, "ORT %u,%u,%u,%u,%u,%u\r\n%256[^\177]",
                            &n1, &n2, &n3, &n4, &n5, &n6, buff);
                 if (x < 6)
@@ -683,7 +689,7 @@
                 n5 = (n6 >> 8) & 0xff;
                 n6 &= 0xff;
 
-                laddr = ntohl(so->so_faddr.s_addr);
+                laddr = ntohl(addr.sin_addr.s_addr);
 
                 n1 = ((laddr >> 24) & 0xff);
                 n2 = ((laddr >> 16) & 0xff);
@@ -700,6 +706,12 @@
                 /*
                  * Need to emulate the PASV response
                  */
+                struct sockaddr_in addr;
+                socklen_t addrlen = sizeof addr;
+
+                if ( getsockname(so->s,(struct sockaddr *)&addr,&addrlen))
+                    return 1;
+
                 x = sscanf(bptr, "27 Entering Passive Mode (%u,%u,%u,%u,%u,%u)\r\n%256[^\177]",
                            &n1, &n2, &n3, &n4, &n5, &n6, buff);
                 if (x < 6)
@@ -716,7 +728,7 @@
                 n5 = (n6 >> 8) & 0xff;
                 n6 &= 0xff;
 
-                laddr = ntohl(so->so_faddr.s_addr);
+                laddr = ntohl(addr.sin_addr.s_addr);
 
                 n1 = ((laddr >> 24) & 0xff);
                 n2 = ((laddr >> 16) & 0xff);
