mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2025-03-31 23:58:16 +00:00
MINOR: standard: Disable ip resolution during the runtime
The function str2net runs DNS resolution if valid ip cannot be parsed. The DNS function used is the standard function of the libc and it performs asynchronous request. The asynchronous request is not compatible with the haproxy archictecture. str2net() is used during the runtime throught the "socket". This patch remove the DNS resolution during the runtime.
This commit is contained in:
parent
94580c9f52
commit
fc7ac7b89c
@ -248,7 +248,7 @@ int cidr2dotted(int cidr, struct in_addr *mask);
|
||||
* is optionnal and either in the dotted or CIDR notation.
|
||||
* Note: "addr" can also be a hostname. Returns 1 if OK, 0 if error.
|
||||
*/
|
||||
int str2net(const char *str, struct in_addr *addr, struct in_addr *mask);
|
||||
int str2net(const char *str, int resolve, struct in_addr *addr, struct in_addr *mask);
|
||||
|
||||
/*
|
||||
* converts <str> to two struct in6_addr* which must be pre-allocated.
|
||||
|
@ -2198,7 +2198,7 @@ int cfg_parse_listen(const char *file, int linenum, char **args, int kwm)
|
||||
goto out;
|
||||
}
|
||||
else if (!strcmp(args[0], "monitor-net")) { /* set the range of IPs to ignore */
|
||||
if (!*args[1] || !str2net(args[1], &curproxy->mon_net, &curproxy->mon_mask)) {
|
||||
if (!*args[1] || !str2net(args[1], 1, &curproxy->mon_net, &curproxy->mon_mask)) {
|
||||
Alert("parsing [%s:%d] : '%s' expects address[/mask].\n",
|
||||
file, linenum, args[0]);
|
||||
err_code |= ERR_ALERT | ERR_FATAL;
|
||||
@ -3928,7 +3928,7 @@ stats_error_parsing:
|
||||
while (*(args[cur_arg])) {
|
||||
if (!strcmp(args[cur_arg], "except")) {
|
||||
/* suboption except - needs additional argument for it */
|
||||
if (!*(args[cur_arg+1]) || !str2net(args[cur_arg+1], &curproxy->except_net, &curproxy->except_mask)) {
|
||||
if (!*(args[cur_arg+1]) || !str2net(args[cur_arg+1], 1, &curproxy->except_net, &curproxy->except_mask)) {
|
||||
Alert("parsing [%s:%d] : '%s %s %s' expects <address>[/mask] as argument.\n",
|
||||
file, linenum, args[0], args[1], args[cur_arg]);
|
||||
err_code |= ERR_ALERT | ERR_FATAL;
|
||||
@ -3979,7 +3979,7 @@ stats_error_parsing:
|
||||
while (*(args[cur_arg])) {
|
||||
if (!strcmp(args[cur_arg], "except")) {
|
||||
/* suboption except - needs additional argument for it */
|
||||
if (!*(args[cur_arg+1]) || !str2net(args[cur_arg+1], &curproxy->except_to, &curproxy->except_mask_to)) {
|
||||
if (!*(args[cur_arg+1]) || !str2net(args[cur_arg+1], 1, &curproxy->except_to, &curproxy->except_mask_to)) {
|
||||
Alert("parsing [%s:%d] : '%s %s %s' expects <address>[/mask] as argument.\n",
|
||||
file, linenum, args[0], args[1], args[cur_arg]);
|
||||
err_code |= ERR_ALERT | ERR_FATAL;
|
||||
|
@ -405,7 +405,8 @@ int pat_parse_dotted_ver(const char *text, struct pattern *pattern, char **err)
|
||||
*/
|
||||
int pat_parse_ip(const char *text, struct pattern *pattern, char **err)
|
||||
{
|
||||
if (str2net(text, &pattern->val.ipv4.addr, &pattern->val.ipv4.mask)) {
|
||||
if (str2net(text, global.mode & MODE_STARTING,
|
||||
&pattern->val.ipv4.addr, &pattern->val.ipv4.mask)) {
|
||||
pattern->type = SMP_T_IPV4;
|
||||
return 1;
|
||||
}
|
||||
|
@ -809,7 +809,7 @@ int cidr2dotted(int cidr, struct in_addr *mask) {
|
||||
* is optionnal and either in the dotted or CIDR notation.
|
||||
* Note: "addr" can also be a hostname. Returns 1 if OK, 0 if error.
|
||||
*/
|
||||
int str2net(const char *str, struct in_addr *addr, struct in_addr *mask)
|
||||
int str2net(const char *str, int resolve, struct in_addr *addr, struct in_addr *mask)
|
||||
{
|
||||
__label__ out_free, out_err;
|
||||
char *c, *s;
|
||||
@ -834,6 +834,9 @@ int str2net(const char *str, struct in_addr *addr, struct in_addr *mask)
|
||||
if (!inet_pton(AF_INET, s, addr)) {
|
||||
struct hostent *he;
|
||||
|
||||
if (!resolve)
|
||||
goto out_err;
|
||||
|
||||
if ((he = gethostbyname(s)) == NULL) {
|
||||
goto out_err;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user