X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=uip%2Fpost.c;h=ef13279baa8ebe65ed3c53b9cc408dd2a709362e;hp=a866703c2871edcd093082547e3d4dde09047427;hb=cfc525a9b85207225cb4071d1d3b01e8d1db2424;hpb=df7b16cb148474b3b80dbf1e226e858cf1e47edb diff --git a/uip/post.c b/uip/post.c index a866703..ef13279 100644 --- a/uip/post.c +++ b/uip/post.c @@ -44,6 +44,12 @@ # 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 @@ -128,6 +134,12 @@ static struct swit switches[] = { { "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 } }; @@ -227,6 +239,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 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 */ @@ -517,6 +532,20 @@ main (int argc, char **argv) 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) @@ -1406,7 +1435,8 @@ 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)); @@ -1443,7 +1473,8 @@ verify_all_addresses (int talk) 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));