mirror of git://sourceware.org/git/glibc.git
* inet/rcmd.c (rresvport_af): Change ss to anonymous union
in order to avoid strict alias warnings. (iruserok_af): Ditto for ra.
This commit is contained in:
parent
265cbed8e7
commit
eb286115b1
|
@ -1,3 +1,10 @@
|
||||||
|
2015-05-19 Paul Eggert <eggert@cs.ucla.edu>
|
||||||
|
Steve Ellcey <sellcey@imgtec.com>
|
||||||
|
|
||||||
|
* inet/rcmd.c (rresvport_af): Change ss to anonymous union
|
||||||
|
in order to avoid strict alias warnings.
|
||||||
|
(iruserok_af): Ditto for ra.
|
||||||
|
|
||||||
2015-05-19 James Lemke <jwlemke@codesourcery.com>
|
2015-05-19 James Lemke <jwlemke@codesourcery.com>
|
||||||
|
|
||||||
[BZ #17581]
|
[BZ #17581]
|
||||||
|
|
42
inet/rcmd.c
42
inet/rcmd.c
|
@ -114,10 +114,10 @@ rcmd_af(ahost, rport, locuser, remuser, cmd, fd2p, af)
|
||||||
struct addrinfo hints, *res, *ai;
|
struct addrinfo hints, *res, *ai;
|
||||||
union
|
union
|
||||||
{
|
{
|
||||||
struct sockaddr sa;
|
struct sockaddr sa;
|
||||||
struct sockaddr_storage ss;
|
struct sockaddr_storage ss;
|
||||||
struct sockaddr_in sin;
|
struct sockaddr_in sin;
|
||||||
struct sockaddr_in6 sin6;
|
struct sockaddr_in6 sin6;
|
||||||
} from;
|
} from;
|
||||||
struct pollfd pfd[2];
|
struct pollfd pfd[2];
|
||||||
int32_t oldmask;
|
int32_t oldmask;
|
||||||
|
@ -374,7 +374,11 @@ rresvport_af(alport, family)
|
||||||
int *alport;
|
int *alport;
|
||||||
sa_family_t family;
|
sa_family_t family;
|
||||||
{
|
{
|
||||||
struct sockaddr_storage ss;
|
union {
|
||||||
|
struct sockaddr generic;
|
||||||
|
struct sockaddr_in in;
|
||||||
|
struct sockaddr_in6 in6;
|
||||||
|
} ss;
|
||||||
int s;
|
int s;
|
||||||
size_t len;
|
size_t len;
|
||||||
uint16_t *sport;
|
uint16_t *sport;
|
||||||
|
@ -382,11 +386,11 @@ rresvport_af(alport, family)
|
||||||
switch(family){
|
switch(family){
|
||||||
case AF_INET:
|
case AF_INET:
|
||||||
len = sizeof(struct sockaddr_in);
|
len = sizeof(struct sockaddr_in);
|
||||||
sport = &((struct sockaddr_in *)&ss)->sin_port;
|
sport = &ss.in.sin_port;
|
||||||
break;
|
break;
|
||||||
case AF_INET6:
|
case AF_INET6:
|
||||||
len = sizeof(struct sockaddr_in6);
|
len = sizeof(struct sockaddr_in6);
|
||||||
sport = &((struct sockaddr_in6 *)&ss)->sin6_port;
|
sport = &ss.in6.sin6_port;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
__set_errno (EAFNOSUPPORT);
|
__set_errno (EAFNOSUPPORT);
|
||||||
|
@ -398,9 +402,9 @@ rresvport_af(alport, family)
|
||||||
|
|
||||||
memset (&ss, '\0', sizeof(ss));
|
memset (&ss, '\0', sizeof(ss));
|
||||||
#ifdef SALEN
|
#ifdef SALEN
|
||||||
ss.__ss_len = len;
|
ss.generic.__ss_len = len;
|
||||||
#endif
|
#endif
|
||||||
ss.ss_family = family;
|
ss.generic.sa_family = family;
|
||||||
|
|
||||||
/* Ignore invalid values. */
|
/* Ignore invalid values. */
|
||||||
if (*alport < IPPORT_RESERVED / 2)
|
if (*alport < IPPORT_RESERVED / 2)
|
||||||
|
@ -411,7 +415,7 @@ rresvport_af(alport, family)
|
||||||
int start = *alport;
|
int start = *alport;
|
||||||
do {
|
do {
|
||||||
*sport = htons((uint16_t) *alport);
|
*sport = htons((uint16_t) *alport);
|
||||||
if (__bind(s, (struct sockaddr *)&ss, len) >= 0)
|
if (__bind(s, &ss.generic, len) >= 0)
|
||||||
return s;
|
return s;
|
||||||
if (errno != EADDRINUSE) {
|
if (errno != EADDRINUSE) {
|
||||||
(void)__close(s);
|
(void)__close(s);
|
||||||
|
@ -604,27 +608,29 @@ iruserok_af (raddr, superuser, ruser, luser, af)
|
||||||
const char *ruser, *luser;
|
const char *ruser, *luser;
|
||||||
sa_family_t af;
|
sa_family_t af;
|
||||||
{
|
{
|
||||||
struct sockaddr_storage ra;
|
union {
|
||||||
|
struct sockaddr generic;
|
||||||
|
struct sockaddr_in in;
|
||||||
|
struct sockaddr_in6 in6;
|
||||||
|
} ra;
|
||||||
size_t ralen;
|
size_t ralen;
|
||||||
|
|
||||||
memset (&ra, '\0', sizeof(ra));
|
memset (&ra, '\0', sizeof(ra));
|
||||||
switch (af){
|
switch (af){
|
||||||
case AF_INET:
|
case AF_INET:
|
||||||
ra.ss_family = AF_INET;
|
ra.in.sin_family = AF_INET;
|
||||||
memcpy (&(((struct sockaddr_in *)&ra)->sin_addr), raddr,
|
memcpy (&ra.in.sin_addr, raddr, sizeof(struct in_addr));
|
||||||
sizeof(struct in_addr));
|
|
||||||
ralen = sizeof(struct sockaddr_in);
|
ralen = sizeof(struct sockaddr_in);
|
||||||
break;
|
break;
|
||||||
case AF_INET6:
|
case AF_INET6:
|
||||||
ra.ss_family = AF_INET6;
|
ra.in6.sin6_family = AF_INET6;
|
||||||
memcpy (&(((struct sockaddr_in6 *)&ra)->sin6_addr), raddr,
|
memcpy (&ra.in6.sin6_addr, raddr, sizeof(struct in6_addr));
|
||||||
sizeof(struct in6_addr));
|
|
||||||
ralen = sizeof(struct sockaddr_in6);
|
ralen = sizeof(struct sockaddr_in6);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return ruserok_sa ((struct sockaddr *)&ra, ralen, superuser, ruser, luser);
|
return ruserok_sa (&ra.generic, ralen, superuser, ruser, luser);
|
||||||
}
|
}
|
||||||
libc_hidden_def (iruserok_af)
|
libc_hidden_def (iruserok_af)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue