# include <mts/mmdf/mmdf.h>
#endif
-/*
- * Currently smtp and sendmail use
- * the same interface for posting.
- */
#ifdef SMTPMTS
-# define SENDMTS
-#endif
-
-#ifdef SENDMTS
# include <mts/smtp/smtp.h>
#endif
# define uptolow(c) ((isalpha(c) && isupper (c)) ? tolower (c) : (c))
#endif
+#ifndef CYRUS_SASL
+# define SASLminc(a) (a)
+#else /* CYRUS_SASL */
+# define SASLminc(a) 0
+#endif /* CYRUS_SASL */
+
#define FCCS 10 /* max number of fccs allowed */
/* In the following array of structures, the numeric second field of the
{ "partno", -6 },
#define QUEUESW 36
{ "queued", -6 },
+#define SASLSW 37
+ { "sasl", SASLminc(-4) },
+#define SASLMECHSW 38
+ { "saslmech", SASLminc(-5) },
+#define USERSW 39
+ { "user", SASLminc(-4) },
{ NULL, 0 }
};
static int checksw = 0; /* whom -check */
static int linepos=0; /* putadr()'s position on the line */
static int nameoutput=0; /* putadr() has output header name */
+static int sasl=0; /* Use SASL auth for SMTP */
+static char *saslmech=NULL; /* Force use of particular SASL mech */
+static char *user=NULL; /* Authenticate as this user */
static unsigned msgflags = 0; /* what we've seen */
static char submitopts[6] = "vl"; /* initial options for submit */
#endif /* MMDFMTS */
-#ifdef SENDMTS
+#ifdef SMTPMTS
static int snoop = 0;
static int smtpmode = S_MAIL;
static char *clientsw = NULL;
static char *serversw = NULL;
extern struct smtp sm_reply;
-#endif /* SENDMTS */
+#endif /* SMTPMTS */
static char prefix[] = "----- =_aaaaaaaaaa";
adios (NULL, "missing argument to %s", argp[-2]);
continue;
-#ifndef SENDMTS
+#ifndef SMTPMTS
case CLIESW:
case SERVSW:
if (!(cp = *argp++) || *cp == '-')
case SNOOPSW:
continue;
-#else /* SENDMTS */
+#else /* SMTPMTS */
case MAILSW:
smtpmode = S_MAIL;
continue;
case SNOOPSW:
snoop++;
continue;
-#endif /* SENDMTS */
+#endif /* SMTPMTS */
case FILLSW:
if (!(fill_in = *argp++) || *fill_in == '-')
case QUEUESW:
queued++;
continue;
+
+ case SASLSW:
+ sasl++;
+ continue;
+
+ case SASLMECHSW:
+ if (!(saslmech = *argp++) || *saslmech == '-')
+ adios (NULL, "missing argument to %s", argp[-2]);
+ continue;
+
+ case USERSW:
+ if (!(user = *argp++) || *user == '-')
+ adios (NULL, "missing argument to %s", argp[-2]);
+ continue;
}
}
if (msg)
die (NULL, "problem ending addresses [%s]\n", rp_valstr (retval));
#endif /* MMDFMTS */
-#ifdef SENDMTS
+#ifdef SMTPMTS
if (rp_isbad (retval = sm_waend ()))
die (NULL, "problem ending addresses; %s", rp_string (retval));
-#endif /* SENDMTS */
+#endif /* SMTPMTS */
}
* SENDMAIL/SMTP routines
*/
-#ifdef SENDMTS
+#ifdef SMTPMTS
static void
post (char *file, int bccque, int talk)
sigon ();
if (rp_isbad (retval = sm_init (clientsw, serversw, watch, verbose,
- snoop, onex, queued))
+ snoop, onex, queued, sasl, saslmech,
+ user))
|| rp_isbad (retval = sm_winit (smtpmode, from)))
die (NULL, "problem initializing server; %s", rp_string (retval));
sigon ();
if (!whomsw || checksw)
- if (rp_isbad (retval = sm_init (clientsw, serversw, 0, 0, snoop, 0, 0))
+ if (rp_isbad (retval = sm_init (clientsw, serversw, 0, 0, snoop, 0,
+ 0, 0, 0, 0))
|| rp_isbad (retval = sm_winit (smtpmode, from)))
die (NULL, "problem initializing server; %s", rp_string (retval));
}
}
-#endif /* SENDMTS */
+#endif /* SMTPMTS */
/*
* MMDF routines
mm_end (NOTOK);
#endif /* MMDFMTS */
-#ifdef SENDMTS
+#ifdef SMTPMTS
if (!whomsw || checksw)
sm_end (NOTOK);
-#endif /* SENDMTS */
+#endif /* SMTPMTS */
done (1);
}
mm_end (NOTOK);
#endif /* MMDFMTS */
-#ifdef SENDMTS
+#ifdef SMTPMTS
if (!whomsw || checksw)
sm_end (NOTOK);
-#endif /* SENDMTS */
+#endif /* SMTPMTS */
va_start(ap, fmt);
advertise (what, NULL, fmt, ap);