From: Amaury Denoyelle Date: Thu, 10 Jun 2021 15:34:10 +0000 (+0200) Subject: BUG/MINOR: server: explicitly set "none" init-addr for dynamic servers X-Git-Tag: v2.5-dev1~168 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=efbf35caf9a3dcf9ead7bc07d140447e483a6bab;p=thirdparty%2Fhaproxy.git BUG/MINOR: server: explicitly set "none" init-addr for dynamic servers Define srv.init_addr_methods to SRV_IADDR_NONE on 'add server' CLI handler. This explicitly states that no resolution will be made on the server creation. This is not a real bug as the default value (SRV_IADDR_END) has the same effect in practice. However the intent is clearer and prevent to use the default "libc,last" by mistake which cannot execute on runtime (blocking call + file access via gethostbyname/getaddrinfo). The doc is also updated to reflect this limitation. This should be backported up to 2.4. --- diff --git a/doc/management.txt b/doc/management.txt index 91c0340a2f..932981bfc2 100644 --- a/doc/management.txt +++ b/doc/management.txt @@ -1466,6 +1466,10 @@ add server / [args]* used to configure the server behavior. Also note that no settings will be reused from an hypothetical 'default-server' statement in the same backend. + Currently a dynamic server is statically initialized with the "none" + init-addr method. This means that no resolution will be undertaken if a FQDN + is specified as an address, even if the server creation will be validated. + Here is the list of the currently supported keywords : - backup diff --git a/src/server.c b/src/server.c index 043857478a..62f0bcb89f 100644 --- a/src/server.c +++ b/src/server.c @@ -4375,6 +4375,13 @@ static int cli_parse_add_server(char **args, char *payload, struct appctx *appct if (errcode) goto out; + /* A dynamic server does not currently support resolution. + * + * Initialize it explicitly to the "none" method to ensure no + * resolution will ever be executed. + */ + srv->init_addr_methods = SRV_IADDR_NONE; + if (srv->mux_proto) { if (!conn_get_best_mux_entry(srv->mux_proto->token, PROTO_SIDE_BE, be->mode)) { ha_alert("MUX protocol is not usable for server.\n");