From cbcd8d68553b0147d14e5ec29c73d2f93e09487f Mon Sep 17 00:00:00 2001
From: "Rob Swindell (on Debian Linux)" <rob@synchro.net>
Date: Wed, 29 Mar 2023 16:49:43 -0700
Subject: [PATCH] Sanity-check the from_net_addr (SENDERNETADDR) and recipient
 list

Anacron sends mail From: Anacron <root>, so deal (convert to root@youraddr).

Also, gracefully handle a forgotten recipient list.
---
 exec/sendmail.js | 23 ++++++++++++++++++-----
 1 file changed, 18 insertions(+), 5 deletions(-)

diff --git a/exec/sendmail.js b/exec/sendmail.js
index d9144b51cd..cffb23e27d 100755
--- a/exec/sendmail.js
+++ b/exec/sendmail.js
@@ -122,17 +122,30 @@ while((line=readln()) != undefined) {
 	}
 }
 
+// Sanity-check the from_net_addr (SENDERNETADDR) field
+if(typeof hdr.from_net_addr == "string") {
+	if(hdr.from_net_addr.indexOf('@') < 0)
+		hdr.from_net_addr += '@';
+	if(hdr.from_net_addr.indexOf('@') == hdr.from_net_addr.length - 1)
+		hdr.from_net_addr += system.inet_addr;
+}
+log.writeln("---");
+log.writeln("hdr = " + JSON.stringify(hdr, null, 4));
+log.writeln("rcpt_list = " + JSON.stringify(rcpt_list, null, 4));
+
+if(rcpt_list.length < 1) {
+	writeln("No recipients specified!");
+	exit(1);
+}
 var msgbase = new MsgBase('mail');
 if(!msgbase.open()) {
 	writeln("Cannot send email (open error)!");
-	exit();
+	exit(1);
 }
 if(!msgbase.save_msg(hdr, body, rcpt_list)) {
 	writeln("Cannot send email: " + msgbase.error);
-	exit();
+	exit(1);
 }
 
-log.writeln("---");
-log.writeln("hdr = " + JSON.stringify(hdr, null, 4));
-log.writeln("rcpt_list = " + JSON.stringify(rcpt_list, null, 4));
+log.writeln("Sent successfully");
 log.writeln("===");
-- 
GitLab