Tom Collins wrote:

> There's already a patch out there that I've been using for months now. 
> Here's a modified patch by John M. Simpson (jms) that works with Bill's
> toaster.  Once patched, just add "export REQUIRE_AUTH=0" to your
> qmail-smtpd run file, and "export REQUIRE_AUTH=1" to the run file for
> qmail-submission (or whatever you call qmail running on an alternate
> port for email clients to send).
> 
> Credit should go to jms for the patch -- according to his site, he wrote
> that code himself and it's not from another patch.  I emailed this to
> Bill late last year, but I don't know if he's rolled it into his big
> qmail patch yet.
> 
> --- qmail-smtpd-orig.c  2005-02-03 20:41:58.000000000 -0700
> +++ qmail-smtpd.c       2006-10-13 11:43:34.493957857 -0700
> @@ -54,6 +54,8 @@
> unsigned int databytes = 0;
> int timeout = 1200;
> unsigned int spfbehavior = 0;
> +unsigned int require_auth = 0;
> +int flagauth = 0;
> const char *protocol = "SMTP";
> @@ -127,6 +129,7 @@
> int err_authabrt() { out("501 auth exchange canceled (#5.0.0)\r\n");
> return -1; }
> int err_input() { out("501 malformed auth input (#5.5.4)\r\n"); return
> -1; }
> void err_authfail() { out("535 authentication failed (#5.7.1)\r\n"); }
> +int err_authfirst() { out("503 authentication required (#5.5.1)\r\n"); }
> int saferead(fd,buf,len) int fd; char *buf; int len;
> {
> @@ -241,6 +244,9 @@
>    x = env_get("SPFBEHAVIOR");
>    if (x) { scan_ulong(x,&u); spfbehavior = u; }
> +  x = env_get("REQUIRE_AUTH");
> +  if (x) { scan_ulong(x,&u); if (u>0) require_auth = 1; }
> +
>    if (control_readline(&spflocal,"control/spfrules") == -1) die_control();
>    if (spflocal.len && !stralloc_0(&spflocal)) die_nomem();
>    if (control_readline(&spfguess,"control/spfguess") == -1) die_control();
> @@ -496,6 +502,8 @@
> void smtp_mail(arg) char *arg;
> {
>    int r;
> +
> +  if (require_auth) if (!flagauth) { err_authfirst(); return; }
>    if (!addrparse(arg)) { err_syntax(); return; }
>    flagsize = 0;
>    mailfrom_parms(arg);
> @@ -762,7 +770,6 @@
> static stralloc slop = {0};     /* b64 challenge */
> #endif
> -int flagauth = 0;
> char **childargs;
> char ssauthbuf[512];
> substdio ssauth = SUBSTDIO_FDBUF(safewrite,3,ssauthbuf,sizeof(ssauthbuf));


Thanks for the reminder Tom.  I have not integrated it, nor have I
integrated tonino's chkuser 2.0.9.  But I did quit a busy client
recently, so I have more time these days, and will be getting through a
backlog of suggestions soon.

Thanks!

Bill

Reply via email to