Ключевые слова:patch, ssmtp, stunnel, smtp, (найти похожие документы)
From: Дмитрий Владимиров <dima@vladimirov.org.>
Newsgroups: email
Date: Mon, 12 Oct 2008 17:02:14 +0000 (UTC)
Subject: Устранение ошибки "Unknown client EHLO" при использовании SSMTP в stunnel
В некоторых случаях возникает проблема отправки почты при использовании
ssmtp stunnel.
Заключается она в недостаточном времени ожидания соединения клиента с сокетом.
Данный патч устраняет проблему. В область глобальных переменных файла конфигурации
добавлена переменная smtp_wait, значение по умолчанию 200, диапазон допустимых значений
200-900. Если в логах stunnel есть запись "Unknown client EHLO", значение переменной
следует увеличить (в моем случае помогло значение 450).
Загрузить патч можно по ссылке: vladimirov.org/stunnel_smtp.patch
Код патча:
*** src/options.c 2008-06-22 01:18:23.000000000 +0400
--- src/options.c 2008-10-01 11:06:26.000000000 +0400
***************
*** 131,136 ****
--- 131,156 ----
break;
}
+ /* smtp_wait */
+ switch(cmd) {
+ case CMD_INIT:
+ options.smtp_wait=200; /* Set initial value inherited from maintainer */
+ break;
+ case CMD_EXEC:
+ if(strcasecmp(opt, "smtp_wait"))
+ break;
+ options.smtp_wait=atoi(arg);
+ if((options.smtp_wait < 200) || (options.smtp_wait > 900))
+ return "Value of smtp_wait should be between 200 and 900";
+ return NULL;
+ case CMD_DEFAULT:
+ break;
+ case CMD_HELP:
+ s_log(LOG_RAW, "%-15s = the value should be between 200 and 900",
+ "smtp_wait");
+ break;
+ }
+
/* debug */
switch(cmd) {
case CMD_INIT:
*** src/protocol.c 2008-03-26 22:07:51.000000000 +0300
--- src/protocol.c 2008-10-01 11:05:19.000000000 +0400
***************
*** 176,182 ****
s_poll_zero(&c->fds);
s_poll_add(&c->fds, c->local_rfd.fd, 1, 0);
- switch(s_poll_wait(&c->fds, 0, 200)) { /* wait up to 200ms */
case 0: /* fd not ready to read */
s_log(LOG_DEBUG, "RFC 2487 detected");
break;
--- 176,182 ----
s_poll_zero(&c->fds);
s_poll_add(&c->fds, c->local_rfd.fd, 1, 0);
+ switch(s_poll_wait(&c->fds, 0, options.smtp_wait)) { /* wait */
case 0: /* fd not ready to read */
s_log(LOG_DEBUG, "RFC 2487 detected");
break;
*** src/prototypes.h 2008-06-22 01:15:14.000000000 +0400
--- src/prototypes.h 2008-10-01 11:06:43.000000000 +0400
***************
*** 129,134 ****
--- 129,135 ----
char *egd_sock; /* entropy gathering daemon socket */
char *rand_file; /* file with random data */
int random_bytes; /* how many random bytes to read */
+ int smtp_wait;
/* some global data for stunnel.c */
#ifndef USE_WIN32
*** tools/stunnel.conf 2006-01-07 16:58:15.000000000 +0300
--- tools/stunnel.conf 2008-10-01 10:52:36.000000000 +0400
***************
*** 32,37 ****
--- 32,40 ----
; Use it for client mode
;client = yes
+ ; Increase value (up to 900), if stunnel reports "Unknown client EHLO"^
+ ^
+ smtp_wait = 200^
; Service-level configuration
[pop3s]
*** tools/stunnel.conf-sample.in 2007-11-02 21:22:32.000000000 +0300
--- tools/stunnel.conf-sample.in 2008-10-01 10:53:37.000000000 +0400
***************
*** 43,48 ****
--- 43,50 ----
; Use it for client mode
;client = yes
+ ; Increase value (up to 900), if stunnel reports "Unknown client EHLO"
+ ;smtp_wait = 200
; Service-level configuration