BUG/MINOR: server: Crash when setting FQDN via CLI.
This patch ensures that a DNS resolution may be launched before
setting a server FQDN via the CLI. Especially, it checks that
resolvers was set.
A LEVEL 4 reg testing file is provided.
Thanks to Lukas Tribus for having reported this issue.
Must be backported to 1.8.
diff --git a/reg-tests/server/b00000.vtc b/reg-tests/server/b00000.vtc
new file mode 100644
index 0000000..5fb5c62
--- /dev/null
+++ b/reg-tests/server/b00000.vtc
@@ -0,0 +1,29 @@
+varnishtest "Set server FQDN via CLI crash"
+
+feature ignore_unknown_macro
+
+# Do nothing. Is there only to create s1_* macros
+server s1 {
+} -start
+
+haproxy h1 -conf {
+ defaults
+ mode http
+ timeout connect 1s
+ timeout client 1s
+ timeout server 1s
+
+ frontend myfrontend
+ bind "fd@${my_fe}"
+ default_backend test
+
+ backend test
+ server www1 ${s1_addr}:${s1_port}
+} -start
+
+haproxy h1 -cli {
+ send "set server test/www1 fqdn foo.fqdn"
+ expect ~ "could not update test/www1 FQDN by 'stats socket command'"
+ send "show servers state test"
+ expect ~ "test 1 www1 ${s1_addr} .* - ${s1_port}"
+} -wait
diff --git a/src/server.c b/src/server.c
index 766f5de..e6944c2 100644
--- a/src/server.c
+++ b/src/server.c
@@ -3980,6 +3980,10 @@
char *hostname_dn;
int hostname_len, hostname_dn_len;
+ /* Note that the server lock is already held. */
+ if (!srv->resolvers)
+ return -1;
+
if (!dns_locked)
HA_SPIN_LOCK(DNS_LOCK, &srv->resolvers->lock);
/* run time DNS resolution was not active for this server