From ffc982ac9c3976fac08e5e539e17d5ca57f5de6d Mon Sep 17 00:00:00 2001
From: rswindell <>
Date: Wed, 5 Feb 2003 22:06:17 +0000
Subject: [PATCH] Fixed normal (non-PASV) file transfers on Unix when running
 as non-root user, if it can't bind ctrl_port-1, then it'll retry the bind
 using any port (0).

---
 src/sbbs3/ftpsrvr.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/sbbs3/ftpsrvr.c b/src/sbbs3/ftpsrvr.c
index 23ecee4258..a0366a6c9c 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);
-- 
GitLab