joe@auspyr.UUCP (Joe Angelo) (06/06/87)
Our 2.11 news software had a problem sending batched/compress [-b12] news to a Xenix 2.10 site. Batched news would always fail or cause something to core dump. (Sorry, I don't remember why...) So, what next? We started feeding the Xenix site unbatched news. This worked out just fine, with a minor exception that the UUCP overhead was simply to high! If a call didn't go threw, for whatever reason, we'd have a couple of hundred (read: too many) C./D./X. files sitting around. Somewhat of a problem. So what was deduced was that the unbatched_[by_news_software_]news interface worked fine and that a higher level batcher/compresser could be installed to feed the 2.10 rnews program. Attached a copy of the horrible scripts. Yeah, they could use some work but so long as it works... The idea is to batch the articles without using sendbatch. So, in your news/sys file, mark the site for batched news. Ie: xenix:groups:F: Novice folks: The file names containing the articles will appear in /usr/spool/batch/xenix (or whatever)... The special_batcher script below will read the file names from the news batchdir/site file and them convert it into a large file (under 100k) in the form of: START X Xcontents of news file STOP START X Xcontents of next news file... X STOP This file is then UUX'd to the remote unbatcher script which converts the above into a shell script, such as: sed 's/^X//' <'STOP' | rnews X Xcontents of news file STOP sed 's/^X//' <'STOP' | rnews X Xcontents of next news file... X STOP This script is then passed via the shell. If you heavy on security, then you might have a problem here... (After all, if someone edits the D. file, you'd be in some trouble on the remote end... but since UUCP prevents that (haha) from happening, no problem...) Excuse me for being incoherent, today is a horrid day...and I wanted to post this now, otherwise I'd never do it... ---special_batcher script---- cd /usr/spool/batch BITS=-b12 REMOTE=jmr # scan args for arg in $* do case "$arg" in -b*) BITS=`echo $arg | sed 's/-b//'`;; *) REMOTE="$arg";; esac done BFILE=$REMOTE QFILE=X${BFILE}.$$ if test -f $REMOTE then ok=ok else exit fi endoffile=true didsome=no COUNT=1 DFILE=$QFILE.$COUNT LIST="$DFILE" echo > $DFILE while $endoffile do read line if test $? = 1 then endoffile=false if test $didsome = no then rm -f $DFILE fi break fi echo 'START' >> $DFILE sed 's/^/X/' < $line >> $DFILE echo 'STOP' >> $DFILE didsome=yes SIZE=`ls -l $DFILE | awk '{print $4}'` if test $SIZE -gt 100000 then COUNT=`expr $COUNT + 1` DFILE=$QFILE.$COUNT LIST="$LIST $DFILE" echo > $DFILE didsome=no fi done < $BFILE files=`echo $QFILE.*` for file in $files do compress ${BITS} $file if test -f $file.Z then rargs="$BITS -c" OFILE=$file.Z else rargs= OFILE=$file fi uux -r - ${REMOTE}!special_unbatcher $rargs < $OFILE rm -f $OFILE done rm -f $BFILE --special unbatcher to be installed on remote, lets call it special_unbatcher-- BITS= COMPRESS=cat for f in $* do case "$f" in -b*) BITS=$f;; -c) COMPRESS="compress";; esac done # stdin is file... if test $COMPRESS = "cat" then ok=ok else COMPRESS="$COMPRESS -d $BITS" fi $COMPRESS | sed 's;START;sed '\''s/'\^'X//'\'' <<'\''STOP'\'' | rnews;' >> /tmp/newsp$$ sh < /tmp/newsp$$ rm -f /tmp/newsp$$ --- Ofcourse, you'll need to add "special_unbatcher" in the L.cmds/Permissions file on the remote and a cron daemon<!> locally to run "special_batcher remote" every so often. -- "No matter Joe Angelo, Sr. Sys. Engineer @ Austec, Inc., San Jose, CA. where you go, ARPA: aussjo!joe@lll-tis-b.arpa PHONE: [408] 279-5533 there you UUCP: {sdencore,cbosgd,amdahl,ptsfa,dana}!aussjo!joe are ..." UUCP: {styx,imagen,dlb,jmr,sci,altnet}!auspyr!joe