From e10525fd7c3a4e320b46189ae76efc5bfd505aee Mon Sep 17 00:00:00 2001
From: deuce <>
Date: Mon, 24 Dec 2007 23:04:53 +0000
Subject: [PATCH] Tuck away addrlen from accept() for later use by
 gethostbyaddr()

---
 src/sbbs3/ftpsrvr.c  | 4 +++-
 src/sbbs3/services.c | 6 ++++--
 src/sbbs3/websrvr.c  | 4 +++-
 3 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/src/sbbs3/ftpsrvr.c b/src/sbbs3/ftpsrvr.c
index df6d6d9f26..b662ccd5f6 100644
--- a/src/sbbs3/ftpsrvr.c
+++ b/src/sbbs3/ftpsrvr.c
@@ -106,6 +106,7 @@ char* genvpath(int lib, int dir, char* str);
 typedef struct {
 	SOCKET			socket;
 	SOCKADDR_IN		client_addr;
+	socklen_t		client_addr_len;
 } ftp_t;
 
 
@@ -2425,7 +2426,7 @@ static void ctrl_thread(void* arg)
 		host=NULL;
 	else
 		host=gethostbyaddr ((char *)&ftp.client_addr.sin_addr
-			,sizeof(ftp.client_addr.sin_addr),AF_INET);
+			,ftp.client_addr_len,AF_INET);
 
 	if(host!=NULL && host->h_name!=NULL)
 		host_name=host->h_name;
@@ -4899,6 +4900,7 @@ void DLLCALL ftp_server(void* arg)
 
 			ftp->socket=client_socket;
 			ftp->client_addr=client_addr;
+			ftp->client_addr_len=client_addr_len;
 
 			_beginthread (ctrl_thread, 0, ftp);
 			served++;
diff --git a/src/sbbs3/services.c b/src/sbbs3/services.c
index 089ccc0a5f..1a0dce74c9 100644
--- a/src/sbbs3/services.c
+++ b/src/sbbs3/services.c
@@ -99,6 +99,7 @@ typedef struct {
 typedef struct {
 	SOCKET			socket;
 	SOCKADDR_IN		addr;
+	socklen_t		addr_len;
 	time_t			logintime;
 	user_t			user;
 	client_t*		client;
@@ -1018,7 +1019,7 @@ static void js_service_thread(void* arg)
 		host=NULL;
 	else
 		host=gethostbyaddr((char *)&service_client.addr.sin_addr
-			,sizeof(service_client.addr.sin_addr),AF_INET);
+			,service_client.addr_len,AF_INET);
 
 	if(host!=NULL && host->h_name!=NULL)
 		host_name=host->h_name;
@@ -1338,7 +1339,7 @@ static void native_service_thread(void* arg)
 		host=NULL;
 	else
 		host=gethostbyaddr((char *)&service_client.addr.sin_addr
-			,sizeof(service_client.addr.sin_addr),AF_INET);
+			,service_client.addr_len,AF_INET);
 
 	if(host!=NULL && host->h_name!=NULL)
 		host_name=host->h_name;
@@ -2097,6 +2098,7 @@ void DLLCALL services_thread(void* arg)
 				memset(client,0,sizeof(service_client_t));
 				client->socket=client_socket;
 				client->addr=client_addr;
+				client->addr_len=client_addr_len;
 				client->service=&service[i];
 				client->service->clients++;		/* this should be mutually exclusive */
 				client->udp_buf=udp_buf;
diff --git a/src/sbbs3/websrvr.c b/src/sbbs3/websrvr.c
index 1baf950493..97f0e69c26 100644
--- a/src/sbbs3/websrvr.c
+++ b/src/sbbs3/websrvr.c
@@ -228,6 +228,7 @@ typedef struct  {
 typedef struct  {
 	SOCKET			socket;
 	SOCKADDR_IN		addr;
+	socklen_t		addr_len;
 	http_request_t	req;
 	char			host_ip[64];
 	char			host_name[128];	/* Resolved remote host */
@@ -4814,7 +4815,7 @@ void http_session_thread(void* arg)
 		host=NULL;
 	else
 		host=gethostbyaddr ((char *)&session.addr.sin_addr
-			,sizeof(session.addr.sin_addr),AF_INET);
+			,session.addr_len,AF_INET);
 
 	if(host!=NULL && host->h_name!=NULL)
 		host_name=host->h_name;
@@ -5585,6 +5586,7 @@ void DLLCALL web_server(void* arg)
 
 			SAFECOPY(session->host_ip,host_ip);
 			session->addr=client_addr;
+			session->addr_len=client_addr_len;
    			session->socket=client_socket;
 			session->js_branch.auto_terminate=TRUE;
 			session->js_branch.terminated=&terminate_server;
-- 
GitLab