# HG changeset patch # User Maxim Dounin # Date 1184722419 0 # Node ID 1c0300c3ae887485014bc2adcfce1ad2066ab93d # Parent a96157df518652eca5c1f0baa99348c48d6582b7 Mail: SMTP STARTTLS support. diff --git a/src/mail/ngx_mail_handler.c b/src/mail/ngx_mail_handler.c --- a/src/mail/ngx_mail_handler.c +++ b/src/mail/ngx_mail_handler.c @@ -1242,6 +1242,9 @@ ngx_smtp_auth_state(ngx_event_t *rev) ngx_connection_t *c; ngx_mail_session_t *s; ngx_mail_core_srv_conf_t *cscf; +#if (NGX_MAIL_SSL) + ngx_mail_ssl_conf_t *sslcf; +#endif c = rev->data; s = c->data; @@ -1467,6 +1470,33 @@ ngx_smtp_auth_state(ngx_event_t *rev) size = sizeof(smtp_ok) - 1; break; +#if (NGX_MAIL_SSL) + case NGX_SMTP_STARTTLS: + if (c->ssl == NULL) { + sslcf = ngx_mail_get_module_srv_conf(s, + ngx_mail_ssl_module); + if (sslcf->starttls) { + c->read->handler = ngx_mail_starttls_handler; + + /* + * RFC3207 requires us to discard any knowledge obtained + * from client before STARTTLS. + */ + + s->smtp_helo.len = 0; + s->smtp_helo.data = NULL; + + text = smtp_ok; + size = sizeof(smtp_ok) - 1; + + break; + } + } + + rc = NGX_MAIL_PARSE_INVALID_COMMAND; + break; +#endif + default: rc = NGX_MAIL_PARSE_INVALID_COMMAND; break;