BUG/MINOR: tools: fix set_net_port() / set_host_port() on IPv4

These two functions were apparently written on the same model as their
parents when added by commit 11bcb6c4f ("[MEDIUM] IPv6 support for syslog")
except that they perform an assignment instead of a return, and as a
result fall through the next case where the assigned value may possibly
be partially overwritten. At least under Linux the port offset is the
same in both sockaddr_in and sockaddr_in6 so the value is written twice
without side effects.

This needs to be backported as far as 1.5.
This commit is contained in:
Willy Tarreau 2018-09-20 10:48:35 +02:00
parent 5cc8a0a7ac
commit 4c0fcc2314
1 changed files with 4 additions and 0 deletions

View File

@ -1007,8 +1007,10 @@ static inline int set_net_port(struct sockaddr_storage *addr, int port)
switch (addr->ss_family) {
case AF_INET:
((struct sockaddr_in *)addr)->sin_port = port;
break;
case AF_INET6:
((struct sockaddr_in6 *)addr)->sin6_port = port;
break;
}
return 0;
}
@ -1019,8 +1021,10 @@ static inline int set_host_port(struct sockaddr_storage *addr, int port)
switch (addr->ss_family) {
case AF_INET:
((struct sockaddr_in *)addr)->sin_port = htons(port);
break;
case AF_INET6:
((struct sockaddr_in6 *)addr)->sin6_port = htons(port);
break;
}
return 0;
}