|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T c
Length: 4212 (0x1074)
Types: TextFile
Names: »ch_bboards.c«, »ch_pop.c«
└─⟦9ae75bfbd⟧ Bits:30007242 EUUGD3: Starter Kit
└─⟦3658e588a⟧ »EurOpenD3/mail/mh/mh-6.7.tar.Z«
└─⟦c75e36ecb⟧
└─⟦this⟧ »mh-6.7/support/bboards/mmdfII/bboards/ch_bboards.c«
└─⟦this⟧ »mh-6.7/support/pop/mmdfII/pop/ch_pop.c«
#include "util.h"
#include "mmdf.h"
#ifndef POP
/*
* C H _ B B O A R D S . C
*
* the new BBoards channel
*/
#else POP
/*
* C H _ P O P . C
*
* the POP channel
*/
#endif POP
/* \f
*/
#ifndef POP
/*
* 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@bboards
*
* This channel (and this channel alone) is then defined to serve the
* ``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.locdomain
* Headers: Another Received: is added
*
* The local copy going to the BBoard has two entries prepended to the
* headers:
*
* BBoard-ID: n
* BB-Posted: RFC822 date/time
*/
#else POP
/*
* The POP channel is a subset of the BBoards channel, and just
* handles local mail delivery for remote users. As such, it
* only needs to know how to store a maildrop locally, and doesn't
* have to mess around with .cnt files and remote delivery.
*/
#endif POP
/* \f
*/
#include <signal.h>
#include "ch.h"
#include "phs.h"
extern LLog chanlog;
LLog *logptr = &chanlog;
extern char *logdfldir;
/* \f
*/
main (argc, argv)
int argc;
char **argv;
{
Chan *chanptr;
char *dupfpath ();
short retval;
mmdf_init (argv[0]);
#ifdef RUNALON
logptr -> ll_fd = 1;
ll_init (logptr);
#endif
siginit ();
signal (SIGINT, SIG_IGN);
if ((chanptr = ch_nm2struct (argv[0])) == (Chan *) NOTOK)
err_abrt (RP_PARM, "unknown channel name '%s'", argv[0]);
ch_llinit (chanptr);
retval = ch_bboards (argc, argv, chanptr);
ll_close (logptr);
exit (retval);
}
/* \f
*/
/* **************** (ch_) BBOARD DELIVERY **************** */
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;
phs_note (chanptr, PHS_WRSTRT);
if (rp_isbad (qu2bb_send (chanptr)))
return RP_NO;
phs_note (chanptr, PHS_WREND);
qu_end (OK);
bb_end (OK);
return RP_OK;
}
/* \f
*/
/* VARARGS2 */
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", "err [ ABEND (%s) ]\t", fmt);
ll_log (logptr, LLOGFAT, linebuf, rp_valstr (code), b, c, d);
ll_close (logptr);
exit (code);
}