projects
/
mmh
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
*** empty log message ***
[mmh]
/
uip
/
post.c
diff --git
a/uip/post.c
b/uip/post.c
index
d0d750c
..
aff49a0
100644
(file)
--- a/
uip/post.c
+++ b/
uip/post.c
@@
-3,6
+3,10
@@
* post.c -- enter messages into the mail transport system
*
* $Id$
* post.c -- enter messages into the mail transport system
*
* $Id$
+ *
+ * This code is Copyright (c) 2002, by the authors of nmh. See the
+ * COPYRIGHT file in the root directory of the nmh distribution for
+ * complete copyright information.
*/
#include <h/mh.h>
*/
#include <h/mh.h>
@@
-14,7
+18,7
@@
#include <h/mime.h>
#include <h/tws.h>
#include <h/mime.h>
#include <h/tws.h>
-#include <zotnet/mts/mts.h>
+#include <h/mts.h>
#include <errno.h>
#include <setjmp.h>
#include <errno.h>
#include <setjmp.h>
@@
-36,15
+40,7
@@
# include <mts/mmdf/mmdf.h>
#endif
# include <mts/mmdf/mmdf.h>
#endif
-/*
- * Currently smtp and sendmail use
- * the same interface for posting.
- */
#ifdef SMTPMTS
#ifdef SMTPMTS
-# define SENDMTS
-#endif
-
-#ifdef SENDMTS
# include <mts/smtp/smtp.h>
#endif
# include <mts/smtp/smtp.h>
#endif
@@
-52,6
+48,12
@@
# define uptolow(c) ((isalpha(c) && isupper (c)) ? tolower (c) : (c))
#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
#define FCCS 10 /* max number of fccs allowed */
/* In the following array of structures, the numeric second field of the
@@
-136,6
+138,12
@@
static struct swit switches[] = {
{ "partno", -6 },
#define QUEUESW 36
{ "queued", -6 },
{ "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 }
};
{ NULL, 0 }
};
@@
-235,6
+243,9
@@
static int whomsw = 0; /* we are whom not post */
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 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 unsigned msgflags = 0; /* what we've seen */
@@
-267,14
+278,14
@@
static char *submitmode = "m"; /* deliver to mailbox only */
static char submitopts[6] = "vl"; /* initial options for submit */
#endif /* MMDFMTS */
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;
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";
static char prefix[] = "----- =_aaaaaaaaaa";
@@
-475,7
+486,7
@@
main (int argc, char **argv)
adios (NULL, "missing argument to %s", argp[-2]);
continue;
adios (NULL, "missing argument to %s", argp[-2]);
continue;
-#ifndef SENDMTS
+#ifndef SMTPMTS
case CLIESW:
case SERVSW:
if (!(cp = *argp++) || *cp == '-')
case CLIESW:
case SERVSW:
if (!(cp = *argp++) || *cp == '-')
@@
-484,7
+495,7
@@
main (int argc, char **argv)
case SNOOPSW:
continue;
case SNOOPSW:
continue;
-#else /* SENDMTS */
+#else /* SMTPMTS */
case MAILSW:
smtpmode = S_MAIL;
continue;
case MAILSW:
smtpmode = S_MAIL;
continue;
@@
-508,7
+519,7
@@
main (int argc, char **argv)
case SNOOPSW:
snoop++;
continue;
case SNOOPSW:
snoop++;
continue;
-#endif /* SENDMTS */
+#endif /* SMTPMTS */
case FILLSW:
if (!(fill_in = *argp++) || *fill_in == '-')
case FILLSW:
if (!(fill_in = *argp++) || *fill_in == '-')
@@
-525,6
+536,20
@@
main (int argc, char **argv)
case QUEUESW:
queued++;
continue;
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)
}
}
if (msg)
@@
-1378,10
+1403,10
@@
do_addresses (int bccque, int talk)
die (NULL, "problem ending addresses [%s]\n", rp_valstr (retval));
#endif /* MMDFMTS */
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));
if (rp_isbad (retval = sm_waend ()))
die (NULL, "problem ending addresses; %s", rp_string (retval));
-#endif /* SENDMTS */
+#endif /* SMTPMTS */
}
}
@@
-1394,7
+1419,7
@@
do_addresses (int bccque, int talk)
* SENDMAIL/SMTP routines
*/
* SENDMAIL/SMTP routines
*/
-#ifdef SENDMTS
+#ifdef SMTPMTS
static void
post (char *file, int bccque, int talk)
static void
post (char *file, int bccque, int talk)
@@
-1414,7
+1439,8
@@
post (char *file, int bccque, int talk)
sigon ();
if (rp_isbad (retval = sm_init (clientsw, serversw, watch, verbose,
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));
|| rp_isbad (retval = sm_winit (smtpmode, from)))
die (NULL, "problem initializing server; %s", rp_string (retval));
@@
-1451,7
+1477,8
@@
verify_all_addresses (int talk)
sigon ();
if (!whomsw || checksw)
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, watch, verbose, snoop, 0,
+ queued, sasl, saslmech, user))
|| rp_isbad (retval = sm_winit (smtpmode, from)))
die (NULL, "problem initializing server; %s", rp_string (retval));
|| rp_isbad (retval = sm_winit (smtpmode, from)))
die (NULL, "problem initializing server; %s", rp_string (retval));
@@
-1577,7
+1604,7
@@
do_text (char *file, int fd)
}
}
}
}
-#endif /* SENDMTS */
+#endif /* SMTPMTS */
/*
* MMDF routines
/*
* MMDF routines
@@
-1870,10
+1897,10
@@
sigser (int i)
mm_end (NOTOK);
#endif /* MMDFMTS */
mm_end (NOTOK);
#endif /* MMDFMTS */
-#ifdef SENDMTS
+#ifdef SMTPMTS
if (!whomsw || checksw)
sm_end (NOTOK);
if (!whomsw || checksw)
sm_end (NOTOK);
-#endif /* SENDMTS */
+#endif /* SMTPMTS */
done (1);
}
done (1);
}
@@
-1994,10
+2021,10
@@
die (char *what, char *fmt, ...)
mm_end (NOTOK);
#endif /* MMDFMTS */
mm_end (NOTOK);
#endif /* MMDFMTS */
-#ifdef SENDMTS
+#ifdef SMTPMTS
if (!whomsw || checksw)
sm_end (NOTOK);
if (!whomsw || checksw)
sm_end (NOTOK);
-#endif /* SENDMTS */
+#endif /* SMTPMTS */
va_start(ap, fmt);
advertise (what, NULL, fmt, ap);
va_start(ap, fmt);
advertise (what, NULL, fmt, ap);