DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T c

⟦662b254b3⟧ TextFile

    Length: 3597 (0xe0d)
    Types: TextFile
    Names: »ch_bboards.c«

Derivation

└─⟦9ae75bfbd⟧ Bits:30007242 EUUGD3: Starter Kit
    └─⟦3658e588a⟧ »EurOpenD3/mail/mh/mh-6.7.tar.Z« 
        └─⟦c75e36ecb⟧ 
            └─⟦this⟧ »mh-6.7/support/bboards/mmdfI/bboards/ch_bboards.c« 

TextFile

#include "util.h"
#include "mmdf.h"
#include "ch.h"
#include <signal.h>

/* 
 *
 *			C H _ B B O A R D S . C
 *
 *			the new BBoards channel
 *
 *
 *	This is the channel that is used to handle Internet BBoard
 *	distribution in an intelligent fashion.  In order to run it, you
 *	need the UCI BBoards facility installed.  This requires the
 *	establishment of a special login called ``bboards'', and the
 *	getbbent() package.
 *
 *	The idea is simple.  Distribution lists get aliased to go through
 *	this channel.  Suppose that the relay (or site) using ch_bboards
 *	subscribes to UNIX-WIZARDS.  The maintainer of the list is given
 *	the address ``dist-unix-wizards'' to send to for this relay and all
 *	sites that it serves.  The site manager then defines the following
 *	alias in the aliases file:
 *
 *		dist-unix-wizards:	unix-wizards@dist-bboards
 *
 *	This channel (and this channel alone) is then defined to serve the
 *	``dist-bboards'' host.  When it gets invoked, the channel does two
 *	things:  First, if the relay itself subscribes to the BBoard (the
 *	bb_file entry in the BBoards file is non-empty), then it delivers
 *	the message to the file.  Second, if other sites subscribe to the
 *	BBoard, then ch_bboards will enter the message back into the queue
 *	system using the ``bboards'' login as the sender.
 *
 *	This achieves two goals:  first, the incoming bandwidth of relays
 *	is not degraded by many sites subscribing to the same BBoard;
 *	second, if an address goes bad down the line, the relay's
 *	``bboards'' login gets the message back (not the originator).  Since
 *	the relay's PostMaster is assumed to monitor this mailbox, problems
 *	can be found and corrected.
 *
 *	Finally, ch_bboards can be run by a site that does not relay for
 *	other sites.  In this case, the bb_dist field is empty.
 *
 */

/* 	Unlike previous versions of ch_bboards, this version does not change
 *	the contents of the headers of the message being re-distributed.
 *	The following changes are made:
 *
 *	    Envelope:	The failure address is changed to bboards@locname
 *	    Headers:	Another Received: is added
 *
 *
 *	The local copy going to the BBoard has two entries prepended to the
 *	headers:
 *
 *	    BBoard-ID: n
 *	    BB-Posted: date/time
 *
 */

/* \f

 */

extern char logdfldir[];

extern struct ll_struct chanlog;
struct ll_struct   *logptr = &chanlog;

char   *dupfpath ();

/* \f

 */

main (argc, argv)
int     argc;
char  **argv;
{
    short   retval;
    Chan * chanptr;

    ll_hdinit (logptr, "BB");
    logptr -> ll_file = dupfpath (logptr -> ll_file, logdfldir);

    siginit ();
    signal (SIGINT, SIG_IGN);

    if ((chanptr = ch_nm2struct (*argv)) == (Chan *) NOTOK)
	err_abrt (RP_PARM, "unknown channel name '%s'", *argv);

    retval = ch_bboards (argc, argv, chanptr);
    ll_close (logptr);

    exit (retval);
}

/* \f

 */

ch_bboards (argc, argv, chanptr)
int     argc;
char  **argv;
Chan * chanptr;
{
#ifdef	DEBUG
    ll_log (logptr, LLOGBTR, "ch_bboards(argc=%d,*argv='%s')", argc, *argv);
#endif

    if (rp_isbad (qu_init (argc, argv)))
	return RP_NO;
    if (rp_isbad (bb_init (chanptr)))
	return RP_NO;

    if (rp_isbad (qu2bb_send ()))
	return RP_NO;

    qu_end (OK);
    bb_end (OK);

    return RP_OK;
}

/* \f

 */

err_abrt (code, fmt, b, c, d)
short   code;
char   *fmt,
       *b,
       *c,
       *d;
{
    char    linebuf[LINESIZE];

    qu_end (NOTOK);
    bb_end (NOTOK);

    sprintf (linebuf, "%s%s", "[abend:  %s]", fmt);
    ll_log (logptr, LLOGFAT, linebuf, rp_valstr (code), b, c, d);
    ll_close (logptr);

    exit (code);
}