annotate uip/rmail.c @ 9:52d0fa25c554 currrent-release

bug fix
author kono
date Sun, 04 Dec 2005 03:21:49 +0900
parents bce86c4163a3
children 441a2190cfae
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1 /* rmail.c - replacement for /bin/rmail */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2 #ifndef lint
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3 static char ident[] = "@(#)$Id$";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
4 #endif lint
bce86c4163a3 Initial revision
kono
parents:
diff changeset
5
bce86c4163a3 Initial revision
kono
parents:
diff changeset
6 /* This program has a long, long history. It started as UCB's rmail, and
bce86c4163a3 Initial revision
kono
parents:
diff changeset
7 was then modified by OBrien@Rand-Unix to run with MMDF. Then DpK@Brl
bce86c4163a3 Initial revision
kono
parents:
diff changeset
8 re-wrote it, and SmB@Unc hacked it up a bit. After that
bce86c4163a3 Initial revision
kono
parents:
diff changeset
9 MRose.UCI@Rand-Relay upgraded it to use the nifty MF (mail filtering)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
10 system. Finally, the latter stripped it down to work with MH.
bce86c4163a3 Initial revision
kono
parents:
diff changeset
11
bce86c4163a3 Initial revision
kono
parents:
diff changeset
12 This program should be used ONLY if you have both "mts mh" and "uucp on"
bce86c4163a3 Initial revision
kono
parents:
diff changeset
13 set in your MH configuration.
bce86c4163a3 Initial revision
kono
parents:
diff changeset
14 */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
15
bce86c4163a3 Initial revision
kono
parents:
diff changeset
16
bce86c4163a3 Initial revision
kono
parents:
diff changeset
17 #include "../h/mh.h"
bce86c4163a3 Initial revision
kono
parents:
diff changeset
18 #include "../h/addrsbr.h"
bce86c4163a3 Initial revision
kono
parents:
diff changeset
19 #include "../zotnet/mf.h"
bce86c4163a3 Initial revision
kono
parents:
diff changeset
20 #include "../zotnet/tws.h"
bce86c4163a3 Initial revision
kono
parents:
diff changeset
21 #include <stdio.h>
bce86c4163a3 Initial revision
kono
parents:
diff changeset
22 #include "../zotnet/mts.h"
bce86c4163a3 Initial revision
kono
parents:
diff changeset
23 #include <signal.h>
bce86c4163a3 Initial revision
kono
parents:
diff changeset
24 #ifdef LOCALE
bce86c4163a3 Initial revision
kono
parents:
diff changeset
25 #include <locale.h>
bce86c4163a3 Initial revision
kono
parents:
diff changeset
26 #endif
bce86c4163a3 Initial revision
kono
parents:
diff changeset
27
bce86c4163a3 Initial revision
kono
parents:
diff changeset
28
bce86c4163a3 Initial revision
kono
parents:
diff changeset
29 #define ADDROK 0 /* okay to use post to deliver message */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
30 #define UUCP 1 /* okay to use uux to deliver message */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
31 #define RETURN 2 /* message loses */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
32
bce86c4163a3 Initial revision
kono
parents:
diff changeset
33 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
34 int pbroke; /* broken-pipe flag */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
35 int rtnflag; /* note was sent back */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
36
bce86c4163a3 Initial revision
kono
parents:
diff changeset
37 char date[BUFSIZ]; /* date of origination from uucp header */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
38 char from[BUFSIZ]; /* accumulated path of sender */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
39 char origsys[BUFSIZ]; /* originating system */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
40 char origpath[BUFSIZ]; /* path from us to originating system */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
41 char usrfrm[BUFSIZ]; /* the 822 version of from[] */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
42 char Mailsys[BUFSIZ]; /* address of the mail agent */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
43 char overseer[BUFSIZ]; /* address of the watchdog */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
44
bce86c4163a3 Initial revision
kono
parents:
diff changeset
45 char mmdf[BUFSIZ]; /* filtered mail file */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
46
bce86c4163a3 Initial revision
kono
parents:
diff changeset
47 char *rtnmessage[] = {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
48 " Your message has been intercepted trying to access\n",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
49 "a restricted access host (e.g. an ARPANET host). A copy\n",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
50 "of your message has been sent to the system administrators.\n",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
51 "The text of your message follows.\n\n",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
52 NULL
bce86c4163a3 Initial revision
kono
parents:
diff changeset
53 };
bce86c4163a3 Initial revision
kono
parents:
diff changeset
54
bce86c4163a3 Initial revision
kono
parents:
diff changeset
55 char rtnbegin[] =
bce86c4163a3 Initial revision
kono
parents:
diff changeset
56 " ---------------- Returned Mail Follows --------------\n";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
57 char rtnend[] =
bce86c4163a3 Initial revision
kono
parents:
diff changeset
58 " --------------- End of Returned Mail ---------------\n";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
59
bce86c4163a3 Initial revision
kono
parents:
diff changeset
60 char *oopsmessage[] = {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
61 "\n\n\tThe system administrators (%s) have been informed of\n",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
62 "the problem, but have not been given a copy of your message.\n\n",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
63 NULL
bce86c4163a3 Initial revision
kono
parents:
diff changeset
64 };
bce86c4163a3 Initial revision
kono
parents:
diff changeset
65
bce86c4163a3 Initial revision
kono
parents:
diff changeset
66 FILE * fromf; /* UUCP "From lines */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
67 FILE * msgf; /* message text */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
68 FILE * pipef; /* output for "post" or "uux" */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
69
bce86c4163a3 Initial revision
kono
parents:
diff changeset
70
bce86c4163a3 Initial revision
kono
parents:
diff changeset
71 int pipeser ();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
72
bce86c4163a3 Initial revision
kono
parents:
diff changeset
73
bce86c4163a3 Initial revision
kono
parents:
diff changeset
74 off_t lseek ();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
75
bce86c4163a3 Initial revision
kono
parents:
diff changeset
76 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
77
bce86c4163a3 Initial revision
kono
parents:
diff changeset
78 main (argc, argv)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
79 int argc;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
80 char **argv;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
81 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
82 int cpyback;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
83 char *cp,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
84 *fromptr,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
85 fromwhom[BUFSIZ],
bce86c4163a3 Initial revision
kono
parents:
diff changeset
86 linebuf[BUFSIZ],
bce86c4163a3 Initial revision
kono
parents:
diff changeset
87 sys[BUFSIZ];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
88
bce86c4163a3 Initial revision
kono
parents:
diff changeset
89 #ifdef LOCALE
bce86c4163a3 Initial revision
kono
parents:
diff changeset
90 setlocale(LC_ALL, "");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
91 #endif
bce86c4163a3 Initial revision
kono
parents:
diff changeset
92 #ifdef JAPAN
bce86c4163a3 Initial revision
kono
parents:
diff changeset
93 ml_init();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
94 #endif /* JAPAN */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
95 invo_name = r1bindex (*argv, '/');
bce86c4163a3 Initial revision
kono
parents:
diff changeset
96 m_foil (NULLCP);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
97 mts_init (invo_name);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
98
bce86c4163a3 Initial revision
kono
parents:
diff changeset
99 if (argc < 2)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
100 adios (NULLCP, "usage: %s user [user ...]", invo_name);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
101 (void) umask (0);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
102 (void) setgid (1);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
103 (void) setuid (1);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
104
bce86c4163a3 Initial revision
kono
parents:
diff changeset
105 (void) sprintf (Mailsys, "%s@%s", Mailer, LocalName ());
bce86c4163a3 Initial revision
kono
parents:
diff changeset
106 if (Overseer == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
107 Overseer = Mailsys;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
108 if (index (Overseer, '@') == NULL) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
109 (void) sprintf (overseer, "%s@%s", Overseer, LocalName ());
bce86c4163a3 Initial revision
kono
parents:
diff changeset
110 Overseer = overseer;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
111 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
112
bce86c4163a3 Initial revision
kono
parents:
diff changeset
113 (void) mktemp (Errtmp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
114 if (freopen (Errtmp, "w", stderr) == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
115 adios (Errtmp, "unable to create");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
116 (void) dup2 (fileno (stderr), fileno (stdout));
bce86c4163a3 Initial revision
kono
parents:
diff changeset
117
bce86c4163a3 Initial revision
kono
parents:
diff changeset
118 (void) mktemp (Msgtmp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
119 if ((msgf = fdopen (creat (Msgtmp, Tmpmode), "w")) == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
120 adios (Msgtmp, "unable to create");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
121
bce86c4163a3 Initial revision
kono
parents:
diff changeset
122 (void) mktemp (Fromtmp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
123 if ((fromf = fdopen (creat (Fromtmp, Tmpmode), "w")) == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
124 adios (Fromtmp, "unable to create");
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 for (;;) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
129 if (fgets (linebuf, sizeof linebuf, stdin) == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
130 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
131 if (strncmp (linebuf, "From ", 5)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
132 && strncmp (linebuf, ">From ", 6))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
133 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
134
bce86c4163a3 Initial revision
kono
parents:
diff changeset
135 if (linebuf[0] != '>')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
136 fputs (">", fromf);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
137 fputs (linebuf, fromf);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
138 cp = index (linebuf, ' ');
bce86c4163a3 Initial revision
kono
parents:
diff changeset
139 fromptr = ++cp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
140 cp = index (cp, ' ');
bce86c4163a3 Initial revision
kono
parents:
diff changeset
141 *cp++ = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
142 (void) strcpy (fromwhom, fromptr);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
143 (void) strncpy (date, cp, 24);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
144
bce86c4163a3 Initial revision
kono
parents:
diff changeset
145 for (;;) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
146 if ((cp = index (cp + 1, 'r')) == NULL) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
147 if ((cp = rindex (fromwhom, '!')) != NULL) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
148 char *p;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
149 *cp = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
150 if ((p = rindex (fromwhom, '!')) != NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
151 (void) strcpy (origsys, p + 1);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
152 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
153 (void) strcpy (origsys, fromwhom);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
154 (void) strcat (from, fromwhom);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
155 (void) strcat (from, "!");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
156 (void) strcpy (fromwhom, cp + 1);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
157 goto out;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
158 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
159 (void) strcpy (sys, SystemName ());
bce86c4163a3 Initial revision
kono
parents:
diff changeset
160 (void) strcat (from, sys);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
161 (void) strcpy (origsys, sys);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
162 (void) strcat (from, "!");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
163 goto out;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
164 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
165 if (strncmp (cp, "remote from ", 12) == 0)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
166 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
167 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
168
bce86c4163a3 Initial revision
kono
parents:
diff changeset
169 (void) sscanf (cp, "remote from %s", sys);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
170 (void) strcat (from, sys);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
171 (void) strcpy (origsys, sys);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
172 (void) strcat (from, "!");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
173 out: ;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
174 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
175 if (fromwhom[0] == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
176 adios (NULLCP, "no from line");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
177
bce86c4163a3 Initial revision
kono
parents:
diff changeset
178 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
179
bce86c4163a3 Initial revision
kono
parents:
diff changeset
180 (void) strcpy (origpath, from);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
181 (void) strcat (from, fromwhom);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
182 get_mmdf_addr (from, usrfrm);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
183 if ((cp = rindex (usrfrm, '<')) != NULL) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
184 (void) strcpy (usrfrm, ++cp); /* sigh */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
185 if ((cp = rindex (usrfrm, '>')) != NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
186 *cp = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
187 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
188 if (usrfrm[0] == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
189 (void) sprintf (usrfrm, "%s!%s%%%s@%s%c",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
190 SystemName (), from, UucpChan (), LocalName (), NULL);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
191
bce86c4163a3 Initial revision
kono
parents:
diff changeset
192 fputs (linebuf, msgf);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
193 if (txtcpy (stdin, msgf) == NOTOK)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
194 fputs ("\n *** Problem during receipt from UUCP ***\n", msgf);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
195
bce86c4163a3 Initial revision
kono
parents:
diff changeset
196 (void) freopen (Msgtmp, "r", msgf);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
197 (void) freopen (Fromtmp, "r", fromf);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
198 (void) unlink (Fromtmp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
199 mmdf[0] = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
200
bce86c4163a3 Initial revision
kono
parents:
diff changeset
201 cpyback = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
202 for (argv++; --argc > 0;) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
203 rewind (fromf);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
204 rewind (msgf);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
205 rtnflag = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
206 if (deliver (*argv++) == NOTOK && !rtnflag)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
207 cpyback++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
208 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
209
bce86c4163a3 Initial revision
kono
parents:
diff changeset
210 (void) fflush (stderr);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
211 (void) fflush (stdout);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
212
bce86c4163a3 Initial revision
kono
parents:
diff changeset
213 if (cpyback) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
214 rcpy ();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
215 zcpy ();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
216 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
217
bce86c4163a3 Initial revision
kono
parents:
diff changeset
218 (void) unlink (Msgtmp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
219 if (mmdf[0])
bce86c4163a3 Initial revision
kono
parents:
diff changeset
220 (void) unlink (mmdf);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
221 (void) unlink (Errtmp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
222
bce86c4163a3 Initial revision
kono
parents:
diff changeset
223 exit (0);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
224 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
225
bce86c4163a3 Initial revision
kono
parents:
diff changeset
226 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
227
bce86c4163a3 Initial revision
kono
parents:
diff changeset
228 deliver (to)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
229 char *to;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
230 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
231 int i,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
232 replyval;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
233 char tmpfil[BUFSIZ];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
234
bce86c4163a3 Initial revision
kono
parents:
diff changeset
235 switch (adrcheck (to)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
236 case ADDROK:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
237 if (mmdf[0] == NULL && filter () == NOTOK)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
238 (void) strcpy (mmdf, Msgtmp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
239 replyval = xpost (to, mmdf);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
240 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
241
bce86c4163a3 Initial revision
kono
parents:
diff changeset
242 case UUCP:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
243 if ((replyval = xuucp (to)) == NOTOK)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
244 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
245
bce86c4163a3 Initial revision
kono
parents:
diff changeset
246 if ((replyval = txtcpy (fromf, pipef)) != NOTOK)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
247 replyval = txtcpy (msgf, pipef);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
248 i = (pclose (pipef) >> 8) & 0xff;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
249 if (replyval != NOTOK)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
250 replyval = (i != 0 ? NOTOK : OK);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
251 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
252
bce86c4163a3 Initial revision
kono
parents:
diff changeset
253 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
254
bce86c4163a3 Initial revision
kono
parents:
diff changeset
255 case RETURN:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
256 rtnflag++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
257 switch (adrcheck (from)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
258 case ADDROK:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
259 case RETURN:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
260 (void) strcpy (tmpfil, "/tmp/rmailXXXXXX");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
261 (void) unlink (mktemp (tmpfil));
bce86c4163a3 Initial revision
kono
parents:
diff changeset
262 if ((pipef = fdopen (creat (tmpfil, Tmpmode), "w")) == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
263 return NOTOK;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
264
bce86c4163a3 Initial revision
kono
parents:
diff changeset
265 fprintf (pipef, "Date: %s\nFrom: %s\n",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
266 dtimenow (), Mailsys);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
267 fprintf (pipef, "To: %s\ncc: %s\n", from, Overseer);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
268 rtnmesg (to);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
269 (void) fclose (pipef);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
270
bce86c4163a3 Initial revision
kono
parents:
diff changeset
271 replyval = xpost (from, tmpfil);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
272 (void) unlink (tmpfil);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
273 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
274
bce86c4163a3 Initial revision
kono
parents:
diff changeset
275 case UUCP:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
276 if ((replyval = xuucp (from)) == NOTOK)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
277 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
278
bce86c4163a3 Initial revision
kono
parents:
diff changeset
279 fprintf (pipef, "To: %s\ncc: %s\n", from, Overseer);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
280 rtnmesg (to);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
281 i = (pclose (pipef) >> 8) & 0xff;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
282 if (replyval != NOTOK)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
283 replyval = (i != 0 ? NOTOK : OK);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
284 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
285 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
286 if (Syscpy) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
287 (void) strcpy (tmpfil, "/tmp/rmailXXXXXX");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
288 (void) unlink (mktemp (tmpfil));
bce86c4163a3 Initial revision
kono
parents:
diff changeset
289 if ((pipef = fdopen (creat (tmpfil, Tmpmode), "w")) == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
290 return NOTOK;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
291
bce86c4163a3 Initial revision
kono
parents:
diff changeset
292 fprintf (pipef, "Date: %s\nFrom: %s\n",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
293 dtimenow (), Mailsys);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
294 fprintf (pipef, "To: %s\ncc: %s\n", usrfrm, Overseer);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
295 rtnmesg (to);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
296 (void) fclose (pipef);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
297
bce86c4163a3 Initial revision
kono
parents:
diff changeset
298 replyval = xpost (Overseer, tmpfil);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
299 (void) unlink (tmpfil);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
300 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
301 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
302 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
303
bce86c4163a3 Initial revision
kono
parents:
diff changeset
304 return replyval;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
305 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
306
bce86c4163a3 Initial revision
kono
parents:
diff changeset
307 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
308
bce86c4163a3 Initial revision
kono
parents:
diff changeset
309 adrcheck (adr)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
310 char *adr;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
311 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
312 int type;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
313 char *cp,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
314 host[BUFSIZ];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
315 struct mailname *mp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
316
bce86c4163a3 Initial revision
kono
parents:
diff changeset
317 if ((cp = getname (adr)) == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
318 return RETURN;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
319 mp = getm (cp, NULLCP, 0, AD_HOST, NULLCP);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
320 while (getname (""))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
321 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
322 if (mp == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
323 return RETURN;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
324
bce86c4163a3 Initial revision
kono
parents:
diff changeset
325 type = mp -> m_type;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
326 (void) strcpy (host, mp -> m_host);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
327 mnfree (mp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
328 if (mp -> m_mbox == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
329 return RETURN;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
330
bce86c4163a3 Initial revision
kono
parents:
diff changeset
331 switch (type) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
332 case LOCALHOST:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
333 return ADDROK;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
334
bce86c4163a3 Initial revision
kono
parents:
diff changeset
335 case UUCPHOST:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
336 return (strcmp (host, SystemName ()) ? UUCP : ADDROK);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
337
bce86c4163a3 Initial revision
kono
parents:
diff changeset
338 default:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
339 if (lookup (origsys, Okhosts) == OK)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
340 return ADDROK;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
341 return (okhost (host) == NOTOK ? RETURN : ADDROK);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
342 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
343 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
344
bce86c4163a3 Initial revision
kono
parents:
diff changeset
345 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
346
bce86c4163a3 Initial revision
kono
parents:
diff changeset
347 okhost (host)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
348 char *host;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
349 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
350 return (lookup (origsys, Okhosts) == OK
bce86c4163a3 Initial revision
kono
parents:
diff changeset
351 || lookup (host, Okhosts) == OK
bce86c4163a3 Initial revision
kono
parents:
diff changeset
352 || lookup (host, Okdests) == OK ? OK : NOTOK);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
353 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
354
bce86c4163a3 Initial revision
kono
parents:
diff changeset
355
bce86c4163a3 Initial revision
kono
parents:
diff changeset
356 lookup (what, where)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
357 char *what,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
358 *where;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
359 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
360 char *cp,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
361 entry[BUFSIZ];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
362 FILE * lookf;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
363
bce86c4163a3 Initial revision
kono
parents:
diff changeset
364 if ((lookf = fopen (where, "r")) == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
365 return NOTOK;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
366 while (fgets (entry, sizeof entry, lookf) != NULL) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
367 cp = entry;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
368 while (*cp != '\n' && *cp != ' ' && *cp != '\t')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
369 cp++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
370 *cp = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
371 if (uleq (what, entry)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
372 (void) fclose (lookf);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
373 return OK;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
374 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
375 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
376 (void) fclose (lookf);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
377
bce86c4163a3 Initial revision
kono
parents:
diff changeset
378 return NOTOK;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
379 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
380
bce86c4163a3 Initial revision
kono
parents:
diff changeset
381
bce86c4163a3 Initial revision
kono
parents:
diff changeset
382 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
383
bce86c4163a3 Initial revision
kono
parents:
diff changeset
384 rtnmesg (badadr)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
385 char *badadr;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
386 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
387 int i;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
388
bce86c4163a3 Initial revision
kono
parents:
diff changeset
389 fprintf (pipef, "Subject: Illegal Address (%s)\n\n", badadr);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
390 for (i = 0; rtnmessage[i]; i++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
391 fputs (rtnmessage[i], pipef);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
392 fputs (rtnbegin, pipef);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
393
bce86c4163a3 Initial revision
kono
parents:
diff changeset
394 rewind (fromf);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
395 (void) txtcpy (fromf, pipef);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
396 rewind (msgf);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
397 (void) txtcpy (msgf, pipef);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
398
bce86c4163a3 Initial revision
kono
parents:
diff changeset
399 fputs (rtnend, pipef);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
400 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
401
bce86c4163a3 Initial revision
kono
parents:
diff changeset
402
bce86c4163a3 Initial revision
kono
parents:
diff changeset
403 txtcpy (frm, to)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
404 FILE * frm, *to;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
405 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
406 int nread;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
407 char buffer[BUFSIZ];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
408
bce86c4163a3 Initial revision
kono
parents:
diff changeset
409 while (!pbroke
bce86c4163a3 Initial revision
kono
parents:
diff changeset
410 && (nread = fread (buffer, sizeof (*buffer), BUFSIZ, frm)) > 0)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
411 (void) fwrite (buffer, sizeof (*buffer), nread, to);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
412
bce86c4163a3 Initial revision
kono
parents:
diff changeset
413 return (ferror (frm) ? NOTOK : OK);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
414 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
415
bce86c4163a3 Initial revision
kono
parents:
diff changeset
416 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
417
bce86c4163a3 Initial revision
kono
parents:
diff changeset
418 xpost (addr, file)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
419 char *addr,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
420 *file;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
421 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
422 int i,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
423 child_id;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
424
bce86c4163a3 Initial revision
kono
parents:
diff changeset
425 for (i = 0; (child_id = fork ()) == NOTOK && i < 5; i++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
426 sleep (5);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
427 switch (child_id) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
428 case NOTOK:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
429 return NOTOK;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
430
bce86c4163a3 Initial revision
kono
parents:
diff changeset
431 case OK:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
432 execlp (postproc, r1bindex (postproc, '/'),
bce86c4163a3 Initial revision
kono
parents:
diff changeset
433 "-deliver", addr, file, NULLCP);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
434 fprintf (stderr, "unable to exec ");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
435 perror (postproc);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
436 _exit (1);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
437
bce86c4163a3 Initial revision
kono
parents:
diff changeset
438 default:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
439 return (pidwait (child_id, OK) ? NOTOK : OK);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
440 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
441 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
442
bce86c4163a3 Initial revision
kono
parents:
diff changeset
443 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
444
bce86c4163a3 Initial revision
kono
parents:
diff changeset
445 xuucp (to)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
446 char *to;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
447 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
448 char *cp,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
449 buffer[BUFSIZ],
bce86c4163a3 Initial revision
kono
parents:
diff changeset
450 cmdstr[BUFSIZ];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
451
bce86c4163a3 Initial revision
kono
parents:
diff changeset
452 (void) strcpy (buffer, to);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
453 if (cp = index (buffer, '!'))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
454 *cp++ = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
455 else {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
456 fprintf (stderr, "internal error -- %s has no host\n", to);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
457 return NOTOK;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
458 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
459 (void) sprintf (cmdstr, "uux -p %s!rmail \\(%s\\)", buffer, cp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
460
bce86c4163a3 Initial revision
kono
parents:
diff changeset
461 if ((pipef = popen (cmdstr, "w")) == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
462 return NOTOK;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
463
bce86c4163a3 Initial revision
kono
parents:
diff changeset
464 (void) signal (SIGPIPE, pipeser);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
465 pbroke = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
466
bce86c4163a3 Initial revision
kono
parents:
diff changeset
467 return OK;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
468 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
469
bce86c4163a3 Initial revision
kono
parents:
diff changeset
470 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
471
bce86c4163a3 Initial revision
kono
parents:
diff changeset
472 #ifdef BSD42
bce86c4163a3 Initial revision
kono
parents:
diff changeset
473 /* ARGSUSED */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
474 #endif BSD42
bce86c4163a3 Initial revision
kono
parents:
diff changeset
475
bce86c4163a3 Initial revision
kono
parents:
diff changeset
476 static int pipeser (i)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
477 int i;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
478 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
479 #ifndef BSD42
bce86c4163a3 Initial revision
kono
parents:
diff changeset
480 (void) signal (i, SIG_IGN);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
481 #endif BSD42
bce86c4163a3 Initial revision
kono
parents:
diff changeset
482
bce86c4163a3 Initial revision
kono
parents:
diff changeset
483 pbroke = 1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
484 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
485
bce86c4163a3 Initial revision
kono
parents:
diff changeset
486 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
487
bce86c4163a3 Initial revision
kono
parents:
diff changeset
488 rcpy () {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
489 int i;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
490 char buffer[BUFSIZ],
bce86c4163a3 Initial revision
kono
parents:
diff changeset
491 tmpfil[BUFSIZ];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
492 FILE * fp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
493
bce86c4163a3 Initial revision
kono
parents:
diff changeset
494 (void) strcpy (tmpfil, "/tmp/rmailXXXXXX");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
495 (void) unlink (mktemp (tmpfil));
bce86c4163a3 Initial revision
kono
parents:
diff changeset
496 if ((pipef = fdopen (creat (tmpfil, Tmpmode), "w")) == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
497 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
498
bce86c4163a3 Initial revision
kono
parents:
diff changeset
499 fprintf (pipef, "Date: %s\nFrom: %s\n", dtimenow (), Mailsys);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
500 fprintf (pipef, "To: %s\n", usrfrm);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
501 fprintf (pipef, "\nProblems sending mail:\n\n");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
502 i = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
503 if ((fp = fopen (Errtmp, "r")) != NULL) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
504 while (fgets (buffer, sizeof buffer, fp) != NULL) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
505 if (ferror (pipef))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
506 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
507 fputs (buffer, pipef);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
508 i++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
509 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
510 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
511 if (i == 0)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
512 fprintf (pipef, "\tunknown problem\n");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
513 for (i = 0; oopsmessage[i]; i++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
514 fprintf (pipef, oopsmessage[i], Overseer);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
515 fputs (rtnbegin, pipef);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
516
bce86c4163a3 Initial revision
kono
parents:
diff changeset
517 rewind (fromf);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
518 (void) txtcpy (fromf, pipef);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
519 rewind (msgf);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
520 (void) txtcpy (msgf, pipef);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
521
bce86c4163a3 Initial revision
kono
parents:
diff changeset
522 fputs (rtnend, pipef);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
523 (void) fclose (pipef);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
524
bce86c4163a3 Initial revision
kono
parents:
diff changeset
525 (void) xpost (usrfrm, tmpfil);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
526 (void) unlink (tmpfil);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
527 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
528
bce86c4163a3 Initial revision
kono
parents:
diff changeset
529 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
530
bce86c4163a3 Initial revision
kono
parents:
diff changeset
531 zcpy () {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
532 int i;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
533 char buffer[BUFSIZ],
bce86c4163a3 Initial revision
kono
parents:
diff changeset
534 tmpfil[BUFSIZ];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
535 FILE * fp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
536
bce86c4163a3 Initial revision
kono
parents:
diff changeset
537 (void) strcpy (tmpfil, "/tmp/rmailXXXXXX");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
538 (void) unlink (mktemp (tmpfil));
bce86c4163a3 Initial revision
kono
parents:
diff changeset
539 if ((pipef = fdopen (creat (tmpfil, Tmpmode), "w")) == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
540 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
541
bce86c4163a3 Initial revision
kono
parents:
diff changeset
542 fprintf (pipef, "Date: %s\nFrom: %s\n", dtimenow (), Mailsys);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
543 fprintf (pipef, "To: %s\n", Mailsys);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
544 fprintf (pipef, "\nProblems sending mail for %s (aka %s):\n\n",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
545 from, usrfrm);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
546
bce86c4163a3 Initial revision
kono
parents:
diff changeset
547 i = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
548 if ((fp = fopen (Errtmp, "r")) != NULL) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
549 while (fgets (buffer, sizeof buffer, fp) != NULL) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
550 if (ferror (pipef))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
551 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
552 fputs (buffer, pipef);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
553 i = 1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
554 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
555 (void) fclose (fp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
556 if (i == 0)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
557 fprintf (pipef, "\tunknown problem\n");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
558 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
559 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
560 fprintf (pipef, "\tunable to open %s\n", Errtmp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
561 (void) fclose (pipef);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
562
bce86c4163a3 Initial revision
kono
parents:
diff changeset
563 (void) xpost (Mailsys, tmpfil);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
564 (void) unlink (tmpfil);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
565 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
566
bce86c4163a3 Initial revision
kono
parents:
diff changeset
567 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
568
bce86c4163a3 Initial revision
kono
parents:
diff changeset
569 filter () {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
570 int i,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
571 fd,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
572 td;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
573 char tmpfil[BUFSIZ],
bce86c4163a3 Initial revision
kono
parents:
diff changeset
574 mmdfil[BUFSIZ];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
575 FILE * out;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
576
bce86c4163a3 Initial revision
kono
parents:
diff changeset
577 (void) strcpy (tmpfil, "/tmp/rmailXXXXXX");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
578 (void) unlink (mktemp (tmpfil));
bce86c4163a3 Initial revision
kono
parents:
diff changeset
579 if ((fd = creat (tmpfil, Tmpmode)) == NOTOK)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
580 return NOTOK;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
581 (void) close (fd);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
582 if ((fd = open (tmpfil, 2)) == NOTOK)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
583 return NOTOK;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
584 if ((out = fdopen (fd, "w")) == NULL) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
585 (void) close (fd);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
586 return NOTOK;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
587 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
588 if ((td = dup (fd)) == NOTOK) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
589 (void) close (fd);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
590 return NOTOK;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
591 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
592
bce86c4163a3 Initial revision
kono
parents:
diff changeset
593 fprintf (out, "From %s %s\n", from, date);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
594 if (txtcpy (msgf, out) == NOTOK) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
595 (void) close (fd);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
596 (void) close (td);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
597 return NOTOK;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
598 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
599 (void) fclose (out);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
600 (void) lseek (td, (off_t)0, 0);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
601
bce86c4163a3 Initial revision
kono
parents:
diff changeset
602 (void) strcpy (mmdfil, "/tmp/mmdfXXXXXX");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
603 (void) unlink (mktemp (mmdfil));
bce86c4163a3 Initial revision
kono
parents:
diff changeset
604 if ((fd = creat (mmdfil, Tmpmode)) == NOTOK) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
605 (void) close (td);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
606 (void) unlink (tmpfil);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
607 return NOTOK;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
608 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
609 if ((fd = open (mmdfil, 2)) == NOTOK) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
610 (void) close (td);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
611 (void) unlink (tmpfil);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
612 return NOTOK;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
613 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
614
bce86c4163a3 Initial revision
kono
parents:
diff changeset
615 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
616
bce86c4163a3 Initial revision
kono
parents:
diff changeset
617 switch (i = uucp2mmdf (td, fd, TRUE)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
618 case OK:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
619 (void) strcpy (mmdf, mmdfil);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
620 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
621
bce86c4163a3 Initial revision
kono
parents:
diff changeset
622 default:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
623 mmdf[0] = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
624 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
625 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
626 (void) close (td);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
627 (void) unlink (tmpfil);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
628 (void) close (fd);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
629
bce86c4163a3 Initial revision
kono
parents:
diff changeset
630 return (i != OK ? NOTOK : OK);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
631 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
632
bce86c4163a3 Initial revision
kono
parents:
diff changeset
633 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
634
bce86c4163a3 Initial revision
kono
parents:
diff changeset
635 get_mmdf_addr (addr, to)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
636 char *addr,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
637 *to;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
638 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
639 struct adrx *adrxp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
640
bce86c4163a3 Initial revision
kono
parents:
diff changeset
641 *to = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
642 if ((adrxp = seekadrx (addr)) == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
643 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
644
bce86c4163a3 Initial revision
kono
parents:
diff changeset
645 addr_convert (adrxp, to, TRUE);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
646 while (seekadrx (NULLCP))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
647 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
648 }