mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2025-04-25 04:18:01 +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;
|
||||
}
|
||||
newpeer->addr = *sk;
|
||||
|
||||
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;
|
||||
}
|
||||
set_host_port(&newpeer->addr, realport);
|
||||
|
||||
if (strcmp(newpeer->id, localpeer) == 0) {
|
||||
/* Current is local peer, it define a frontend */
|
||||
@ -3935,15 +3927,7 @@ stats_error_parsing:
|
||||
goto out;
|
||||
}
|
||||
newsrv->addr = *sk;
|
||||
|
||||
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;
|
||||
}
|
||||
set_host_port(&newsrv->addr, realport);
|
||||
|
||||
newsrv->check_port = curproxy->defsrv.check_port;
|
||||
newsrv->inter = curproxy->defsrv.inter;
|
||||
@ -4446,16 +4430,9 @@ stats_error_parsing:
|
||||
goto out;
|
||||
}
|
||||
|
||||
switch (newsrv->check_addr.ss_family) {
|
||||
case AF_INET:
|
||||
if (!newsrv->check_port && ((struct sockaddr_in *)&newsrv->check_addr)->sin_port)
|
||||
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;
|
||||
}
|
||||
/* try to get the port from check_addr if check_port not set */
|
||||
if (!newsrv->check_port)
|
||||
newsrv->check_port = get_host_port(&newsrv->check_addr);
|
||||
|
||||
if (!newsrv->check_port && !(newsrv->state & SRV_MAPPORTS))
|
||||
newsrv->check_port = realport; /* by default */
|
||||
@ -4464,15 +4441,9 @@ stats_error_parsing:
|
||||
* the server either. We'll check if we have
|
||||
* a known port on the first listener.
|
||||
*/
|
||||
struct listener *l;
|
||||
l = curproxy->listen;
|
||||
if (l) {
|
||||
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;
|
||||
}
|
||||
struct listener *l = curproxy->listen;
|
||||
while (l && !(newsrv->check_port = get_host_port(&l->addr)))
|
||||
l = l->next;
|
||||
}
|
||||
if (!newsrv->check_port) {
|
||||
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;
|
||||
|
||||
fdinfo[fd].port_range = s->sport_range;
|
||||
|
||||
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;
|
||||
}
|
||||
set_host_port(&src, fdinfo[fd].local_port);
|
||||
|
||||
ret = tcp_bind_socket(fd, flags, &src, remote);
|
||||
} 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"
|
||||
" %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 ? s->listener->luid : (ntohs((s->si[0].addr.c.from.ss_family == AF_INET) ?
|
||||
((struct sockaddr_in *)&s->si[0].addr.c.from)->sin_port :
|
||||
((struct sockaddr_in6 *)&s->si[0].addr.c.from)->sin6_port)),
|
||||
s->si[0].addr.c.from.ss_family == AF_UNIX ? s->listener->luid : get_host_port(&s->si[0].addr.c.from),
|
||||
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,
|
||||
fe->id, be->id, svid,
|
||||
|
@ -915,9 +915,7 @@ void http_sess_clflog(struct session *s)
|
||||
w = snprintf(h, sizeof(tmpline) - (h - tmpline),
|
||||
" %d %03d",
|
||||
s->req->prod->addr.c.from.ss_family == AF_UNIX ? s->listener->luid :
|
||||
ntohs((s->req->prod->addr.c.from.ss_family == AF_INET) ?
|
||||
((struct sockaddr_in *)&s->req->prod->addr.c.from)->sin_port :
|
||||
((struct sockaddr_in6 *)&s->req->prod->addr.c.from)->sin6_port),
|
||||
get_host_port(&s->req->prod->addr.c.from),
|
||||
(int)s->logs.accept_date.tv_usec/1000);
|
||||
if (w < 0 || w >= sizeof(tmpline) - (h - tmpline))
|
||||
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->req->prod->addr.c.from.ss_family == AF_UNIX) ? "unix" : pn,
|
||||
(s->req->prod->addr.c.from.ss_family == AF_UNIX) ? s->listener->luid :
|
||||
ntohs((s->req->prod->addr.c.from.ss_family == AF_INET) ?
|
||||
((struct sockaddr_in *)&s->req->prod->addr.c.from)->sin_port :
|
||||
((struct sockaddr_in6 *)&s->req->prod->addr.c.from)->sin6_port),
|
||||
get_host_port(&s->req->prod->addr.c.from),
|
||||
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,
|
||||
fe->id, be->id, svid,
|
||||
|
@ -316,14 +316,7 @@ int tcp_connect_server(struct stream_interface *si)
|
||||
break;
|
||||
|
||||
fdinfo[fd].port_range = srv->sport_range;
|
||||
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;
|
||||
}
|
||||
set_host_port(&src, fdinfo[fd].local_port);
|
||||
|
||||
ret = tcp_bind_socket(fd, flags, &src, &si->addr.s.from);
|
||||
} while (ret != 0); /* binding NOK */
|
||||
@ -1305,11 +1298,7 @@ static int
|
||||
acl_fetch_sport(struct proxy *px, struct session *l4, void *l7, int dir,
|
||||
struct acl_expr *expr, struct acl_test *test)
|
||||
{
|
||||
if (l4->si[0].addr.c.from.ss_family == AF_INET)
|
||||
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
|
||||
if (!(test->i = get_host_port(&l4->si[0].addr.c.from)))
|
||||
return 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))
|
||||
get_frt_addr(l4);
|
||||
|
||||
if (l4->si[0].addr.c.to.ss_family == AF_INET)
|
||||
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
|
||||
if (!(test->i = get_host_port(&l4->si[0].addr.c.to)))
|
||||
return 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))
|
||||
get_frt_addr(l4);
|
||||
|
||||
if (l4->si[0].addr.c.to.ss_family == AF_INET)
|
||||
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
|
||||
if (!(data->integer = get_host_port(&l4->si[0].addr.c.to)))
|
||||
return 0;
|
||||
|
||||
return 1;
|
||||
|
11
src/proxy.c
11
src/proxy.c
@ -733,15 +733,8 @@ void resume_proxies(void)
|
||||
if (!resume_listener(l)) {
|
||||
int port;
|
||||
|
||||
if (l->addr.ss_family == AF_INET6) {
|
||||
port = ntohs(((struct sockaddr_in6 *)(&l->addr))->sin6_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);
|
||||
port = get_host_port(&l->addr);
|
||||
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",
|
||||
|
@ -327,14 +327,7 @@ struct sockaddr_storage *str2sa(const char *str)
|
||||
if (!ret)
|
||||
goto out;
|
||||
|
||||
switch (ret->ss_family) {
|
||||
case AF_INET:
|
||||
((struct sockaddr_in *)ret)->sin_port = htons(port);
|
||||
break;
|
||||
case AF_INET6:
|
||||
((struct sockaddr_in6 *)ret)->sin6_port = htons(port);
|
||||
break;
|
||||
}
|
||||
set_host_port(ret, port);
|
||||
out:
|
||||
free(str2);
|
||||
return ret;
|
||||
@ -383,14 +376,7 @@ struct sockaddr_storage *str2sa_range(const char *str, int *low, int *high)
|
||||
if (!ret)
|
||||
goto out;
|
||||
|
||||
switch (ret->ss_family) {
|
||||
case AF_INET:
|
||||
((struct sockaddr_in *)ret)->sin_port = htons(portl);
|
||||
break;
|
||||
case AF_INET6:
|
||||
((struct sockaddr_in6 *)ret)->sin6_port = htons(portl);
|
||||
break;
|
||||
}
|
||||
set_host_port(ret, portl);
|
||||
|
||||
*low = portl;
|
||||
*high = porth;
|
||||
|
Loading…
Reference in New Issue
Block a user