Resolver: report SRV resolve failure if all A resolves failed.

Previously, if an SRV record was successfully resolved, but all of its A
records failed to resolve, NXDOMAIN was returned to the caller, which is
considered a successful resolve rather than an error.  This could result in
losing the result of a previous successful resolve by the caller.

Now NXDOMAIN is only returned if at least one A resolve completed with this
code.  Otherwise the error state of the first A resolve is returned.
This commit is contained in:
Roman Arutyunyan 2018-12-11 19:41:22 +03:00
parent 746fba0d79
commit 8e2949e56a

View File

@ -4266,7 +4266,15 @@ ngx_resolver_report_srv(ngx_resolver_t *r, ngx_resolver_ctx_t *ctx)
}
if (naddrs == 0) {
ctx->state = NGX_RESOLVE_NXDOMAIN;
ctx->state = srvs[0].state;
for (i = 0; i < nsrvs; i++) {
if (srvs[i].state == NGX_RESOLVE_NXDOMAIN) {
ctx->state = NGX_RESOLVE_NXDOMAIN;
break;
}
}
ctx->valid = ngx_time() + (r->valid ? r->valid : 10);
ctx->handler(ctx);