diff --git a/src/server.c b/src/server.c index f1ba3cf80..3b4d41e50 100644 --- a/src/server.c +++ b/src/server.c @@ -3126,7 +3126,25 @@ int snr_resolution_cb(struct resolv_requester *requester, struct dns_counters *c if (!s) return 1; + if (s->srvrq) { + struct resolv_answer_item *srv_item; + + /* If DNS resolution is disabled ignore it. */ + if (s->flags & SRV_F_NO_RESOLUTION) + return 1; + + /* The server is based on a SRV record, thus, find the + * associated answer record. If not found, it means the SRV item + * has expired and this resolution must be ignored. + */ + srv_item = find_srvrq_answer_record(requester); + if (!srv_item) + return 1; + } + resolution = s->resolv_requester->resolution; + if (!resolution) + return 1; /* initializing variables */ firstip = NULL; /* pointer to the first valid response found */ @@ -3191,6 +3209,7 @@ int snr_resolution_cb(struct resolv_requester *requester, struct dns_counters *c srv_update_addr(s, firstip, firstip_sin_family, (char *) chk->area); update_status: + snr_update_srv_status(s, has_no_ip); return 1;