mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2025-03-09 12:58:07 +00:00
BUG/MEDIUM: resolve: fix init resolving for ring and peers section.
Reported github issue #759 shows there is no name resolving on server lines for ring and peers sections. This patch introduce the resolving for those lines. This patch adds boolean a parameter to parse_server function to specify if we want the function to perform an initial name resolving using libc. This boolean is forced to true in case of peers or ring section. The boolean is kept to false in case of classic servers (from backend/listen) This patch should be backported in branches where peers sections support 'server' lines.
This commit is contained in:
parent
75fd2ff83a
commit
d3db3846c5
@ -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);
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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) {
|
||||
|
@ -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;
|
||||
|
@ -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) {
|
||||
|
Loading…
Reference in New Issue
Block a user