From: Emeric Brun Date: Fri, 29 Oct 2021 14:44:49 +0000 (+0200) Subject: BUG/MINOR: resolvers: throw log message if trash not large enough for query X-Git-Tag: v2.5-dev13~25 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0161d32df2b602cd1571539cb8890a68518832a3;p=thirdparty%2Fhaproxy.git BUG/MINOR: resolvers: throw log message if trash not large enough for query Before this patch the sent error counter was increased for each targeted nameserver as soon as we were unable to build the query message into the trash buffer. But this counter is here to count sent errors at dns.c transport layer and this error is not related to a nameserver. This patch stops to increase those counters and sent a log message to signal the trash buffer size is not large enough to build the query. Note: This case should not happen except if trash size buffer was customized to a very low value. The function was also re-worked to return -1 in this error case as it was specified in comment. This function is currently called at multiple point in resolver.c but return code is still not yet handled. So to advert the user of the malfunction the log message was added. This patch should be backported on all versions including the layer split between dns.c and resolver.c (v >= 2.4) --- diff --git a/src/resolvers.c b/src/resolvers.c index e0a5b00715..4f5924320f 100644 --- a/src/resolvers.c +++ b/src/resolvers.c @@ -350,7 +350,7 @@ static int resolv_build_query(int query_id, int query_type, unsigned int accepte } /* Sends a DNS query to resolvers associated to a resolution. It returns 0 on - * success, -1 otherwise. + * success or -1 if trash buffer is not large enough to build a valid query. */ static int resolv_send_query(struct resolv_resolution *resolution) { @@ -367,13 +367,14 @@ static int resolv_send_query(struct resolv_resolution *resolution) resolvers->accepted_payload_size, resolution->hostname_dn, resolution->hostname_dn_len, trash.area, trash.size); + if (len < 0) { + send_log(NULL, LOG_NOTICE, + "can not build the query message for %s, in resolvers %s.\n", + resolution->hostname_dn, resolvers->id); + return -1; + } list_for_each_entry(ns, &resolvers->nameservers, list) { - if (len < 0) { - ns->counters->snd_error++; - continue; - } - if (dns_send_nameserver(ns, trash.area, len) >= 0) resolution->nb_queries++; }