--- qmail-smtpd.c.orig Mon Jan 23 13:22:14 2006 +++ qmail-smtpd.c Mon Jan 23 13:17:32 2006 @@ -827,20 +827,22 @@ int child; int wstat; int pi[2]; + int stderrcopy; if (!stralloc_0(&user)) die_nomem(); if (!stralloc_0(&pass)) die_nomem(); if (!stralloc_0(&resp)) die_nomem(); + stderrcopy = dup(2); + if (stderrcopy == -1) return err_pipe(); if (fd_copy(2,1) == -1) return err_pipe(); - close(3); if (pipe(pi) == -1) return err_pipe(); - if (pi[0] != 3) return err_pipe(); switch(child = fork()) { case -1: return err_fork(); case 0: close(pi[1]); + if (0 > fd_copy(3,pi[0])) _exit(1); sig_pipedefault(); execvp(*childargs, childargs); _exit(1); @@ -854,6 +856,8 @@ if (substdio_flush(&ssup) == -1) return err_write(); close(pi[1]); + dup2(stderrcopy, 2); + close(stderrcopy); byte_zero(pass.s,pass.len); byte_zero(upbuf,sizeof upbuf); if (wait_pid(&wstat,child) == -1) return err_child();