diff -ruN qmail-1.03-factory/qmail-smtpd.c qmail-1.03-authset/qmail-smtpd.c --- qmail-1.03-factory/qmail-smtpd.c 1998-06-15 06:53:16.000000000 -0400 +++ qmail-1.03-authset/qmail-smtpd.c 2005-09-01 01:31:47.000000000 -0400 @@ -365,6 +365,48 @@ out("\r\n"); } +void auth_fixenv() +{ + int i,f; + char *envi,*eq; + stralloc work = {0}; + + do + { + f=0; + for (i=0;envi=environ[i];++i) + { + if (!str_diffn("AUTH_SET_",envi,9)) + { + stralloc_copys(&work,envi); + stralloc_0(&work); + eq = env_findeq(work.s); + *eq=0; + env_unset(work.s); + if(authd) + { + env_unset(work.s+9); + *eq='='; + env_put(work.s+9); + } + f=1; + break; + } + if (!str_diffn("AUTH_UNSET_",envi,11)) + { + stralloc_copys(&work,envi); + stralloc_0(&work); + eq = env_findeq(work.s); + *eq=0; + env_unset(work.s); + if(authd) env_unset(work.s+11); + f=1; + break; + } + } + } while (f); +} + void smtp_data() { int hops; unsigned long qp; @@ -374,6 +416,7 @@ if (!rcptto.len) { err_wantrcpt(); return; } seenmail = 0; if (databytes) bytestooverflow = databytes + 1; + auth_fixenv(); if (qmail_open(&qqt) == -1) { err_qqt(); return; } qp = qmail_qp(&qqt); out("354 go ahead\r\n");