mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2025-04-23 15:35:40 +00:00
[MINOR] make use of set_host_port() and get_host_port() to get rid of family mismatches
This also simplifies the code and makes it more auditable.
This commit is contained in:
parent
542a31d6c3
commit
86ad42c5b7
@ -1230,15 +1230,7 @@ int cfg_parse_peers(const char *file, int linenum, char **args, int kwm)
|
|||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
newpeer->addr = *sk;
|
newpeer->addr = *sk;
|
||||||
|
set_host_port(&newpeer->addr, realport);
|
||||||
switch (newpeer->addr.ss_family) {
|
|
||||||
case AF_INET:
|
|
||||||
((struct sockaddr_in *)&newpeer->addr)->sin_port = htons(realport);
|
|
||||||
break;
|
|
||||||
case AF_INET6:
|
|
||||||
((struct sockaddr_in6 *)&newpeer->addr)->sin6_port = htons(realport);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strcmp(newpeer->id, localpeer) == 0) {
|
if (strcmp(newpeer->id, localpeer) == 0) {
|
||||||
/* Current is local peer, it define a frontend */
|
/* Current is local peer, it define a frontend */
|
||||||
@ -3935,15 +3927,7 @@ stats_error_parsing:
|
|||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
newsrv->addr = *sk;
|
newsrv->addr = *sk;
|
||||||
|
set_host_port(&newsrv->addr, realport);
|
||||||
switch (newsrv->addr.ss_family) {
|
|
||||||
case AF_INET:
|
|
||||||
((struct sockaddr_in *)&newsrv->addr)->sin_port = htons(realport);
|
|
||||||
break;
|
|
||||||
case AF_INET6:
|
|
||||||
((struct sockaddr_in6 *)&newsrv->addr)->sin6_port = htons(realport);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
newsrv->check_port = curproxy->defsrv.check_port;
|
newsrv->check_port = curproxy->defsrv.check_port;
|
||||||
newsrv->inter = curproxy->defsrv.inter;
|
newsrv->inter = curproxy->defsrv.inter;
|
||||||
@ -4446,16 +4430,9 @@ stats_error_parsing:
|
|||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (newsrv->check_addr.ss_family) {
|
/* try to get the port from check_addr if check_port not set */
|
||||||
case AF_INET:
|
if (!newsrv->check_port)
|
||||||
if (!newsrv->check_port && ((struct sockaddr_in *)&newsrv->check_addr)->sin_port)
|
newsrv->check_port = get_host_port(&newsrv->check_addr);
|
||||||
newsrv->check_port = ntohs(((struct sockaddr_in *)&newsrv->check_addr)->sin_port);
|
|
||||||
break;
|
|
||||||
case AF_INET6:
|
|
||||||
if (!newsrv->check_port && ((struct sockaddr_in6 *)&newsrv->check_addr)->sin6_port)
|
|
||||||
newsrv->check_port = ntohs(((struct sockaddr_in6 *)&newsrv->check_addr)->sin6_port);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!newsrv->check_port && !(newsrv->state & SRV_MAPPORTS))
|
if (!newsrv->check_port && !(newsrv->state & SRV_MAPPORTS))
|
||||||
newsrv->check_port = realport; /* by default */
|
newsrv->check_port = realport; /* by default */
|
||||||
@ -4464,15 +4441,9 @@ stats_error_parsing:
|
|||||||
* the server either. We'll check if we have
|
* the server either. We'll check if we have
|
||||||
* a known port on the first listener.
|
* a known port on the first listener.
|
||||||
*/
|
*/
|
||||||
struct listener *l;
|
struct listener *l = curproxy->listen;
|
||||||
l = curproxy->listen;
|
while (l && !(newsrv->check_port = get_host_port(&l->addr)))
|
||||||
if (l) {
|
l = l->next;
|
||||||
int port;
|
|
||||||
port = (l->addr.ss_family == AF_INET6)
|
|
||||||
? ntohs(((struct sockaddr_in6 *)(&l->addr))->sin6_port)
|
|
||||||
: ntohs(((struct sockaddr_in *)(&l->addr))->sin_port);
|
|
||||||
newsrv->check_port = port;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (!newsrv->check_port) {
|
if (!newsrv->check_port) {
|
||||||
Alert("parsing [%s:%d] : server %s has neither service port nor check port. Check has been disabled.\n",
|
Alert("parsing [%s:%d] : server %s has neither service port nor check port. Check has been disabled.\n",
|
||||||
|
10
src/checks.c
10
src/checks.c
@ -1329,15 +1329,7 @@ struct task *process_chk(struct task *t)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
fdinfo[fd].port_range = s->sport_range;
|
fdinfo[fd].port_range = s->sport_range;
|
||||||
|
set_host_port(&src, fdinfo[fd].local_port);
|
||||||
switch (src.ss_family) {
|
|
||||||
case AF_INET:
|
|
||||||
((struct sockaddr_in *)&src)->sin_port = htons(fdinfo[fd].local_port);
|
|
||||||
break;
|
|
||||||
case AF_INET6:
|
|
||||||
((struct sockaddr_in6 *)&src)->sin6_port = htons(fdinfo[fd].local_port);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = tcp_bind_socket(fd, flags, &src, remote);
|
ret = tcp_bind_socket(fd, flags, &src, remote);
|
||||||
} while (ret != 0); /* binding NOK */
|
} while (ret != 0); /* binding NOK */
|
||||||
|
@ -356,9 +356,7 @@ void tcp_sess_log(struct session *s)
|
|||||||
" %s %s/%s %ld/%ld/%s%ld %s%lld"
|
" %s %s/%s %ld/%ld/%s%ld %s%lld"
|
||||||
" %c%c %d/%d/%d/%d/%s%u %ld/%ld\n",
|
" %c%c %d/%d/%d/%d/%s%u %ld/%ld\n",
|
||||||
s->si[0].addr.c.from.ss_family == AF_UNIX ? "unix" : pn,
|
s->si[0].addr.c.from.ss_family == AF_UNIX ? "unix" : pn,
|
||||||
s->si[0].addr.c.from.ss_family == AF_UNIX ? s->listener->luid : (ntohs((s->si[0].addr.c.from.ss_family == AF_INET) ?
|
s->si[0].addr.c.from.ss_family == AF_UNIX ? s->listener->luid : get_host_port(&s->si[0].addr.c.from),
|
||||||
((struct sockaddr_in *)&s->si[0].addr.c.from)->sin_port :
|
|
||||||
((struct sockaddr_in6 *)&s->si[0].addr.c.from)->sin6_port)),
|
|
||||||
tm.tm_mday, monthname[tm.tm_mon], tm.tm_year+1900,
|
tm.tm_mday, monthname[tm.tm_mon], tm.tm_year+1900,
|
||||||
tm.tm_hour, tm.tm_min, tm.tm_sec, (int)s->logs.tv_accept.tv_usec/1000,
|
tm.tm_hour, tm.tm_min, tm.tm_sec, (int)s->logs.tv_accept.tv_usec/1000,
|
||||||
fe->id, be->id, svid,
|
fe->id, be->id, svid,
|
||||||
|
@ -915,9 +915,7 @@ void http_sess_clflog(struct session *s)
|
|||||||
w = snprintf(h, sizeof(tmpline) - (h - tmpline),
|
w = snprintf(h, sizeof(tmpline) - (h - tmpline),
|
||||||
" %d %03d",
|
" %d %03d",
|
||||||
s->req->prod->addr.c.from.ss_family == AF_UNIX ? s->listener->luid :
|
s->req->prod->addr.c.from.ss_family == AF_UNIX ? s->listener->luid :
|
||||||
ntohs((s->req->prod->addr.c.from.ss_family == AF_INET) ?
|
get_host_port(&s->req->prod->addr.c.from),
|
||||||
((struct sockaddr_in *)&s->req->prod->addr.c.from)->sin_port :
|
|
||||||
((struct sockaddr_in6 *)&s->req->prod->addr.c.from)->sin6_port),
|
|
||||||
(int)s->logs.accept_date.tv_usec/1000);
|
(int)s->logs.accept_date.tv_usec/1000);
|
||||||
if (w < 0 || w >= sizeof(tmpline) - (h - tmpline))
|
if (w < 0 || w >= sizeof(tmpline) - (h - tmpline))
|
||||||
goto trunc;
|
goto trunc;
|
||||||
@ -1192,9 +1190,7 @@ void http_sess_log(struct session *s)
|
|||||||
" %s %s %c%c%c%c %d/%d/%d/%d/%s%u %ld/%ld%s\n",
|
" %s %s %c%c%c%c %d/%d/%d/%d/%s%u %ld/%ld%s\n",
|
||||||
(s->req->prod->addr.c.from.ss_family == AF_UNIX) ? "unix" : pn,
|
(s->req->prod->addr.c.from.ss_family == AF_UNIX) ? "unix" : pn,
|
||||||
(s->req->prod->addr.c.from.ss_family == AF_UNIX) ? s->listener->luid :
|
(s->req->prod->addr.c.from.ss_family == AF_UNIX) ? s->listener->luid :
|
||||||
ntohs((s->req->prod->addr.c.from.ss_family == AF_INET) ?
|
get_host_port(&s->req->prod->addr.c.from),
|
||||||
((struct sockaddr_in *)&s->req->prod->addr.c.from)->sin_port :
|
|
||||||
((struct sockaddr_in6 *)&s->req->prod->addr.c.from)->sin6_port),
|
|
||||||
tm.tm_mday, monthname[tm.tm_mon], tm.tm_year+1900,
|
tm.tm_mday, monthname[tm.tm_mon], tm.tm_year+1900,
|
||||||
tm.tm_hour, tm.tm_min, tm.tm_sec, (int)s->logs.accept_date.tv_usec/1000,
|
tm.tm_hour, tm.tm_min, tm.tm_sec, (int)s->logs.accept_date.tv_usec/1000,
|
||||||
fe->id, be->id, svid,
|
fe->id, be->id, svid,
|
||||||
|
@ -316,14 +316,7 @@ int tcp_connect_server(struct stream_interface *si)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
fdinfo[fd].port_range = srv->sport_range;
|
fdinfo[fd].port_range = srv->sport_range;
|
||||||
switch (src.ss_family) {
|
set_host_port(&src, fdinfo[fd].local_port);
|
||||||
case AF_INET:
|
|
||||||
((struct sockaddr_in *)&src)->sin_port = htons(fdinfo[fd].local_port);
|
|
||||||
break;
|
|
||||||
case AF_INET6:
|
|
||||||
((struct sockaddr_in6 *)&src)->sin6_port = htons(fdinfo[fd].local_port);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = tcp_bind_socket(fd, flags, &src, &si->addr.s.from);
|
ret = tcp_bind_socket(fd, flags, &src, &si->addr.s.from);
|
||||||
} while (ret != 0); /* binding NOK */
|
} while (ret != 0); /* binding NOK */
|
||||||
@ -1305,11 +1298,7 @@ static int
|
|||||||
acl_fetch_sport(struct proxy *px, struct session *l4, void *l7, int dir,
|
acl_fetch_sport(struct proxy *px, struct session *l4, void *l7, int dir,
|
||||||
struct acl_expr *expr, struct acl_test *test)
|
struct acl_expr *expr, struct acl_test *test)
|
||||||
{
|
{
|
||||||
if (l4->si[0].addr.c.from.ss_family == AF_INET)
|
if (!(test->i = get_host_port(&l4->si[0].addr.c.from)))
|
||||||
test->i = ntohs(((struct sockaddr_in *)&l4->si[0].addr.c.from)->sin_port);
|
|
||||||
else if (l4->si[0].addr.c.from.ss_family == AF_INET6)
|
|
||||||
test->i = ntohs(((struct sockaddr_in6 *)(&l4->si[0].addr.c.from))->sin6_port);
|
|
||||||
else
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
test->flags = 0;
|
test->flags = 0;
|
||||||
@ -1376,11 +1365,7 @@ acl_fetch_dport(struct proxy *px, struct session *l4, void *l7, int dir,
|
|||||||
if (!(l4->flags & SN_FRT_ADDR_SET))
|
if (!(l4->flags & SN_FRT_ADDR_SET))
|
||||||
get_frt_addr(l4);
|
get_frt_addr(l4);
|
||||||
|
|
||||||
if (l4->si[0].addr.c.to.ss_family == AF_INET)
|
if (!(test->i = get_host_port(&l4->si[0].addr.c.to)))
|
||||||
test->i = ntohs(((struct sockaddr_in *)&l4->si[0].addr.c.to)->sin_port);
|
|
||||||
else if (l4->si[0].addr.c.to.ss_family == AF_INET6)
|
|
||||||
test->i = ntohs(((struct sockaddr_in6 *)(&l4->si[0].addr.c.to))->sin6_port);
|
|
||||||
else
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
test->flags = 0;
|
test->flags = 0;
|
||||||
@ -1394,11 +1379,7 @@ pattern_fetch_dport(struct proxy *px, struct session *l4, void *l7, int dir,
|
|||||||
if (!(l4->flags & SN_FRT_ADDR_SET))
|
if (!(l4->flags & SN_FRT_ADDR_SET))
|
||||||
get_frt_addr(l4);
|
get_frt_addr(l4);
|
||||||
|
|
||||||
if (l4->si[0].addr.c.to.ss_family == AF_INET)
|
if (!(data->integer = get_host_port(&l4->si[0].addr.c.to)))
|
||||||
data->integer = ntohs(((struct sockaddr_in *)&l4->si[0].addr.c.to)->sin_port);
|
|
||||||
else if (l4->si[0].addr.c.to.ss_family == AF_INET6)
|
|
||||||
data->integer = ntohs(((struct sockaddr_in6 *)&l4->si[0].addr.c.to)->sin6_port);
|
|
||||||
else
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
11
src/proxy.c
11
src/proxy.c
@ -733,15 +733,8 @@ void resume_proxies(void)
|
|||||||
if (!resume_listener(l)) {
|
if (!resume_listener(l)) {
|
||||||
int port;
|
int port;
|
||||||
|
|
||||||
if (l->addr.ss_family == AF_INET6) {
|
port = get_host_port(&l->addr);
|
||||||
port = ntohs(((struct sockaddr_in6 *)(&l->addr))->sin6_port);
|
if (port) {
|
||||||
Warning("Port %d busy while trying to enable %s %s.\n",
|
|
||||||
port, proxy_cap_str(p->cap), p->id);
|
|
||||||
send_log(p, LOG_WARNING, "Port %d busy while trying to enable %s %s.\n",
|
|
||||||
port, proxy_cap_str(p->cap), p->id);
|
|
||||||
}
|
|
||||||
else if (l->addr.ss_family == AF_INET) {
|
|
||||||
port = ntohs(((struct sockaddr_in *)(&l->addr))->sin_port);
|
|
||||||
Warning("Port %d busy while trying to enable %s %s.\n",
|
Warning("Port %d busy while trying to enable %s %s.\n",
|
||||||
port, proxy_cap_str(p->cap), p->id);
|
port, proxy_cap_str(p->cap), p->id);
|
||||||
send_log(p, LOG_WARNING, "Port %d busy while trying to enable %s %s.\n",
|
send_log(p, LOG_WARNING, "Port %d busy while trying to enable %s %s.\n",
|
||||||
|
@ -327,14 +327,7 @@ struct sockaddr_storage *str2sa(const char *str)
|
|||||||
if (!ret)
|
if (!ret)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
switch (ret->ss_family) {
|
set_host_port(ret, port);
|
||||||
case AF_INET:
|
|
||||||
((struct sockaddr_in *)ret)->sin_port = htons(port);
|
|
||||||
break;
|
|
||||||
case AF_INET6:
|
|
||||||
((struct sockaddr_in6 *)ret)->sin6_port = htons(port);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
out:
|
out:
|
||||||
free(str2);
|
free(str2);
|
||||||
return ret;
|
return ret;
|
||||||
@ -383,14 +376,7 @@ struct sockaddr_storage *str2sa_range(const char *str, int *low, int *high)
|
|||||||
if (!ret)
|
if (!ret)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
switch (ret->ss_family) {
|
set_host_port(ret, portl);
|
||||||
case AF_INET:
|
|
||||||
((struct sockaddr_in *)ret)->sin_port = htons(portl);
|
|
||||||
break;
|
|
||||||
case AF_INET6:
|
|
||||||
((struct sockaddr_in6 *)ret)->sin6_port = htons(portl);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
*low = portl;
|
*low = portl;
|
||||||
*high = porth;
|
*high = porth;
|
||||||
|
Loading…
Reference in New Issue
Block a user