From e37f0e00457e558440dd27c0a0337fe02f23b9bc Mon Sep 17 00:00:00 2001
From: "Rob Swindell (on Debian Linux)" <rob@synchro.net>
Date: Sat, 30 Nov 2024 13:34:21 -0800
Subject: [PATCH] Create/use news_get_from() function, copied from
 nntpservice.js

Use the fully-formed "From" header field in responses to NNTP
OVER/XOVER and HDR/XHDR requests.

This should fix issue #829 reported by Accession
---
 exec/load/newsutil.js | 31 +++++++++++++++++++++++++++++++
 exec/nntpservice.js   | 33 +++------------------------------
 2 files changed, 34 insertions(+), 30 deletions(-)

diff --git a/exec/load/newsutil.js b/exec/load/newsutil.js
index 24d9a04c68..4b4d649839 100755
--- a/exec/load/newsutil.js
+++ b/exec/load/newsutil.js
@@ -14,6 +14,37 @@ function get_news_subject(hdr)
 	return hdr.subject;
 }
 
+function get_news_from(hdr)
+{
+	if(!hdr.from_net_type || !hdr.from_net_addr)	/* local message */
+		return format("\"%s\" <%s@%s>"
+			,hdr.from
+			,hdr.from.replace(/ /g,".").toLowerCase()
+			,system.inetaddr);
+	if(!hdr.from_net_addr.length)
+		return hdr.from;
+	if(hdr.from_net_addr.indexOf('@')!=-1)
+		return format("\"%s\" <%s>"
+			,hdr.from
+			,hdr.from_net_addr);
+	if(hdr.from_net_type == NET_FIDO)
+		return format("\"%s\" (%s) <%s>"
+			,hdr.from
+			,hdr.from_net_addr
+			,fidoaddr_to_emailaddr(hdr.from, hdr.from_net_addr));
+	if(hdr.from_net_type == NET_QWK)
+		return format("\"%s\" (%s) <%s!%s@%s>"
+			,hdr.from
+			,hdr.from_net_addr
+			,hdr.from_net_addr
+			,hdr.from.replace(/ /g,".")
+			,system.inetaddr);
+	return format("\"%s\" <%s@%s>"
+			,hdr.from
+			,hdr.from.replace(/ /g,".").toLowerCase()
+			,hdr.from_net_addr);
+}
+
 function write_news_header(hdr,writeln)
 {
 	/* Required header fields */
diff --git a/exec/nntpservice.js b/exec/nntpservice.js
index 7e0801c59e..bc15f3f4ac 100644
--- a/exec/nntpservice.js
+++ b/exec/nntpservice.js
@@ -562,7 +562,7 @@ while(client.socket.is_connected && !quit) {
 				writeln(format("%u\t%s\t%s\t%s\t%s\t%s\t%u\t%u\tXref:%s"
 					,i
 					,get_news_subject(hdr)
-					,hdr.from
+					,get_news_from(hdr)
 					,hdr.date
 					,hdr.id								// message-id
 					,hdr.reply_id ? hdr.reply_id : ''	// references
@@ -618,7 +618,7 @@ while(client.socket.is_connected && !quit) {
 						field=get_news_subject(hdr);
 						break;
 					case "from":
-						field=hdr.from;
+						field=get_news_from(hdr);
 						break;
 					case "reply-to":
 						field=hdr.replyto;
@@ -767,34 +767,7 @@ while(client.socket.is_connected && !quit) {
 
 			if(cmd[0].toUpperCase()!="BODY") {
 
-				if(!hdr.from_net_type || !hdr.from_net_addr)	/* local message */
-					writeln(format("From: \"%s\" <%s@%s>"
-						,hdr.from
-						,hdr.from.replace(/ /g,".").toLowerCase()
-						,system.inetaddr));
-				else if(!hdr.from_net_addr.length)
-					writeln(format("From: %s",hdr.from));
-				else if(hdr.from_net_addr.indexOf('@')!=-1)
-					writeln(format("From: \"%s\" <%s>"
-						,hdr.from
-						,hdr.from_net_addr));
-				else if(hdr.from_net_type == NET_FIDO)
-					writeln(format("From: \"%s\" (%s) <%s>"
-						,hdr.from
-						,hdr.from_net_addr
-						,fidoaddr_to_emailaddr(hdr.from, hdr.from_net_addr)));
-				else if(hdr.from_net_type == NET_QWK)
-					writeln(format("From: \"%s\" (%s) <%s!%s@%s>"
-						,hdr.from
-						,hdr.from_net_addr
-						,hdr.from_net_addr
-						,hdr.from.replace(/ /g,".")
-						,system.inetaddr));
-				else
-					writeln(format("From: \"%s\" <%s@%s>"
-						,hdr.from
-						,hdr.from.replace(/ /g,".").toLowerCase()
-						,hdr.from_net_addr));
+				writeln("From: " + get_news_from(hdr));
 
 				if(hdr.path==undefined)
 					hdr.path="not-for-mail";
-- 
GitLab