diff --git a/exec/nntpservice.js b/exec/nntpservice.js index bc15f3f4ac5f4d05d57d990e7f71274587fe2e55..ff3d0d98c1a5e16c9767e181c7146932d18a0330 100644 --- a/exec/nntpservice.js +++ b/exec/nntpservice.js @@ -25,7 +25,7 @@ // Netscape Communicator 4.77 // Xnews 5.04.25 -const REVISION = "1.134"; +const REVISION = "1.2"; var tearline = format("--- Synchronet %s%s-%s NNTP Service %s\r\n" ,system.version,system.revision,system.platform,REVISION); @@ -36,6 +36,8 @@ load("sbbsdefs.js"); load("newsutil.js"); load("mailutil.js"); +"use strict"; + var debug = false; var no_anonymous = false; var msgs_read = 0; @@ -290,34 +292,30 @@ while(client.socket.is_connected && !quit) { pattern=cmd[2]; writeln("215 list of newsgroups follows"); if(include_mail && user.security.level == 99 && wildmatch("mail", pattern)) { - if(msgbase && msgbase.is_open) - msgbase.close(); - msgbase=new MsgBase("mail"); - if(msgbase.open()==true) { - writeln(format("mail %u %u n", msgbase.last_msg, msgbase.first_msg)); - msgbase.close(); + var mb=new MsgBase("mail"); + if(mb.open()==true) { + writeln(format("mail %u %u n", mb.last_msg, mb.first_msg)); + mb.close(); } else - log(LOG_ERR, "Error " + msgbase.error + " opening " + msgbase.file); + log(LOG_ERR, "Error " + mb.error + " opening " + mb.file); } for(g in msg_area.grp_list) for(s in msg_area.grp_list[g].sub_list) { if(!wildmatch(msg_area.grp_list[g].sub_list[s].newsgroup, pattern)) continue; - if(msgbase && msgbase.is_open) - msgbase.close(); - msgbase=new MsgBase(msg_area.grp_list[g].sub_list[s].code); - if(!msgbase.open()) { - log(LOG_ERR, "Error " + msgbase.error + " opening " + msgbase.file); + var mb=new MsgBase(msg_area.grp_list[g].sub_list[s].code); + if(!mb.open()) { + log(LOG_ERR, "Error " + mb.error + " opening " + mb.file); continue; } - var count = count_msgs(msgbase); + var count = count_msgs(mb); writeln(format("%s %u %u %s" ,msg_area.grp_list[g].sub_list[s].newsgroup ,count.last ,count.first ,msg_area.grp_list[g].sub_list[s].is_moderated ? "m" : (msg_area.grp_list[g].sub_list[s].can_post ? "y" : "n") )); - msgbase.close(); + mb.close(); } writeln("."); // end of list } @@ -423,25 +421,23 @@ while(client.socket.is_connected && !quit) { writeln("231 list of new newsgroups since " + compare.toISOString() + " follows"); for(g in msg_area.grp_list) { for(s in msg_area.grp_list[g].sub_list) { - if(msgbase && msgbase.is_open) - msgbase.close(); - msgbase=new MsgBase(msg_area.grp_list[g].sub_list[s].code); - var ini_file = new File(msgbase.file + ".ini"); + var mb=new MsgBase(msg_area.grp_list[g].sub_list[s].code); + var ini_file = new File(mb.file + ".ini"); if(ini_file.open("r")) { var created = ini_file.iniGetValue(null, "Created", 0); ini_file.close(); if(created >= compare.getTime() / 1000) { - if(msgbase.open()) { - var count = count_msgs(msgbase); + if(mb.open()) { + var count = count_msgs(mb); writeln(format("%s %u %u %s" ,msg_area.grp_list[g].sub_list[s].newsgroup ,count.last ,count.first ,msg_area.grp_list[g].sub_list[s].is_moderated ? "m" : (msg_area.grp_list[g].sub_list[s].can_post ? "y" : "n") )); - msgbase.close(); + mb.close(); } else { - log(LOG_ERR, "Error " + msgbase.error + " opening " + msgbase.file); + log(LOG_ERR, "Error " + mb.error + " opening " + mb.file); } } } @@ -507,6 +503,7 @@ while(client.socket.is_connected && !quit) { ,count.last ,selected.newsgroup )); + current_article = count.first; } else { // LISTGROUP writeln("211 list of article numbers follow"); var total_msgs = msgbase.total_msgs; @@ -520,6 +517,7 @@ while(client.socket.is_connected && !quit) { continue; writeln(idx.number); } + current_article = msgbase.first_msg; writeln("."); } break; @@ -676,12 +674,7 @@ while(client.socket.is_connected && !quit) { writeln("412 read permission to newsgroup denied"); break; } - if(cmd[1]==undefined || cmd[1].length==0) { - writeln("420 no current article has been selected"); - bogus_cmd(cmdline); - break; - } - if(cmd[1]!='') { + if(cmd[1]) { if(cmd[1].indexOf('<')>=0) /* message-id */ current_article=cmd[1]; else @@ -928,14 +921,9 @@ while(client.socket.is_connected && !quit) { if(!msg_area.grp_list[g].sub_list[s].can_post) continue; - if(msgbase!=null) { - msgbase.close(); - delete msgbase; - } - - msgbase=new MsgBase(msg_area.grp_list[g].sub_list[s].code); - if(!msgbase.open()) { - log(LOG_ERR, "Error " + msgbase.error + " opening " + msgbase.file); + var mb=new MsgBase(msg_area.grp_list[g].sub_list[s].code); + if(!mb.open()) { + log(LOG_ERR, "Error " + mb.error + " opening " + mb.file); continue; } @@ -946,7 +934,7 @@ while(client.socket.is_connected && !quit) { if(ctrl_msg.length) { switch(ctrl_msg[0].toLowerCase()) { case "cancel": - target=msgbase.get_msg_header(ctrl_msg[1]); + target=mb.get_msg_header(ctrl_msg[1]); if(target==null) { log(LOG_NOTICE,"!Invalid Message-ID: " + ctrl_msg[1]); break; @@ -954,11 +942,11 @@ while(client.socket.is_connected && !quit) { if(logged_in && ((target.from_ext==user.number && msg_area.grp_list[g].sub_list[s].settings&SUB_DEL) || msg_area.grp_list[g].sub_list[s].is_operator)) { - if(msgbase.remove_msg(ctrl_msg[1])) { + if(mb.remove_msg(ctrl_msg[1])) { posted=true; log(LOG_NOTICE,"Message deleted: " + ctrl_msg[1]); } else - log(LOG_ERR,"!ERROR " + msgbase.error + + log(LOG_ERR,"!ERROR " + mb.error + " deleting message: " + ctrl_msg[1]); continue; } @@ -966,6 +954,7 @@ while(client.socket.is_connected && !quit) { } } log(LOG_WARNING,"!Invalid control message: " + hdr.control); + mb.close(); break; } @@ -977,15 +966,16 @@ while(client.socket.is_connected && !quit) { else hdr.attr&=~MSG_MODERATED; - if(msgbase.save_msg(hdr,client,body)) { + if(mb.save_msg(hdr,client,body)) { log(format("%s posted a message (%u chars, %u lines) on %s (%s)" - ,user.alias, body.length, lines, newsgroups[n], msgbase.cfg.code)); + ,user.alias, body.length, lines, newsgroups[n], mb.cfg.code)); posted=true; msgs_posted++; } else - log(msgbase.status > 0 ? LOG_WARNING:LOG_ERR + log(mb.status > 0 ? LOG_WARNING:LOG_ERR ,format("!ERROR %d saving mesage: %s" - ,msgbase.status, msgbase.last_error)); + ,mb.status, mb.last_error)); + mb.close(); } if(posted) writeln("240 article posted ok");