diff -udr spamass-milter-0.3.1/spamass-milter.1.in spamass-milter-0.3.1.patched/spamass-milter.1.in --- spamass-milter-0.3.1/spamass-milter.1.in 2004-03-18 18:37:08.000000000 +0000 +++ spamass-milter-0.3.1.patched/spamass-milter.1.in 2010-01-06 14:36:33.000000000 +0000 @@ -38,6 +38,8 @@ This may cause messages to bounce, queue, or be passed through unmiltered, depending on the parameters in .Nm sendmail Ns 's .cf file. +.It Fl A +Pass messages from clients using SMTP AUTH unfiltered. Use this flag if you don't want to filter outgoing mail and your users authenticate using SMTP AUTH. .It Fl b Ar spamaddress Redirects tagged spam to the specified email address. All envelope recipients are removed, and inserted into the message as diff -udr spamass-milter-0.3.1/spamass-milter.cpp spamass-milter-0.3.1.patched/spamass-milter.cpp --- spamass-milter-0.3.1/spamass-milter.cpp 2006-03-23 21:41:36.000000000 +0000 +++ spamass-milter-0.3.1.patched/spamass-milter.cpp 2010-01-06 15:36:59.000000000 +0000 @@ -170,6 +170,7 @@ bool flag_full_email = false; /* pass full email address to spamc */ bool flag_expand = false; /* alias/virtusertable expansion */ bool warnedmacro = false; /* have we logged that we couldn't fetch a macro? */ +bool flag_auth = false; /* pass mail from AUTHed users without scanning? */ #if defined(__FreeBSD__) /* popen bug - see PR bin/50770 */ static pthread_mutex_t popen_mutex = PTHREAD_MUTEX_INITIALIZER; @@ -181,7 +182,7 @@ main(int argc, char* argv[]) { int c, err = 0; - const char *args = "fd:mMp:P:r:u:D:i:b:B:e:x"; + const char *args = "Afd:mMp:P:r:u:D:i:b:B:e:x"; char *sock = NULL; bool dofork = false; char *pidfilename = NULL; @@ -236,6 +237,9 @@ flag_sniffuser = true; defaultuser = strdup(optarg); break; + case 'A': + flag_auth = true; + break; case 'b': case 'B': if (flag_bucket) @@ -279,11 +283,12 @@ if (!sock || err) { cout << PACKAGE_NAME << " - Version " << PACKAGE_VERSION << endl; cout << "SpamAssassin Sendmail Milter Plugin" << endl; - cout << "Usage: spamass-milter -p socket [-b|-B bucket] [-d xx[,yy...]] [-D host]" << endl; + cout << "Usage: spamass-milter -p socket [-A] [-b|-B bucket] [-d xx[,yy...]] [-D host]" << endl; cout << " [-e defaultdomain] [-f] [-i networks] [-m] [-M]" << endl; cout << " [-P pidfile] [-r nn] [-u defaultuser] [-x]" << endl; cout << " [-- spamc args ]" << endl; cout << " -p socket: path to create socket" << endl; + cout << " -A: pass mail from clients using SMTP AUTH without scanning." << endl; cout << " -b bucket: redirect spam to this mail address. The orignal" << endl; cout << " recipient(s) will not receive anything." << endl; cout << " -B bucket: add this mail address as a BCC recipient of spam." << endl; @@ -783,6 +788,17 @@ } /* debug(D_ALWAYS, "ZZZ got private context %p", sctx); */ + // abort processing if mail is submitted via SMTP AUTH + // and the appropriate flag is set + if (flag_auth) + { + if (smfi_getsymval(ctx, "{auth_authen}")) + { + debug(D_ALWAYS, "Client used SMTP AUTH, passing mail without assassination"); + return SMFIS_ACCEPT; + } + } + debug(D_FUNC, "mlfi_envfrom: enter"); try { // launch new SpamAssassin