diff --git a/src/sbbs3/ftpsrvr.c b/src/sbbs3/ftpsrvr.c
index 23ecee4258a27fc99272d1254ff0e8541f8c150a..a0366a6c9c5ecbc4d48a58d5a7e1086329007262 100644
--- a/src/sbbs3/ftpsrvr.c
+++ b/src/sbbs3/ftpsrvr.c
@@ -1865,11 +1865,11 @@ static void filexfer(SOCKADDR_IN* addr, SOCKET ctrl_sock, SOCKET pasv_sock, SOCK
 		server_addr.sin_family = AF_INET;
 		server_addr.sin_port   = htons((WORD)(startup->port-1));	/* 20? */
 
-		if(startup->seteuid!=NULL)
-			startup->seteuid(FALSE);
 		result=bind(*data_sock, (struct sockaddr *) &server_addr,sizeof(server_addr));
-		if(startup->seteuid!=NULL)
-			startup->seteuid(TRUE);
+		if(result!=0) {
+			server_addr.sin_port = 0;	/* any user port */
+			result=bind(*data_sock, (struct sockaddr *) &server_addr,sizeof(server_addr));
+		}
 		if(result!=0) {
 			lprintf ("%04d !DATA ERROR %d (%d) binding socket %d"
 				,ctrl_sock, result, ERROR_VALUE, *data_sock);