diff --git a/include/haproxy/server.h b/include/haproxy/server.h index 0686ab14c..269216d30 100644 --- a/include/haproxy/server.h +++ b/include/haproxy/server.h @@ -43,7 +43,7 @@ extern struct dict server_name_dict; int srv_downtime(const struct server *s); int srv_lastsession(const struct server *s); int srv_getinter(const struct check *check); -int parse_server(const char *file, int linenum, char **args, struct proxy *curproxy, struct proxy *defproxy, int parse_addr, int in_peers_section); +int parse_server(const char *file, int linenum, char **args, struct proxy *curproxy, struct proxy *defproxy, int parse_addr, int in_peers_section, int initial_resolve); int update_server_addr(struct server *s, void *ip, int ip_sin_family, const char *updater); const char *update_server_addr_port(struct server *s, const char *addr, const char *port, char *updater); struct server *server_find_by_id(struct proxy *bk, int id); diff --git a/src/cfgparse-listen.c b/src/cfgparse-listen.c index df4021d23..089c177a9 100644 --- a/src/cfgparse-listen.c +++ b/src/cfgparse-listen.c @@ -539,7 +539,7 @@ int cfg_parse_listen(const char *file, int linenum, char **args, int kwm) if (!strcmp(args[0], "server") || !strcmp(args[0], "default-server") || !strcmp(args[0], "server-template")) { - err_code |= parse_server(file, linenum, args, curproxy, &defproxy, 1, 0); + err_code |= parse_server(file, linenum, args, curproxy, &defproxy, 1, 0, 0); if (err_code & ERR_FATAL) goto out; } diff --git a/src/cfgparse.c b/src/cfgparse.c index be36571cd..de82a9fd3 100644 --- a/src/cfgparse.c +++ b/src/cfgparse.c @@ -679,7 +679,7 @@ int cfg_parse_peers(const char *file, int linenum, char **args, int kwm) err_code |= ERR_ALERT | ERR_ABORT; goto out; } - err_code |= parse_server(file, linenum, args, curpeers->peers_fe, NULL, 0, 1); + err_code |= parse_server(file, linenum, args, curpeers->peers_fe, NULL, 0, 1, 1); } else if (strcmp(args[0], "log") == 0) { if (init_peers_frontend(file, linenum, NULL, curpeers) != 0) { @@ -788,7 +788,7 @@ int cfg_parse_peers(const char *file, int linenum, char **args, int kwm) * The server address is parsed only if we are parsing a "peer" line, * or if we are parsing a "server" line and the current peer is not the local one. */ - err_code |= parse_server(file, linenum, args, curpeers->peers_fe, NULL, peer || !local_peer, 1); + err_code |= parse_server(file, linenum, args, curpeers->peers_fe, NULL, peer || !local_peer, 1, 1); if (!curpeers->peers_fe->srv) { /* Remove the newly allocated peer. */ if (newpeer != curpeers->local) { diff --git a/src/server.c b/src/server.c index e682855ed..a622e22bd 100644 --- a/src/server.c +++ b/src/server.c @@ -1937,7 +1937,8 @@ static int server_template_init(struct server *srv, struct proxy *px) return i - srv->tmpl_info.nb_low; } -int parse_server(const char *file, int linenum, char **args, struct proxy *curproxy, struct proxy *defproxy, int parse_addr, int in_peers_section) +int parse_server(const char *file, int linenum, char **args, struct proxy *curproxy, + struct proxy *defproxy, int parse_addr, int in_peers_section, int initial_resolve) { struct server *newsrv = NULL; const char *err = NULL; @@ -2053,7 +2054,7 @@ int parse_server(const char *file, int linenum, char **args, struct proxy *curpr if (!parse_addr) goto skip_addr; - sk = str2sa_range(args[cur_arg], &port, &port1, &port2, &errmsg, NULL, &fqdn, 0); + sk = str2sa_range(args[cur_arg], &port, &port1, &port2, &errmsg, NULL, &fqdn, initial_resolve); if (!sk) { ha_alert("parsing [%s:%d] : '%s %s' : %s\n", file, linenum, args[0], args[1], errmsg); err_code |= ERR_ALERT | ERR_FATAL; diff --git a/src/sink.c b/src/sink.c index 4b5dd5b6e..64bac6174 100644 --- a/src/sink.c +++ b/src/sink.c @@ -802,7 +802,7 @@ int cfg_parse_ring(const char *file, int linenum, char **args, int kwm) } } else if (strcmp(args[0],"server") == 0) { - err_code |= parse_server(file, linenum, args, cfg_sink->forward_px, NULL, 1, 0); + err_code |= parse_server(file, linenum, args, cfg_sink->forward_px, NULL, 1, 0, 1); } else if (strcmp(args[0],"timeout") == 0) { if (!cfg_sink || !cfg_sink->forward_px) {