changeset 1896:4c060e30476b

do not resolve SMTP clients by default
author Igor Sysoev <igor@sysoev.ru>
date Sat, 16 Feb 2008 13:46:33 +0000
parents 2e3353955c32
children b43f244d0430
files src/mail/ngx_mail_core_module.c src/mail/ngx_mail_smtp_handler.c src/mail/ngx_mail_smtp_module.c
diffstat 3 files changed, 17 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- a/src/mail/ngx_mail_core_module.c
+++ b/src/mail/ngx_mail_core_module.c
@@ -154,13 +154,14 @@ ngx_mail_core_create_srv_conf(ngx_conf_t
      * set by ngx_pcalloc():
      *
      *     cscf->protocol = NULL;
-     *     cscf->resolver = NULL;
      */
 
     cscf->timeout = NGX_CONF_UNSET_MSEC;
     cscf->resolver_timeout = NGX_CONF_UNSET_MSEC;
     cscf->so_keepalive = NGX_CONF_UNSET;
 
+    cscf->resolver = NGX_CONF_UNSET_PTR;
+
     cscf->file_name = cf->conf_file->file.name.data;
     cscf->line = cf->conf_file->line;
 
@@ -207,9 +208,7 @@ ngx_mail_core_merge_srv_conf(ngx_conf_t 
         return NGX_CONF_ERROR;
     }
 
-    if (conf->resolver == NULL) {
-        conf->resolver = prev->resolver;
-    }
+    ngx_conf_merge_ptr_value(conf->resolver, prev->resolver, NULL);
 
     return NGX_CONF_OK;
 }
@@ -423,6 +422,11 @@ ngx_mail_core_resolver(ngx_conf_t *cf, n
 
     value = cf->args->elts;
 
+    if (ngx_strcmp(value[1].data, "off") == 0) {
+        cscf->resolver = NULL;
+        return NGX_CONF_OK;
+    }
+
     ngx_memzero(&u, sizeof(ngx_url_t));
 
     u.host = value[1];
@@ -435,7 +439,7 @@ ngx_mail_core_resolver(ngx_conf_t *cf, n
 
     cscf->resolver = ngx_resolver_create(&u.addrs[0], cf->cycle->new_log);
     if (cscf->resolver == NULL) {
-        return NGX_OK;
+        return NGX_CONF_OK;
     }
 
     return NGX_CONF_OK;
--- a/src/mail/ngx_mail_smtp_handler.c
+++ b/src/mail/ngx_mail_smtp_handler.c
@@ -54,9 +54,15 @@ ngx_mail_smtp_init_session(ngx_mail_sess
     ngx_resolver_ctx_t        *ctx;
     ngx_mail_core_srv_conf_t  *cscf;
 
-    c->log->action = "in resolving client address";
+    cscf = ngx_mail_get_module_srv_conf(s, ngx_mail_core_module);
 
-    cscf = ngx_mail_get_module_srv_conf(s, ngx_mail_core_module);
+    if (cscf->resolver == NULL) {
+        s->host = smtp_unavailable;
+        ngx_mail_smtp_greeting(s, c);
+        return;
+    }
+
+    c->log->action = "in resolving client address";
 
     ctx = ngx_resolve_start(cscf->resolver, NULL);
     if (ctx == NULL) {
--- a/src/mail/ngx_mail_smtp_module.c
+++ b/src/mail/ngx_mail_smtp_module.c
@@ -158,15 +158,6 @@ ngx_mail_smtp_merge_srv_conf(ngx_conf_t 
 
     cscf = ngx_mail_conf_get_module_srv_conf(cf, ngx_mail_core_module);
 
-    if (cscf->protocol->type == NGX_MAIL_SMTP_PROTOCOL
-        && cscf->resolver == NULL)
-    {
-        ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
-                      "undefined resolver for server in %s:%ui",
-                      cscf->file_name, cscf->line);
-        return NGX_CONF_ERROR;
-    }
-
     size = sizeof("220  ESMTP ready" CRLF) - 1 + cscf->server_name.len;
 
     p = ngx_palloc(cf->pool, size);