diff --git a/exec/newslink.js b/exec/newslink.js index 6832766ac5dd5d0fd5c3b9ab2f3e20cb759526ed..991572133a081f77a724dfbe068be40de13abdc1 100644 --- a/exec/newslink.js +++ b/exec/newslink.js @@ -34,6 +34,7 @@ var antispam = format(".remove-%s-this" var cfg_fname = system.ctrl_dir + "newslink.cfg"; load("sbbsdefs.js"); +load("newsutil.js"); var debug = false; var slave = false; @@ -304,7 +305,6 @@ for(i in area) { break; } - writeln("Path: " + hdr.path); if(!email_addresses) writeln(format("From: %s@%s",hdr.from,newsgroup)); else if(hdr.from.indexOf('@')!=-1) @@ -325,22 +325,15 @@ for(i in area) { ,hdr.from ,hdr.from.replace(/ /g,".").toLowerCase() ,system.inetaddr,antispam)); - if(hdr.from_org==undefined && !hdr.from_net_type) - hdr.from_org=system.name; - if(hdr.from_org!=undefined) - writeln("Organization: " + hdr.from_org); - writeln("To: " + hdr.to); - writeln("X-Comment-To: " + hdr.to); - writeln("Subject: " + hdr.subject); - writeln("Message-ID: " + hdr.id); - writeln("Date: " + hdr.date); + if(hdr.newsgroups==undefined) hdr.newsgroups=newsgroup; - writeln("Newsgroups: " + hdr.newsgroups); - if(hdr.replyto!=undefined) - writeln("Reply-To: " + hdr.replyto); - if(hdr.reply_id!=undefined) - writeln("References: " + hdr.reply_id); + + if(hdr.from_org==undefined && !hdr.from_net_type) + hdr.from_org=system.name; + + write_news_header(hdr); // from newsutil.js + writeln("X-Gateway: " + system.inetaddr + " [Synchronet " @@ -350,20 +343,6 @@ for(i in area) { + "]" ); - /* Add a Sender: header field? */ - - /* FidoNet header */ - if(hdr.ftn_pid!=undefined) - writeln("X-FTN-PID: " + hdr.ftn_pid); - if(hdr.ftn_area!=undefined) - writeln("X-FTN-AREA: " + hdr.ftn_area); - if(hdr.ftn_flags!=undefined) - writeln("X-FTN-FLAGS: " + hdr.ftn_flags); - if(hdr.ftn_msgid!=undefined) - writeln("X-FTN-MSGID: " + hdr.ftn_msgid); - if(hdr.ftn_reply!=undefined) - writeln("X-FTN-REPLY: " + hdr.ftn_reply); - writeln(""); if(hdr.to.toLowerCase()!="all") { writeln(" To: " + hdr.to); @@ -461,78 +440,12 @@ for(i in area) { } //print(line); - /* Parse header lines */ - if((sp=line.indexOf(':'))==-1) - continue; - - data=line.slice(sp+1); - while(data.charAt(0)==' ') // trim prepended spaces - data=data.slice(1); - data=truncsp(data); // trim trailing spaces - - line=line.substr(0,sp); - while(line.charAt(0)==' ') // trim prepended spaces - line=line.slice(1); - line=truncsp(line); // trim trailing spaces - - switch(line.toLowerCase()) { - case "to": - case "apparently-to": - case "x-comment-to": - hdr.to=data; - break; - case "newsgroups": - if(hdr.to==newsgroup) - hdr.to=data; - hdr.newsgroups=data; - break; - case "path": - hdr.path=data; - break; - case "from": - hdr.from=data; - break; - case "organization": - hdr.from_org=data; - break; - case "reply-to": - hdr.replyto_net_type=NET_INTERNET; - hdr.replyto=data; - break; - case "date": - hdr.date=data; - break; - case "subject": - hdr.subject=data; - break; - case "message-id": - hdr.id=data; - break; - case "references": - hdr.reply_id=data; - break; - case "x-gateway": - hdr.gateway=data; - break; - - /* FidoNet headers */ - case "x-ftn-pid": - hdr.ftn_pid=data; - break; - case "x-ftn-area": - hdr.ftn_area=data; - break; - case "x-ftn-flags": - hdr.ftn_flags=data; - break; - case "x-ftn-msgid": - hdr.ftn_msgid=data; - break; - case "x-ftn-reply": - hdr.ftn_reply=data; - break; - } + parse_news_header(hdr,line); // from newsutil.js } + + if(hdr.to==newsgroup && hdr.newsgroups!=undefined) + hdr.to=hdr.newsgroups; + // Duplicate/looped message detection here if(hdr.id.indexOf('@' + system.inetaddr)!=-1) continue; diff --git a/exec/nntpservice.js b/exec/nntpservice.js index 2b3a96b43bad9dfd2fb9dffaf97ed0a6f657cf13..34baf2a04cce82b168b13738337bae74954d272e 100644 --- a/exec/nntpservice.js +++ b/exec/nntpservice.js @@ -14,8 +14,6 @@ // Xnews 5.04.25 // Mozilla 1.1 (Requires -auto, and a prior login via other method) -load("sbbsdefs.js"); - const REVISION = "$Revision$".split(' ')[1]; var tearline = format("--- Synchronet %s%s-%s NNTP Service %s\r\n" @@ -23,6 +21,9 @@ var tearline = format("--- Synchronet %s%s-%s NNTP Service %s\r\n" var tagline = format(" * %s - %s - telnet://%s\r\n" ,system.name,system.location,system.inetaddr); +load("sbbsdefs.js"); +load("newsutil.js"); + var debug = false; var no_anonymous = false; var auto_login = false; @@ -438,9 +439,7 @@ while(client.socket.is_connected) { break; if(cmd[0].toUpperCase()!="BODY") { - if(hdr.path==undefined) - hdr.path="not-for-mail"; - writeln("Path: " + system.inetaddr + "!" + hdr.path); + if(!hdr.from_net_type) /* local message */ writeln(format("From: \"%s\" <%s@%s>" ,hdr.from @@ -457,36 +456,17 @@ while(client.socket.is_connected) { ,hdr.from ,hdr.from.replace(/ /g,".").toLowerCase() ,hdr.from_net_addr)); - if(hdr.from_org!=undefined) - hdr.from_org=system.name; - writeln("Organization: " + hdr.from_org); - writeln("To: " + hdr.to); - writeln("X-Comment-To: " + hdr.to); - writeln("Subject: " + hdr.subject); - writeln("Message-ID: " + hdr.id); - writeln("Date: " + hdr.date); - if(hdr.newsgroups!=undefined - && hdr.newsgroups.indexOf(selected.newsgroup) >= 0) - writeln("Newsgroups: " + hdr.newsgroups); - else - writeln("Newsgroups: " + selected.newsgroup); - - if(hdr.replyto!=undefined) - writeln("Reply-To: " + hdr.replyto); - if(hdr.reply_id!=undefined) - writeln("References: " + hdr.reply_id); - /* FidoNet header */ - if(hdr.ftn_pid!=undefined) - writeln("X-FTN-PID: " + hdr.ftn_pid); - if(hdr.ftn_area!=undefined) - writeln("X-FTN-AREA: " + hdr.ftn_area); - if(hdr.ftn_flags!=undefined) - writeln("X-FTN-FLAGS: " + hdr.ftn_flags); - if(hdr.ftn_msgid!=undefined) - writeln("X-FTN-MSGID: " + hdr.ftn_msgid); - if(hdr.ftn_reply!=undefined) - writeln("X-FTN-REPLY: " + hdr.ftn_reply); + if(hdr.path==undefined) + hdr.path="not-for-mail"; + + if(hdr.newsgroups==undefined) + hdr.newsgroups = selected.newsgroup; + + if(hdr.from_org==undefined && !hdr.from_net_type) + hdr.from_org=system.name; + + write_news_header(hdr); // from newsutil.js } if(hdr!=null && body!=null) /* both, separate with blank line */ writeln(""); @@ -530,11 +510,6 @@ while(client.socket.is_connected) { writeln("340 send article to be posted. End with <CR-LF>.<CR-LF>"); var hdr={ from: "", subject: "" }; - if(!(user.security.restrictions&(UFLAG_G|UFLAG_Q))) { // !Guest and !Network Node - hdr.from=user.alias; - hdr.from_ext=user.number; - } - var posted=false; var header=true; var body=""; @@ -568,79 +543,21 @@ while(client.socket.is_connected) { } log(line); - /* Parse header lines */ - if((sp=line.indexOf(':'))==-1) - continue; - - data=line.slice(sp+1); - while(data.charAt(0)==' ') // trim prepended spaces - data=data.slice(1); - data=truncsp(data); // trim trailing spaces + parse_news_header(hdr,line); // from newsutil.js + } + newsgroups=hdr.newsgroups.split(','); - line=line.substr(0,sp); - while(line.charAt(0)==' ') // trim prepended spaces - line=line.slice(1); - line=truncsp(line); // trim trailing spaces + if(hdr.to==undefined && hdr.reply_id!=undefined) + hdr.to=getReferenceTo(hdr.reply_id); - switch(line.toLowerCase()) { - case "to": - case "apparently-to": - case "x-comment-to": - hdr.to=data; - break; - case "path": - hdr.path=data; - break; - case "from": - if(user.security.restrictions&(UFLAG_G|UFLAG_Q)) // Guest or Network Node - hdr.from=data; - break; - case "organization": - hdr.from_org=data; - break; - case "reply-to": - hdr.replyto_net_type=NET_INTERNET; - hdr.replyto=data; - break; - case "date": - hdr.date=data; - break; - case "subject": - hdr.subject=data; - break; - case "message-id": - if(slave) - hdr.id=data; - break; - case "references": - hdr.reply_id=data; - if(hdr.to==undefined) - hdr.to=getReferenceTo(data); - break; - case "newsgroups": - newsgroups=data.split(','); - hdr.newsgroups=data; - break; - case "x-ftn-pid": - hdr.ftn_pid=data; - break; - case "x-ftn-area": - hdr.ftn_area=data; - break; - case "x-ftn-flags": - hdr.ftn_flags=data; - break; - case "x-ftn-msgid": - hdr.ftn_msgid=data; - break; - case "x-ftn-reply": - hdr.ftn_reply=data; - break; - } - } if(hdr.to==undefined && hdr.newsgroups!=undefined) hdr.to=hdr.newsgroups; + if(!(user.security.restrictions&(UFLAG_G|UFLAG_Q))) { // !Guest and !Network Node + hdr.from=user.alias; + hdr.from_ext=user.number; + } + if(system.trashcan("subject",hdr.subject)) { log(format("!BLOCKED subject: %s",hdr.subject)); var reason = format("Blocked subject from %s (%s): %s"