#define MFDEBUG /* temporarily */
static char Id
[] = "@(#)$Id: qu2uu_send.c,v 1.2 1993/08/25 17:32:12 jromine Exp $";
/* qu2uu_send.c - manager for qu --> uu */
extern struct ll_struct
*logptr
;
struct rp_construct rp_aend
= { /* end of address list */
'u', 'u', 'c', 'p', ' ', 'e', 'n', 'd', ' ', 'o', 'f', ' ',
'a', 'd', 'd', 'r', ' ', 'l', 'i', 's', 't', NULL
struct rp_construct rp_bhost
= {/* no such host */
'b', 'a', 'd', ' ', 'h', 'o', 's', 't', ' ', 'n', 'a', 'm', 'e', NULL
struct rp_construct rp_err
= { /* error, you lose */
'u', 'n', 'k', 'n', 'o', 'w', 'n', ' ', 'e', 'r', 'r', 'o', 'r', NULL
char *index (), *strdup ();
ll_log (logptr
, LLOGBTR
, "qu2uu_send ()");
if (rp_isbad (result
= qu_pkinit ()))
if (rp_isbad (result
= uu_sbinit ()))
while (rp_gval ((result
= qu_rinit (info
, sender
))) == RP_OK
) {
ll_log (logptr
, LLOGGEN
, "info=%s sender=%s", info
, sender
);
if (rp_isbad (result
= qu2uu_each (sender
)))
if (rp_gval (result
) != RP_DONE
) {
ll_log (logptr
, LLOGTMP
, "not DONE [%s]", rp_valstr (result
));
ll_log (logptr
, LLOGBTR
, "qu2uu_each(sender='%s')", sender
);
mf_rinit (sender
, qu_fileno ());
if (rp_isbad (result
= qu_radr (host
, adr
))) {
if (rp_gval (result
) == RP_DONE
) {
qu_wrply ((RP_Buf
*) & rp_aend
, rp_conlen (rp_aend
));
switch (replyval
.rp_val
= uu_wtadr (host
, adr
)) {
replyval
.rp_val
= uu_txtcpy ();
ll_log (logptr
, LLOGFAT
, "host (%s) not in table", host
);
blt (&rp_bhost
, (char *) & replyval
, sizeof rp_bhost
);
"unknown return from uu_wtadr() [%s]",
rp_valstr (replyval
.rp_val
));
blt (&rp_err
, (char *) & replyval
, sizeof rp_err
);
if (replyval
.rp_val
== RP_MOK
)
switch (replyval
.rp_val
= uu_wttend ()) {
replyval
.rp_line
[0] = NULL
;
ll_log (logptr
, LLOGFAT
, "host (%s) not in table", host
);
blt (&rp_bhost
, (char *) & replyval
, sizeof rp_bhost
);
replyval
.rp_val
= RP_USER
;
"unknown return from uu_wttend() [%s]",
rp_valstr (replyval
.rp_val
));
blt (&rp_err
, (char *) & replyval
, sizeof rp_err
);
(sizeof replyval
.rp_val
) + strlen (replyval
.rp_line
));
/* ******************** (mf_) MAIL-FILTERING HANDLING ******************** */
static char mf_from
[BUFSIZ
];
if ((mf_fd
= mf_get_msg (fd
)) == NOTOK
) {
sender
= adrxp
-> err
? addr
: lexequ (adrxp
-> host
, LocalName ())
|| lexequ (adrxp
-> host
, SystemName ()) ? adrxp
-> mbox
: sprintf (buffer
, "%s@%s", adrxp
-> mbox
, adrxp
-> host
);
sender
= strdup (sender
);
sprintf (mf_from
, "From %s %.24s remote from %s\n",
sender
, ctime (&timenow
), SystemName ());
lseek (mf_fd
, (off_t
) pos
, 0);
int mf_rtxt (buffer
, len
)
strcpy (buffer
, mf_from
);
buffer
[*len
= strlen (mf_from
)] = NULL
;
return qu_rtxt (buffer
, len
);
switch (*len
= read (mf_fd
, buffer
, BUFSIZE
)) {
static int mf_get_msg (md
)
if ((qd
= dup (md
)) == NOTOK
)
strcpy (tmpfil
, "/tmp/qu2uuXXXXXX");
unlink (mktemp (tmpfil
));
if ((fd
= creat (tmpfil
, 0600)) == NOTOK
) {
if ((fd
= open (tmpfil
, 2)) == NOTOK
) {
if ((i
= mmdf_to_uucp (qd
, fd
, TRUE
)) != OK
) {
sprintf (buffer
, "ch_uucp(%d) filtering for %s failed (%d)\n",
getpid (), qu_msgfile
, i
);
if (ml_1adr (NO
, NO
, sitesignature
, "MF Failure", supportaddr
)
if ((fd
= dup (md
)) == NOTOK
)
ml_txt ("unable to dup() descriptor for message copy\n");
if ((fp
= fdopen (fd
, "r")) == NULL
) {
ml_txt ("unable to fdopen() descriptor for message copy\n");
ml_txt ("\n --Message Follows--\n");
if (cp
= index (buffer
, '\n'))
ll_log (logptr
, LLOGFAT
, "Unable to post failure notice");
ll_log (logptr
, LLOGFAT
, "info: %s", buffer
);