BUG/MINOR: dns: allow srv record weight set to 0
Processing of SRV record weight was inaccurate and when a SRV record's
weight was set to 0, HAProxy enforced it to '1'.
This patch aims at fixing this without breaking compability with
previous behavior.
Backport status: 1.8 to 2.0
diff --git a/src/dns.c b/src/dns.c
index 0ce6e83..15d40a1 100644
--- a/src/dns.c
+++ b/src/dns.c
@@ -543,10 +543,12 @@
!memcmp(srv->hostname_dn, item->target, item->data_len)) {
int ha_weight;
- /* Make sure weight is at least 1, so
- * that the server will be used.
+ /* DNS weight range if from 0 to 65535
+ * HAProxy weight is from 0 to 256
+ * The rule below ensures that weight 0 is well respected
+ * while allowing a "mapping" from DNS weight into HAProxy's one.
*/
- ha_weight = item->weight / 256 + 1;
+ ha_weight = (item->weight + 255) / 256;
if (srv->uweight != ha_weight) {
char weight[9];
@@ -590,10 +592,12 @@
!(srv->flags & SRV_F_CHECKPORT))
srv->check.port = item->port;
- /* Make sure weight is at least 1, so
- * that the server will be used.
+ /* DNS weight range if from 0 to 65535
+ * HAProxy weight is from 0 to 256
+ * The rule below ensures that weight 0 is well respected
+ * while allowing a "mapping" from DNS weight into HAProxy's one.
*/
- ha_weight = item->weight / 256 + 1;
+ ha_weight = (item->weight + 255) / 256;
snprintf(weight, sizeof(weight), "%d", ha_weight);
server_parse_weight_change_request(srv, weight);