1 #define MFDEBUG /* temporarily */
3 static char Id[] = "@(#)$Id: qu2uu_send.c,v 1.2 1993/08/25 17:32:12 jromine Exp $";
6 /* qu2uu_send.c - manager for qu --> uu */
13 extern char *qu_msgfile,
17 extern struct ll_struct *logptr;
20 struct rp_construct rp_aend = { /* end of address list */
22 'u', 'u', 'c', 'p', ' ', 'e', 'n', 'd', ' ', 'o', 'f', ' ',
23 'a', 'd', 'd', 'r', ' ', 'l', 'i', 's', 't', NULL
26 struct rp_construct rp_bhost = {/* no such host */
28 'b', 'a', 'd', ' ', 'h', 'o', 's', 't', ' ', 'n', 'a', 'm', 'e', NULL
31 struct rp_construct rp_err = { /* error, you lose */
33 'u', 'n', 'k', 'n', 'o', 'w', 'n', ' ', 'e', 'r', 'r', 'o', 'r', NULL
37 char *index (), *strdup ();
47 ll_log (logptr, LLOGBTR, "qu2uu_send ()");
50 if (rp_isbad (result = qu_pkinit ()))
52 if (rp_isbad (result = uu_sbinit ()))
55 while (rp_gval ((result = qu_rinit (info, sender))) == RP_OK) {
57 ll_log (logptr, LLOGGEN, "info=%s sender=%s", info, sender);
59 if (rp_isbad (result = qu2uu_each (sender)))
63 if (rp_gval (result) != RP_DONE) {
64 ll_log (logptr, LLOGTMP, "not DONE [%s]", rp_valstr (result));
85 ll_log (logptr, LLOGBTR, "qu2uu_each(sender='%s')", sender);
88 mf_rinit (sender, qu_fileno ());
94 if (rp_isbad (result = qu_radr (host, adr))) {
98 if (rp_gval (result) == RP_DONE) {
99 qu_wrply ((RP_Buf *) & rp_aend, rp_conlen (rp_aend));
104 switch (replyval.rp_val = uu_wtadr (host, adr)) {
107 replyval.rp_val = uu_txtcpy ();
111 ll_log (logptr, LLOGFAT, "host (%s) not in table", host);
112 blt (&rp_bhost, (char *) & replyval, sizeof rp_bhost);
116 ll_log (logptr, LLOGFAT,
117 "unknown return from uu_wtadr() [%s]",
118 rp_valstr (replyval.rp_val));
119 blt (&rp_err, (char *) & replyval, sizeof rp_err);
120 replyval.rp_val = RP_NO;
123 if (replyval.rp_val == RP_MOK)
124 switch (replyval.rp_val = uu_wttend ()) {
127 replyval.rp_line[0] = NULL;
132 ll_log (logptr, LLOGFAT, "host (%s) not in table", host);
133 blt (&rp_bhost, (char *) & replyval, sizeof rp_bhost);
134 replyval.rp_val = RP_USER;
138 ll_log (logptr, LLOGFAT,
139 "unknown return from uu_wttend() [%s]",
140 rp_valstr (replyval.rp_val));
141 blt (&rp_err, (char *) & replyval, sizeof rp_err);
146 (sizeof replyval.rp_val) + strlen (replyval.rp_line));
152 /* ******************** (mf_) MAIL-FILTERING HANDLING ******************** */
159 static char mf_from[BUFSIZ];
163 int mf_rinit (addr, fd)
174 if ((mf_fd = mf_get_msg (fd)) == NOTOK) {
175 adrxp = getadrx (addr);
176 sender = adrxp -> err ? addr
177 : lexequ (adrxp -> host, LocalName ())
178 || lexequ (adrxp -> host, SystemName ()) ? adrxp -> mbox
179 : sprintf (buffer, "%s@%s", adrxp -> mbox, adrxp -> host);
180 while (getadrx (NULL))
182 sender = strdup (sender);
184 sprintf (mf_from, "From %s %.24s remote from %s\n",
185 sender, ctime (&timenow), SystemName ());
210 lseek (mf_fd, (off_t) pos, 0);
214 int mf_rtxt (buffer, len)
220 strcpy (buffer, mf_from);
221 buffer[*len = strlen (mf_from)] = NULL;
226 return qu_rtxt (buffer, len);
228 switch (*len = read (mf_fd, buffer, BUFSIZE)) {
243 static int mf_get_msg (md)
255 lseek (md, (off_t)0, 0);
256 if ((qd = dup (md)) == NOTOK)
259 strcpy (tmpfil, "/tmp/qu2uuXXXXXX");
260 unlink (mktemp (tmpfil));
261 if ((fd = creat (tmpfil, 0600)) == NOTOK) {
266 if ((fd = open (tmpfil, 2)) == NOTOK) {
272 if ((i = mmdf_to_uucp (qd, fd, TRUE)) != OK) {
275 sprintf (buffer, "ch_uucp(%d) filtering for %s failed (%d)\n",
276 getpid (), qu_msgfile, i);
277 if (ml_1adr (NO, NO, sitesignature, "MF Failure", supportaddr)
282 lseek (md, (off_t)0, 0);
283 if ((fd = dup (md)) == NOTOK)
284 ml_txt ("unable to dup() descriptor for message copy\n");
286 if ((fp = fdopen (fd, "r")) == NULL) {
287 ml_txt ("unable to fdopen() descriptor for message copy\n");
291 ml_txt ("\n --Message Follows--\n");
296 if (ml_end (OK) != OK) {
300 if (cp = index (buffer, '\n'))
302 ll_log (logptr, LLOGFAT, "Unable to post failure notice");
303 ll_log (logptr, LLOGFAT, "info: %s", buffer);