comparison src/mail/ngx_mail_core_module.c @ 4225:016352c19049

Support of several servers in the "resolver" directive. Patch by Kirill A. Korinskiy.
author Igor Sysoev <igor@sysoev.ru>
date Mon, 24 Oct 2011 16:09:05 +0000
parents c7d57b539248
children c4513d4dd024
comparison
equal deleted inserted replaced
4224:4c4997de65b8 4225:016352c19049
67 NGX_MAIL_SRV_CONF_OFFSET, 67 NGX_MAIL_SRV_CONF_OFFSET,
68 offsetof(ngx_mail_core_srv_conf_t, server_name), 68 offsetof(ngx_mail_core_srv_conf_t, server_name),
69 NULL }, 69 NULL },
70 70
71 { ngx_string("resolver"), 71 { ngx_string("resolver"),
72 NGX_MAIL_MAIN_CONF|NGX_MAIL_SRV_CONF|NGX_CONF_TAKE1, 72 NGX_MAIL_MAIN_CONF|NGX_MAIL_SRV_CONF|NGX_CONF_1MORE,
73 ngx_mail_core_resolver, 73 ngx_mail_core_resolver,
74 NGX_MAIL_SRV_CONF_OFFSET, 74 NGX_MAIL_SRV_CONF_OFFSET,
75 0, 75 0,
76 NULL }, 76 NULL },
77 77
491 static char * 491 static char *
492 ngx_mail_core_resolver(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) 492 ngx_mail_core_resolver(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
493 { 493 {
494 ngx_mail_core_srv_conf_t *cscf = conf; 494 ngx_mail_core_srv_conf_t *cscf = conf;
495 495
496 ngx_url_t u;
497 ngx_str_t *value; 496 ngx_str_t *value;
498 497
499 value = cf->args->elts; 498 value = cf->args->elts;
500 499
501 if (cscf->resolver != NGX_CONF_UNSET_PTR) { 500 if (cscf->resolver != NGX_CONF_UNSET_PTR) {
505 if (ngx_strcmp(value[1].data, "off") == 0) { 504 if (ngx_strcmp(value[1].data, "off") == 0) {
506 cscf->resolver = NULL; 505 cscf->resolver = NULL;
507 return NGX_CONF_OK; 506 return NGX_CONF_OK;
508 } 507 }
509 508
510 ngx_memzero(&u, sizeof(ngx_url_t)); 509 cscf->resolver = ngx_resolver_create(cf, &value[1], cf->args->nelts - 1);
511
512 u.host = value[1];
513 u.port = 53;
514
515 if (ngx_inet_resolve_host(cf->pool, &u) != NGX_OK) {
516 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "%V: %s", &u.host, u.err);
517 return NGX_CONF_ERROR;
518 }
519
520 cscf->resolver = ngx_resolver_create(cf, &u.addrs[0]);
521 if (cscf->resolver == NULL) { 510 if (cscf->resolver == NULL) {
522 return NGX_CONF_OK; 511 return NGX_CONF_ERROR;
523 } 512 }
524 513
525 return NGX_CONF_OK; 514 return NGX_CONF_OK;
526 } 515 }
527 516