static void ngx_mail_smtp_resolve_addr_handler(ngx_resolver_ctx_t *ctx) { ngx_connection_t *c; ngx_mail_session_t *s; s = ctx->data; c = s->connection; if (ctx->state) { ngx_log_error(NGX_LOG_ERR, c->log, 0, "%V could not be resolved (%i: %s)", &c->addr_text, ctx->state, ngx_resolver_strerror(ctx->state)); if (ctx->state == NGX_RESOLVE_NXDOMAIN) { s->host = smtp_unavailable; } else { s->host = smtp_tempunavail; } ngx_resolve_addr_done(ctx); ngx_mail_smtp_greeting(s, s->connection); return; } c->log->action = "in resolving client hostname"; s->host.data = ngx_pstrdup(c->pool, &ctx->name); if (s->host.data == NULL) { ngx_resolve_addr_done(ctx); ngx_mail_close_connection(c); return; } s->host.len = ctx->name.len; ngx_resolve_addr_done(ctx); ngx_log_debug1(NGX_LOG_DEBUG_MAIL, c->log, 0, "address resolved: %V", &s->host); c->read->handler = ngx_mail_smtp_resolve_name; ngx_post_event(c->read, &ngx_posted_events); }
static void rdns_handler(ngx_resolver_ctx_t * rctx) { ngx_http_request_t * r = rctx->data; ngx_http_rdns_ctx_t * ctx = ngx_http_get_module_ctx(r, ngx_http_rdns_module); ngx_http_rdns_loc_conf_t * loc_cf; ngx_http_rdns_common_conf_t * cconf; ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, "rdns: reverse dns request handler"); if (ctx == NULL) { ngx_log_debug0(NGX_LOG_ERR, r->connection->log, 0, "rdns: reverse dns request handler: failed to get request context"); ngx_resolve_addr_done(rctx); ngx_http_finalize_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR); return; } loc_cf = ngx_http_get_module_loc_conf(r, ngx_http_rdns_module); if (loc_cf == NULL) { ngx_log_debug0(NGX_LOG_ERR, r->connection->log, 0, "rdns: reverse dns request handler: failed to get rdns location config"); ngx_resolve_addr_done(rctx); ngx_http_finalize_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR); return; } if (rctx->state) { ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, "rdns: reverse dns request handler: failed with error '%s'", ngx_resolver_strerror(rctx->state)); ngx_resolve_addr_done(rctx); var_set(r, loc_cf->rdns_result_index, var_rdns_result_not_found); resolver_handler_finalize(r, ctx); } else { ngx_str_t hostname; ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, "rdns: reverse dns request handler: result='%V'", &rctx->name); hostname.data = ngx_pcalloc(r->pool, rctx->name.len * sizeof(u_char)); ngx_memcpy(hostname.data, rctx->name.data, rctx->name.len); hostname.len = rctx->name.len; ngx_resolve_addr_done(rctx); cconf = rdns_get_common_conf(ctx, loc_cf); if (cconf == NULL) { ngx_log_debug0(NGX_LOG_ERR, r->connection->log, 0, "rdns: reverse dns request handler: failed to get common config"); ngx_http_finalize_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR); return; } if (cconf->double_mode) { ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, "rdns: reverse dns request handler: double mode"); dns_request(r, hostname); } else { ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, "rdns: reverse dns request handler: resolved to '%V'", &hostname); var_set(r, loc_cf->rdns_result_index, hostname); ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, "(DONE) rdns: reverse dns request handler"); resolver_handler_finalize(r, ctx); } } }
static void ngx_mail_smtp_resolve_addr_handler(ngx_resolver_ctx_t *ctx) { ngx_connection_t *c; ngx_mail_session_t *s; ngx_mail_core_srv_conf_t *cscf; s = ctx->data; c = s->connection; if (ctx->state) { ngx_log_error(NGX_LOG_ERR, c->log, 0, "%V could not be resolved (%i: %s)", &c->addr_text, ctx->state, ngx_resolver_strerror(ctx->state)); if (ctx->state == NGX_RESOLVE_NXDOMAIN) { s->host = smtp_unavailable; } else { s->host = smtp_tempunavail; } ngx_resolve_addr_done(ctx); ngx_mail_smtp_greeting(s, s->connection); return; } c->log->action = "in resolving client hostname"; s->host.data = ngx_pstrdup(c->pool, &ctx->name); if (s->host.data == NULL) { ngx_resolve_addr_done(ctx); ngx_mail_close_connection(c); return; } s->host.len = ctx->name.len; ngx_resolve_addr_done(ctx); ngx_log_debug1(NGX_LOG_DEBUG_MAIL, c->log, 0, "address resolved: %V", &s->host); cscf = ngx_mail_get_module_srv_conf(s, ngx_mail_core_module); ctx = ngx_resolve_start(cscf->resolver, NULL); if (ctx == NULL) { ngx_mail_close_connection(c); return; } ctx->name = s->host; ctx->type = NGX_RESOLVE_A; ctx->handler = ngx_mail_smtp_resolve_name_handler; ctx->data = s; ctx->timeout = cscf->resolver_timeout; if (ngx_resolve_name(ctx) != NGX_OK) { ngx_mail_close_connection(c); } }