MINOR: dns: new flag to report that no IP can be found in a DNS response packet

Some DNS response may be valid from a protocol point of view but may not
contain any IP addresses.
This patch gives a new flag to the function dns_get_ip_from_response to
report such case.
It's up to the upper layer to decide what to do with this information.
This commit is contained in:
Baptiste Assmann 2015-09-09 00:51:08 +02:00 committed by Willy Tarreau
parent 96972bcd36
commit 0453a1dd45
3 changed files with 13 additions and 0 deletions

View File

@ -212,6 +212,7 @@ enum {
* matching preference was found */
DNS_UPD_CNAME, /* CNAME without any IP provided in the response */
DNS_UPD_NAME_ERROR, /* name in the response did not match the query */
DNS_UPD_NO_IP_FOUND, /* no IP could be found in the response */
};
#endif /* _TYPES_DNS_H */

View File

@ -724,6 +724,11 @@ int dns_get_ip_from_response(unsigned char *resp, unsigned char *resp_end,
return DNS_UPD_CNAME;
}
/* no IP found in the response */
if (!newip4 && !newip6) {
return DNS_UPD_NO_IP_FOUND;
}
/* case when the caller looks first for an IPv4 address */
if (family_priority == AF_INET) {
if (newip4) {

View File

@ -2049,6 +2049,13 @@ int snr_resolution_cb(struct dns_resolution *resolution, struct dns_nameserver *
}
goto invalid;
case DNS_UPD_NO_IP_FOUND:
if (resolution->status != RSLV_STATUS_OTHER) {
resolution->status = RSLV_STATUS_OTHER;
resolution->last_status_change = now_ms;
}
goto stop_resolution;
default:
goto invalid;