在进行发送邮件验证时出现454 oops, unable to write pipe and I can't auth (#4.3.0)
但有时是没有问题的,可以验证成功。成功的机率大约在50%。
从网络上搜索处理办法:基本上都是每次都不能验证成功的例子,大多数是没有设置对 -u 和 -g 参数。但上述情况是没有解决方案的!
通过调试代码发现qmail-smtpd.c:authenticate函数中execvp(*childargs, childargs); 的*childargs为/bin/true
我的启动脚本如下:
${TCPSERVER} -v -H -R -l $HOSTNAME -x /etc/tcp.smtp.cdb -c 2048/
-u $QMAILDUID -g $QMAILDGID 0 smtp /
/var/qmail/bin/qmail-smtpd /home/vpopmail/bin/vchkpw /bin/true 2>&1 | /var/qmail/bin/splogger smtpd 3 &
发现vchkpw没有执行,没有启动用户验证的作用。
解决方法1:
变更启动脚本:
${TCPSERVER} -v -H -R -l $HOSTNAME -x /etc/tcp.smtp.cdb -c 2048/
-u $QMAILDUID -g $QMAILDGID 0 smtp /
/var/qmail/bin/qmail-smtpd $DOMAIN /home/vpopmail/bin/vchkpw /bin/true 2>&1 | /var/qmail/bin/splogger smtpd 3 &
解决方法2:
修改qmail-smtpd.c:main函数“childargs = argv + 2;”变更为“childargs = argv + 1;”
重新编译qmail-smtpd,并cp到执行目录