[news.sysadmin] How to be a bridge between USENET & mailing list

pantz@mth.msu.edu (Tzu-Hsi Pan) (01/18/90)

I'm interested in setting up a bridge such that mailing list members
can receive news from a particular USENET news group and they can also
post news to USENET thru the bridge.
I'm sure this has been done in lots of sites.  Could some one tell me
how to do it as well as where to find the proper software if needed?

Thanks.

Pan (pantz@mth.msu.edu)

zmact61@tsun4.doc.ic.ac.uk.doc.ic.ac.uk (D Spinellis) (01/23/90)

In article <6062@cps3xx.UUCP> pantz@mth.msu.edu (Tzu-Hsi Pan) writes:
>
>I'm interested in setting up a bridge such that mailing list members
>can receive news from a particular USENET news group and they can also
>post news to USENET thru the bridge.

The following script provides the USENET to mailing list function.  It
connects to a host running nntp and automatically creates a digest of
all articles that appeared in the newsgroup since the last time it was
run together with instructions to forward it to a list.  Change the
actual script in order to configure it for your needs.  The output of
the script needs to be piped to sh, so you will probably run it with a
crontab entry like:

30 03 * * * /usr/local/bin/newsgate | sh

There must be more comprehensive and sophisticated programs available.
This script however works and is very easy to configure.  There is a 
feature for adding articles local to the digest.  The whole script needs 
named pipes.

Diomidis

#! /bin/sh
# This is a shell archive, meaning:
# 1. Remove everything above the #! /bin/sh line.
# 2. Save the resulting text in a file.
# 3. Execute the file with /bin/sh (not csh) to create the files:
#	newsgate
# This archive created: Mon Jan 22 20:18:55 1990
export PATH; PATH=/bin:$PATH
echo shar: extracting "'newsgate'" '(3209 characters)'
if test -f 'newsgate'
then
	echo shar: will not over-write existing file "'newsgate'"
else
sed 's/^X//' << \SHAR_EOF > 'newsgate'
X#!/bin/sh
X# Create a news digest from a newsgroups list using an nntp server.
X# The output of the command can be fed to sh to mail the digest off.
X#
X# (C) Copyright 1989 Diomidis Spinellis.  All rights reserved.
X#
X# Redistribution and use in source and binary forms are permitted
X# provided that the above copyright notice and this paragraph are
X# duplicated in all such forms.
X# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
X# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
X# WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
X
XNEWSGATESPOOL=/usr/local/spool/digest
X# The nntp host
XHOST=uunet.uu.net
X
X# Groups to digest
XGROUPS="comp.sources.unix comp.sources.misc alt.sources"
X
X# Where the numbers of the last articles forwarded are kept
XLAST=$NEWSGATESPOOL/last
X
X# Local messages.  Automatically erased after used.
X# Each local article must be terminated with 78i- (A line of 78 -)
XLOCAL=$NEWSGATESPOOL/local
X
X# Digest number
XNUMBERFILE=$NEWSGATESPOOL/nf
XNUMBER=`cat $NUMBERFILE 2>/dev/null || echo 1`
X
X# People who receive the digest. Must be comma separated.
XRECEIVERS='user1@foo.bar, user2@bar.foo, user3@foo.bar,
X	user4, user5@foobar'
XSRECEIVERS=`echo $RECEIVERS | sed -e 's/,//g'`
X
X# We need this so that telnet does not see a file close.
Xrm -f cmds cmds1
X/usr/etc/mknod cmds p
X/usr/etc/mknod cmds1 p
X
X# Ask for the articles available in the groups we are interested in
X(
X	for i in $GROUPS 
X	do
X		echo group $i
X	done
X	echo quit
X) >cmds &
X# Feed nntp with them and create nntp commands to print each article
X(
X	# This is the list of articles already used.  They are refixed by HHH
X	cat $LAST  2>/dev/null ||
X	# If file does not exist initialise to 0
X	for i in $GROUPS 
X	do
X		echo "HHH $i 0"
X	done
X	# Make it zero longth so we can append the new ones
X	cp /dev/null $LAST
X	# This will print the available articles prefixed by 211
X	telnet gould nntp <cmds 2>/dev/null
X) |
X/bin/awk '
X# Already sent
X/^HHH/	{ 
X	last[$2] = $3 
X}
X# Articles available
X/^211/	{
X	if (last[$5] > $3)
X		first = last[$5] + 1
X	else
X		first = $3
X	print "group", $5
X	for (i = first; i < $4; i++)
X		print "article", i
X	# Update the last file
X	print "HHH", $5, $4 >>"'$LAST'"
X}
XEND	{
X	print "quit"
X}
X' >cmds1 &
X
X# Now get the articles and create the batch
Xtelnet gould nntp <cmds1 2>/dev/null |
Xsed -n -e '
X# Do not print anything that comes of telnet after connection is closed
X/^205.*closing connection\.  Goodbye\.$/q
X# Print only some items from the header
X/^220.*Article retrieved; head and body follow\.$/,/^$/ {
X	/^From/p
X	/^Subject/p
X	/^Date/p
X	/^Newsgroups/p
X}
X# Print all the body
X/^$/,/^\./p
X' |
X(
Xcat <<EOF
X#!/bin/sh
X/usr/lib/sendmail -i "$SRECEIVERS" <<\END_SOURCES
XDate: `date`
XTo: $RECEIVERS
XFrom: Source Digest <source@foo.bar>
XSubject: The Source Groups Digest $NUMBER
X
XThis digest contains all articles posted in the USENET newsgroups
Xcomp.sources.misc, comp.sources.unix and alt.sources.
X
X------------------------------------------------------------------------------
X`cat $LOCAL`
X
XEOF
Xsed -e 's/^\./------------------------------------------------------------------------------/'
Xecho END_SOURCES
X)
X
Xexpr $NUMBER + 1 >$NUMBERFILE
Xrm -f cmds cmds1
Xcp /dev/null $LOCAL
SHAR_EOF
if test 3209 -ne "`wc -c < 'newsgate'`"
then
	echo shar: error transmitting "'newsgate'" '(should have been 3209 characters)'
fi
fi # end of overwriting check
#	End of shell archive
exit 0

--
Diomidis Spinellis                  Internet:                 dds@cc.ic.ac.uk
Department of Computing             BITNET:                   dds@cc.ic.ac.uk
Imperial College                    UUCP:   ...!cernvax!cc.imperial.ac.uk!dds
London SW7 2BZ                      JANET:                    dds@uk.ac.ic.cc