annotate support/pop/mmdfII/pop/ch_pop.c @ 17:76d91e545ea8 default tip

addrsbr and dtimep fix
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 24 Nov 2014 14:49:25 +0900
parents bce86c4163a3
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1 #include "util.h"
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2 #include "mmdf.h"
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3 #ifndef POP
bce86c4163a3 Initial revision
kono
parents:
diff changeset
4
bce86c4163a3 Initial revision
kono
parents:
diff changeset
5 /*
bce86c4163a3 Initial revision
kono
parents:
diff changeset
6 * C H _ B B O A R D S . C
bce86c4163a3 Initial revision
kono
parents:
diff changeset
7 *
bce86c4163a3 Initial revision
kono
parents:
diff changeset
8 * the new BBoards channel
bce86c4163a3 Initial revision
kono
parents:
diff changeset
9 */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
10
bce86c4163a3 Initial revision
kono
parents:
diff changeset
11 #else POP
bce86c4163a3 Initial revision
kono
parents:
diff changeset
12
bce86c4163a3 Initial revision
kono
parents:
diff changeset
13 /*
bce86c4163a3 Initial revision
kono
parents:
diff changeset
14 * C H _ P O P . C
bce86c4163a3 Initial revision
kono
parents:
diff changeset
15 *
bce86c4163a3 Initial revision
kono
parents:
diff changeset
16 * the POP channel
bce86c4163a3 Initial revision
kono
parents:
diff changeset
17 */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
18
bce86c4163a3 Initial revision
kono
parents:
diff changeset
19 #endif POP
bce86c4163a3 Initial revision
kono
parents:
diff changeset
20
bce86c4163a3 Initial revision
kono
parents:
diff changeset
21 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
22
bce86c4163a3 Initial revision
kono
parents:
diff changeset
23 #ifndef POP
bce86c4163a3 Initial revision
kono
parents:
diff changeset
24
bce86c4163a3 Initial revision
kono
parents:
diff changeset
25 /*
bce86c4163a3 Initial revision
kono
parents:
diff changeset
26 * This is the channel that is used to handle Internet BBoard
bce86c4163a3 Initial revision
kono
parents:
diff changeset
27 * distribution in an intelligent fashion. In order to run it, you
bce86c4163a3 Initial revision
kono
parents:
diff changeset
28 * need the UCI BBoards facility installed. This requires the
bce86c4163a3 Initial revision
kono
parents:
diff changeset
29 * establishment of a special login called ``bboards'', and the
bce86c4163a3 Initial revision
kono
parents:
diff changeset
30 * getbbent() package.
bce86c4163a3 Initial revision
kono
parents:
diff changeset
31 *
bce86c4163a3 Initial revision
kono
parents:
diff changeset
32 * The idea is simple. Distribution lists get aliased to go through
bce86c4163a3 Initial revision
kono
parents:
diff changeset
33 * this channel. Suppose that the relay (or site) using ch_bboards
bce86c4163a3 Initial revision
kono
parents:
diff changeset
34 * subscribes to UNIX-WIZARDS. The maintainer of the list is given
bce86c4163a3 Initial revision
kono
parents:
diff changeset
35 * the address ``dist-unix-wizards'' to send to for this relay and all
bce86c4163a3 Initial revision
kono
parents:
diff changeset
36 * sites that it serves. The site manager then defines the following
bce86c4163a3 Initial revision
kono
parents:
diff changeset
37 * alias in the aliases file:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
38 *
bce86c4163a3 Initial revision
kono
parents:
diff changeset
39 * dist-unix-wizards: unix-wizards@bboards
bce86c4163a3 Initial revision
kono
parents:
diff changeset
40 *
bce86c4163a3 Initial revision
kono
parents:
diff changeset
41 * This channel (and this channel alone) is then defined to serve the
bce86c4163a3 Initial revision
kono
parents:
diff changeset
42 * ``bboards'' host. When it gets invoked, the channel does two
bce86c4163a3 Initial revision
kono
parents:
diff changeset
43 * things: First, if the relay itself subscribes to the BBoard (the
bce86c4163a3 Initial revision
kono
parents:
diff changeset
44 * bb_file entry in the BBoards file is non-empty), then it delivers
bce86c4163a3 Initial revision
kono
parents:
diff changeset
45 * the message to the file. Second, if other sites subscribe to the
bce86c4163a3 Initial revision
kono
parents:
diff changeset
46 * BBoard, then ch_bboards will enter the message back into the queue
bce86c4163a3 Initial revision
kono
parents:
diff changeset
47 * system using the ``bboards'' login as the sender.
bce86c4163a3 Initial revision
kono
parents:
diff changeset
48 *
bce86c4163a3 Initial revision
kono
parents:
diff changeset
49 * This achieves two goals: first, the incoming bandwidth of relays
bce86c4163a3 Initial revision
kono
parents:
diff changeset
50 * is not degraded by many sites subscribing to the same BBoard;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
51 * second, if an address goes bad down the line, the relay's
bce86c4163a3 Initial revision
kono
parents:
diff changeset
52 * ``bboards'' login gets the message back (not the originator). Since
bce86c4163a3 Initial revision
kono
parents:
diff changeset
53 * the relay's PostMaster is assumed to monitor this mailbox, problems
bce86c4163a3 Initial revision
kono
parents:
diff changeset
54 * can be found and corrected.
bce86c4163a3 Initial revision
kono
parents:
diff changeset
55 *
bce86c4163a3 Initial revision
kono
parents:
diff changeset
56 * Finally, ch_bboards can be run by a site that does not relay for
bce86c4163a3 Initial revision
kono
parents:
diff changeset
57 * other sites. In this case, the bb_dist field is empty.
bce86c4163a3 Initial revision
kono
parents:
diff changeset
58 */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
59
bce86c4163a3 Initial revision
kono
parents:
diff changeset
60 /* Unlike previous versions of ch_bboards, this version does not change
bce86c4163a3 Initial revision
kono
parents:
diff changeset
61 * the contents of the headers of the message being re-distributed.
bce86c4163a3 Initial revision
kono
parents:
diff changeset
62 * The following changes are made:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
63 *
bce86c4163a3 Initial revision
kono
parents:
diff changeset
64 * Envelope: The failure address is changed to
bce86c4163a3 Initial revision
kono
parents:
diff changeset
65 bboards@locname.locdomain
bce86c4163a3 Initial revision
kono
parents:
diff changeset
66 * Headers: Another Received: is added
bce86c4163a3 Initial revision
kono
parents:
diff changeset
67 *
bce86c4163a3 Initial revision
kono
parents:
diff changeset
68 * The local copy going to the BBoard has two entries prepended to the
bce86c4163a3 Initial revision
kono
parents:
diff changeset
69 * headers:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
70 *
bce86c4163a3 Initial revision
kono
parents:
diff changeset
71 * BBoard-ID: n
bce86c4163a3 Initial revision
kono
parents:
diff changeset
72 * BB-Posted: RFC822 date/time
bce86c4163a3 Initial revision
kono
parents:
diff changeset
73 */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
74
bce86c4163a3 Initial revision
kono
parents:
diff changeset
75 #else POP
bce86c4163a3 Initial revision
kono
parents:
diff changeset
76
bce86c4163a3 Initial revision
kono
parents:
diff changeset
77 /*
bce86c4163a3 Initial revision
kono
parents:
diff changeset
78 * The POP channel is a subset of the BBoards channel, and just
bce86c4163a3 Initial revision
kono
parents:
diff changeset
79 * handles local mail delivery for remote users. As such, it
bce86c4163a3 Initial revision
kono
parents:
diff changeset
80 * only needs to know how to store a maildrop locally, and doesn't
bce86c4163a3 Initial revision
kono
parents:
diff changeset
81 * have to mess around with .cnt files and remote delivery.
bce86c4163a3 Initial revision
kono
parents:
diff changeset
82 */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
83
bce86c4163a3 Initial revision
kono
parents:
diff changeset
84 #endif POP
bce86c4163a3 Initial revision
kono
parents:
diff changeset
85
bce86c4163a3 Initial revision
kono
parents:
diff changeset
86 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
87
bce86c4163a3 Initial revision
kono
parents:
diff changeset
88 #include <signal.h>
bce86c4163a3 Initial revision
kono
parents:
diff changeset
89 #include "ch.h"
bce86c4163a3 Initial revision
kono
parents:
diff changeset
90 #include "phs.h"
bce86c4163a3 Initial revision
kono
parents:
diff changeset
91
bce86c4163a3 Initial revision
kono
parents:
diff changeset
92 extern LLog chanlog;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
93 LLog *logptr = &chanlog;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
94 extern char *logdfldir;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
95
bce86c4163a3 Initial revision
kono
parents:
diff changeset
96 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
97
bce86c4163a3 Initial revision
kono
parents:
diff changeset
98 main (argc, argv)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
99 int argc;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
100 char **argv;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
101 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
102 Chan *chanptr;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
103 char *dupfpath ();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
104 short retval;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
105
bce86c4163a3 Initial revision
kono
parents:
diff changeset
106 mmdf_init (argv[0]);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
107
bce86c4163a3 Initial revision
kono
parents:
diff changeset
108 #ifdef RUNALON
bce86c4163a3 Initial revision
kono
parents:
diff changeset
109 logptr -> ll_fd = 1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
110 ll_init (logptr);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
111 #endif
bce86c4163a3 Initial revision
kono
parents:
diff changeset
112
bce86c4163a3 Initial revision
kono
parents:
diff changeset
113 siginit ();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
114 signal (SIGINT, SIG_IGN);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
115
bce86c4163a3 Initial revision
kono
parents:
diff changeset
116 if ((chanptr = ch_nm2struct (argv[0])) == (Chan *) NOTOK)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
117 err_abrt (RP_PARM, "unknown channel name '%s'", argv[0]);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
118
bce86c4163a3 Initial revision
kono
parents:
diff changeset
119 ch_llinit (chanptr);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
120
bce86c4163a3 Initial revision
kono
parents:
diff changeset
121 retval = ch_bboards (argc, argv, chanptr);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
122 ll_close (logptr);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
123
bce86c4163a3 Initial revision
kono
parents:
diff changeset
124 exit (retval);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
125 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
126
bce86c4163a3 Initial revision
kono
parents:
diff changeset
127 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
128 /* **************** (ch_) BBOARD DELIVERY **************** */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
129
bce86c4163a3 Initial revision
kono
parents:
diff changeset
130 ch_bboards (argc, argv, chanptr)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
131 int argc;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
132 char **argv;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
133 Chan *chanptr;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
134 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
135 #ifdef DEBUG
bce86c4163a3 Initial revision
kono
parents:
diff changeset
136 ll_log (logptr, LLOGBTR, "ch_bboards(argc=%d,*argv='%s')", argc, *argv);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
137 #endif
bce86c4163a3 Initial revision
kono
parents:
diff changeset
138
bce86c4163a3 Initial revision
kono
parents:
diff changeset
139 if (rp_isbad (qu_init (argc, argv)))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
140 return RP_NO;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
141 if (rp_isbad (bb_init (chanptr)))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
142 return RP_NO;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
143
bce86c4163a3 Initial revision
kono
parents:
diff changeset
144 phs_note (chanptr, PHS_WRSTRT);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
145
bce86c4163a3 Initial revision
kono
parents:
diff changeset
146 if (rp_isbad (qu2bb_send (chanptr)))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
147 return RP_NO;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
148
bce86c4163a3 Initial revision
kono
parents:
diff changeset
149 phs_note (chanptr, PHS_WREND);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
150
bce86c4163a3 Initial revision
kono
parents:
diff changeset
151 qu_end (OK);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
152 bb_end (OK);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
153
bce86c4163a3 Initial revision
kono
parents:
diff changeset
154 return RP_OK;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
155 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
156
bce86c4163a3 Initial revision
kono
parents:
diff changeset
157 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
158
bce86c4163a3 Initial revision
kono
parents:
diff changeset
159 /* VARARGS2 */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
160 err_abrt (code, fmt, b, c, d)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
161 short code;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
162 char *fmt,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
163 *b,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
164 *c,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
165 *d;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
166 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
167 char linebuf[LINESIZE];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
168
bce86c4163a3 Initial revision
kono
parents:
diff changeset
169 qu_end (NOTOK);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
170 bb_end (NOTOK);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
171
bce86c4163a3 Initial revision
kono
parents:
diff changeset
172 sprintf (linebuf, "%s%s", "err [ ABEND (%s) ]\t", fmt);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
173 ll_log (logptr, LLOGFAT, linebuf, rp_valstr (code), b, c, d);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
174 ll_close (logptr);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
175
bce86c4163a3 Initial revision
kono
parents:
diff changeset
176 exit (code);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
177 }