-#endif /* SMTPMTS */
-
-/*
- * MMDF routines
- */
-
-#ifdef MMDFMTS
-
-static void
-post (char *file, int bccque, int talk)
-{
- int fd, onex;
- int retval;
-#ifdef RP_NS
- int len;
- struct rp_bufstruct reply;
-#endif /* RP_NS */
-
- onex = !(msgflags & MINV) || bccque;
- if (verbose) {
- if (msgflags & MINV)
- printf (" -- Posting for %s Recipients --\n",
- bccque ? "Blind" : "Sighted");
- else
- printf (" -- Posting for All Recipients --\n");
- }
-
- sigon ();
-
- if (rp_isbad (retval = mm_init ())
- || rp_isbad (retval = mm_sbinit ())
- || rp_isbad (retval = mm_winit (NULL, submitopts, from)))
- die (NULL, "problem initializing MMDF system [%s]",
- rp_valstr (retval));
-#ifdef RP_NS
- if (rp_isbad (retval = mm_rrply (&reply, &len)))
- die (NULL, "problem with sender address [%s]",
- rp_valstr (retval));
-#endif /* RP_NS */
-
- do_addresses (bccque, talk && verbose);
- if ((fd = open (file, O_RDONLY)) == NOTOK)
- die (file, "unable to re-open");
- do_text (file, fd);
- close (fd);
- fflush (stdout);
-
- mm_sbend ();
- mm_end (OK);
- sigoff ();
-
- if (verbose)
- if (msgflags & MINV)
- printf (" -- %s Recipient Copies Posted --\n",
- bccque ? "Blind" : "Sighted");
- else
- printf (" -- Recipient Copies Posted --\n");
- fflush (stdout);
-}
-
-
-/* Address Verification */
-
-static void
-verify_all_addresses (int talk)
-{
- int retval;
- struct mailname *lp;
-
-#ifdef RP_NS
- int len;
- struct rp_bufstruct reply;
-#endif /* RP_NS */
-
- sigon ();
-
- if (!whomsw || checksw) {
- if (rp_isbad (retval = mm_init ())
- || rp_isbad (retval = mm_sbinit ())
- || rp_isbad (retval = mm_winit (NULL, submitopts, from)))
- die (NULL, "problem initializing MMDF system [%s]",
- rp_valstr (retval));
-#ifdef RP_NS
- if (rp_isbad (retval = mm_rrply (&reply, &len)))
- die (NULL, "problem with sender address [%s]", rp_valstr (retval));
-#endif /* RP_NS */
- }
-
- if (talk && !whomsw)
- printf (" -- Address Verification --\n");
- if (talk && localaddrs.m_next)
- printf (" -- Local Recipients --\n");
- for (lp = localaddrs.m_next; lp; lp = lp->m_next)
- do_an_address (lp, talk);
-
- if (talk && uuaddrs.m_next)
- printf (" -- UUCP Recipients --\n");
- for (lp = uuaddrs.m_next; lp; lp = lp->m_next)
- do_an_address (lp, talk);
-
- if (talk && netaddrs.m_next)
- printf (" -- Network Recipients --\n");
- for (lp = netaddrs.m_next; lp; lp = lp->m_next)
- do_an_address (lp, talk);
-
- chkadr ();
- if (talk && !whomsw)
- printf (" -- Address Verification Successful --\n");
-
- if (!whomsw || checksw)
- mm_end (NOTOK);
-
- fflush (stdout);
- sigoff ();
-}
-
-
-static void
-do_an_address (struct mailname *lp, int talk)
-{
- int len, retval;
- char *mbox, *host, *text, *path;
- char addr[BUFSIZ];
- struct rp_bufstruct reply;
-
- switch (lp->m_type) {
- case LOCALHOST:
- mbox = lp->m_mbox;
- host = LocalName ();
- strncpy (addr, mbox, sizeof(addr));
- break;
-
- case UUCPHOST:
- fprintf (talk ? stdout : stderr, " %s!%s: %s\n",
- lp->m_host, lp->m_mbox, "not supported; UUCP address");
- unkadr++;
- fflush (stdout);
- return;
-
- default: /* let MMDF decide if the host is bad */
- mbox = lp->m_mbox;
- host = lp->m_host;
- snprintf (addr, sizeof(addr), "%s at %s", mbox, host);
- break;
- }
-
- if (talk)
- printf (" %s%s", addr, whomsw && lp->m_bcc ? "[BCC]" : "");
-
- if (whomsw && !checksw) {
- putchar ('\n');
- return;
- }
- if (talk)
- printf (": ");
- fflush (stdout);
-
-#ifdef MMDFII
- if (lp->m_path)
- path = concat (lp->m_path, mbox, "@", host, NULL);
- else
-#endif /* MMDFII */
- path = NULL;
- if (rp_isbad (retval = mm_wadr (path ? NULL : host, path ? path : mbox))
- || rp_isbad (retval = mm_rrply (&reply, &len)))
- die (NULL, "problem submitting address [%s]", rp_valstr (retval));
-
- switch (rp_gval (reply.rp_val)) {
- case RP_AOK:
- if (talk)
- printf ("address ok\n");
- fflush (stdout);
- return;
-
-#ifdef RP_DOK
- case RP_DOK:
- if (talk)
- printf ("nameserver timeout - queued for checking\n");
- fflush (stdout);
- return;
-#endif /* RP_DOK */
-
- case RP_NO:
- text = "you lose";
- break;
-
-#ifdef RP_NS
- case RP_NS:
- text = "temporary nameserver failure";
- break;
-
-#endif /* RP_NS */
-
- case RP_USER:
- case RP_NDEL:
- text = "not deliverable";
- break;
-
- case RP_AGN:
- text = "try again later";
- break;
-
- case RP_NOOP:
- text = "nothing done";
- break;
-
- default:
- if (!talk)
- fprintf (stderr, " %s: ", addr);
- text = "unexpected response";
- die (NULL, "%s;\n [%s] -- %s", text,
- rp_valstr (reply.rp_val), reply.rp_line);
- }
-
- if (!talk)
- fprintf (stderr, " %s: ", addr);
- fprintf (talk ? stdout : stderr, "%s;\n %s\n", text, reply.rp_line);
- unkadr++;
-
- fflush (stdout);
-}
-
-
-static void
-do_text (char *file, int fd)
-{
- int retval, state;
- char buf[BUFSIZ];
- struct rp_bufstruct reply;
-
- lseek (fd, (off_t) 0, SEEK_SET);
-
- while ((state = read (fd, buf, sizeof(buf))) > 0) {
- if (rp_isbad (mm_wtxt (buf, state)))
- die (NULL, "problem writing text [%s]\n", rp_valstr (retval));
- }
-
- if (state == NOTOK)
- die (file, "problem reading from");
-
- if (rp_isbad (retval = mm_wtend ()))
- die (NULL, "problem ending text [%s]\n", rp_valstr (retval));
-
- if (rp_isbad (retval = mm_rrply (&reply, &state)))
- die (NULL, "problem getting submission status [%s]\n",
- rp_valstr (retval));
-
- switch (rp_gval (reply.rp_val)) {
- case RP_OK:
- case RP_MOK:
- break;
-
- case RP_NO:
- die (NULL, "you lose; %s", reply.rp_line);
-
- case RP_NDEL:
- die (NULL, "no delivery occurred; %s", reply.rp_line);
-
- case RP_AGN:
- die (NULL, "try again later; %s", reply.rp_line);
-
- case RP_NOOP:
- die (NULL, "nothing done; %s", reply.rp_line);
-
- default:
- die (NULL, "unexpected response;\n\t[%s] -- %s",
- rp_valstr (reply.rp_val), reply.rp_line);
- }
-}
-
-#endif /* MMDFMTS */
-