changeset 395:1c0300c3ae88

Mail: SMTP STARTTLS support.
author Maxim Dounin <mdounin@mdounin.ru>
date Wed, 18 Jul 2007 01:33:39 +0000
parents a96157df5186
children e2d916d7e50f
files src/mail/ngx_mail_handler.c
diffstat 1 files changed, 30 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- 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;