Mercurial > hg > Applications > mh
comparison support/bboards/mmdfI/bboards/ch_bboards.c @ 0:bce86c4163a3
Initial revision
author | kono |
---|---|
date | Mon, 18 Apr 2005 23:46:02 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:bce86c4163a3 |
---|---|
1 #include "util.h" | |
2 #include "mmdf.h" | |
3 #include "ch.h" | |
4 #include <signal.h> | |
5 | |
6 /* | |
7 * | |
8 * C H _ B B O A R D S . C | |
9 * | |
10 * the new BBoards channel | |
11 * | |
12 * | |
13 * This is the channel that is used to handle Internet BBoard | |
14 * distribution in an intelligent fashion. In order to run it, you | |
15 * need the UCI BBoards facility installed. This requires the | |
16 * establishment of a special login called ``bboards'', and the | |
17 * getbbent() package. | |
18 * | |
19 * The idea is simple. Distribution lists get aliased to go through | |
20 * this channel. Suppose that the relay (or site) using ch_bboards | |
21 * subscribes to UNIX-WIZARDS. The maintainer of the list is given | |
22 * the address ``dist-unix-wizards'' to send to for this relay and all | |
23 * sites that it serves. The site manager then defines the following | |
24 * alias in the aliases file: | |
25 * | |
26 * dist-unix-wizards: unix-wizards@dist-bboards | |
27 * | |
28 * This channel (and this channel alone) is then defined to serve the | |
29 * ``dist-bboards'' host. When it gets invoked, the channel does two | |
30 * things: First, if the relay itself subscribes to the BBoard (the | |
31 * bb_file entry in the BBoards file is non-empty), then it delivers | |
32 * the message to the file. Second, if other sites subscribe to the | |
33 * BBoard, then ch_bboards will enter the message back into the queue | |
34 * system using the ``bboards'' login as the sender. | |
35 * | |
36 * This achieves two goals: first, the incoming bandwidth of relays | |
37 * is not degraded by many sites subscribing to the same BBoard; | |
38 * second, if an address goes bad down the line, the relay's | |
39 * ``bboards'' login gets the message back (not the originator). Since | |
40 * the relay's PostMaster is assumed to monitor this mailbox, problems | |
41 * can be found and corrected. | |
42 * | |
43 * Finally, ch_bboards can be run by a site that does not relay for | |
44 * other sites. In this case, the bb_dist field is empty. | |
45 * | |
46 */ | |
47 | |
48 /* Unlike previous versions of ch_bboards, this version does not change | |
49 * the contents of the headers of the message being re-distributed. | |
50 * The following changes are made: | |
51 * | |
52 * Envelope: The failure address is changed to bboards@locname | |
53 * Headers: Another Received: is added | |
54 * | |
55 * | |
56 * The local copy going to the BBoard has two entries prepended to the | |
57 * headers: | |
58 * | |
59 * BBoard-ID: n | |
60 * BB-Posted: date/time | |
61 * | |
62 */ | |
63 | |
64 /* */ | |
65 | |
66 extern char logdfldir[]; | |
67 | |
68 extern struct ll_struct chanlog; | |
69 struct ll_struct *logptr = &chanlog; | |
70 | |
71 char *dupfpath (); | |
72 | |
73 /* */ | |
74 | |
75 main (argc, argv) | |
76 int argc; | |
77 char **argv; | |
78 { | |
79 short retval; | |
80 Chan * chanptr; | |
81 | |
82 ll_hdinit (logptr, "BB"); | |
83 logptr -> ll_file = dupfpath (logptr -> ll_file, logdfldir); | |
84 | |
85 siginit (); | |
86 signal (SIGINT, SIG_IGN); | |
87 | |
88 if ((chanptr = ch_nm2struct (*argv)) == (Chan *) NOTOK) | |
89 err_abrt (RP_PARM, "unknown channel name '%s'", *argv); | |
90 | |
91 retval = ch_bboards (argc, argv, chanptr); | |
92 ll_close (logptr); | |
93 | |
94 exit (retval); | |
95 } | |
96 | |
97 /* */ | |
98 | |
99 ch_bboards (argc, argv, chanptr) | |
100 int argc; | |
101 char **argv; | |
102 Chan * chanptr; | |
103 { | |
104 #ifdef DEBUG | |
105 ll_log (logptr, LLOGBTR, "ch_bboards(argc=%d,*argv='%s')", argc, *argv); | |
106 #endif | |
107 | |
108 if (rp_isbad (qu_init (argc, argv))) | |
109 return RP_NO; | |
110 if (rp_isbad (bb_init (chanptr))) | |
111 return RP_NO; | |
112 | |
113 if (rp_isbad (qu2bb_send ())) | |
114 return RP_NO; | |
115 | |
116 qu_end (OK); | |
117 bb_end (OK); | |
118 | |
119 return RP_OK; | |
120 } | |
121 | |
122 /* */ | |
123 | |
124 err_abrt (code, fmt, b, c, d) | |
125 short code; | |
126 char *fmt, | |
127 *b, | |
128 *c, | |
129 *d; | |
130 { | |
131 char linebuf[LINESIZE]; | |
132 | |
133 qu_end (NOTOK); | |
134 bb_end (NOTOK); | |
135 | |
136 sprintf (linebuf, "%s%s", "[abend: %s]", fmt); | |
137 ll_log (logptr, LLOGFAT, linebuf, rp_valstr (code), b, c, d); | |
138 ll_close (logptr); | |
139 | |
140 exit (code); | |
141 } |