Macro usage for socket lengths.

This commit is contained in:
Mats Erik Andersson
2012-08-03 03:34:38 +02:00
parent eb139e0534
commit a1df58afcb
7 changed files with 27 additions and 8 deletions

View File

@@ -1,3 +1,19 @@
2012-08-03 Mats Erik Andersson <gnu@gisladisker.se>
* configure.ac: Check whether `struct sockaddr_in6'
contains sin6_len. Correctly check for ut_addr_v6
inside `struct utmpx'.
* libinetutils/kcmd.c (kcmd) [SHISHI]: Condition on
HAVE_STRUCT_SOCKADDR_STORAGE_SS_LEN for access to ss_len.
(getport): Likewise.
* ping/libping.c (ping_set_dest): Access sin_len
conditioned on HAVE_STRUCT_SOCKADDR_IN_SIN_LEN.
* src/rexec.c (do_rexec): Build INET6 structure
guided by HAVE_STRUCT_SOCKADDR_IN6_SIN6_LEN.
* src/tftp.c (resolve_name): Access ss_len based on
HAVE_STRUCT_SOCKADDR_STORAGE_SS_LEN.
* src/tftpd.c (main): Likewise.
2012-08-01 Mats Erik Andersson <gnu@gisladisker.se>
Better adaptions to different UTMP implementations.

View File

@@ -619,6 +619,9 @@ AC_CHECK_TYPE(sig_atomic_t, , AC_DEFINE([sig_atomic_t], int, [FIXME]),
IU_CHECK_MEMBERS([struct sockaddr_in.sin_len], , ,
[ #include <sys/types.h>
#include <netinet/in.h> ])
IU_CHECK_MEMBERS([struct sockaddr_in6.sin6_len], , ,
[ #include <sys/types.h>
#include <netinet/in.h> ])
IU_CHECK_MEMBERS([struct sockaddr_storage.ss_len], , ,
[ #include <sys/types.h>
#include <netinet/in.h> ])
@@ -645,7 +648,7 @@ if test "$ac_cv_header_utmpx_h" = yes; then
struct utmpx.ut_exit, struct utmpx.ut_tv,
struct utmpx.ut_session, struct utmpx.ut_syslen,
struct utmpx.ut_host, struct utmpx.ut_ss,
struct utmpx.ut_aadr_v6], , , [#include <utmpx.h>])
struct utmpx.ut_addr_v6], , , [#include <utmpx.h>])
fi
IU_CHECK_MEMBERS([struct ifreq.ifr_index,

View File

@@ -232,7 +232,7 @@ kcmd (Shishi ** h, int *sock, char **ahost, unsigned short rport, char *locuser,
{
case AF_INET6:
len = sizeof (struct sockaddr_in6);
# ifdef HAVE_STRUCT_SOCKADDR_IN_SIN_LEN
# ifdef HAVE_STRUCT_SOCKADDR_STORAGE_SS_LEN
sin.ss_len = len;
# endif
memcpy (&((struct sockaddr_in6 *) &sin)->sin6_addr,
@@ -242,7 +242,7 @@ kcmd (Shishi ** h, int *sock, char **ahost, unsigned short rport, char *locuser,
case AF_INET:
default:
len = sizeof (struct sockaddr_in);
# ifdef HAVE_STRUCT_SOCKADDR_IN_SIN_LEN
# ifdef HAVE_STRUCT_SOCKADDR_STORAGE_SS_LEN
sin.ss_len = len;
# endif
memcpy (&((struct sockaddr_in *) &sin)->sin_addr,
@@ -500,7 +500,7 @@ getport (int *alport, int af)
sin.ss_family = af;
len = (af == AF_INET6) ? sizeof (struct sockaddr_in6)
: sizeof (struct sockaddr_in);
# ifdef HAVE_STRUCT_SOCKADDR_SA_LEN
# ifdef HAVE_STRUCT_SOCKADDR_STORAGE_SS_LEN
sin.ss_len = len;
# endif

View File

@@ -266,7 +266,7 @@ ping_set_dest (PING * ping, char *host)
{
struct sockaddr_in *s_in = &ping->ping_dest.ping_sockaddr;
s_in->sin_family = AF_INET;
#ifdef HAVE_STRUCT_SOCKADDR_SA_LEN
#ifdef HAVE_STRUCT_SOCKADDR_IN_SIN_LEN
s_in->sin_len = sizeof (*s_in);
#endif
if (inet_aton (host, &s_in->sin_addr))

View File

@@ -295,7 +295,7 @@ do_rexec (struct arguments *arguments)
((struct sockaddr_in *) &serv_addr)->sin_port = arguments->err_port;
break;
case AF_INET6:
#ifdef HAVE_STRUCT_SOCKADDR_IN_SIN_LEN
#ifdef HAVE_STRUCT_SOCKADDR_IN6_SIN6_LEN
((struct sockaddr_in6 *) &serv_addr)->sin6_len = addrlen;
#endif
((struct sockaddr_in6 *) &serv_addr)->sin6_family = addr.ss_family;

View File

@@ -328,7 +328,7 @@ resolve_name (char *name)
memset (&ss, 0, sizeof (ss));
ss.ss_family = ai->ai_family;
#if HAVE_STRUCT_SOCKADDR_SA_LEN
#if HAVE_STRUCT_SOCKADDR_STORAGE_SS_LEN
ss.ss_len = ai->ai_addrlen;
#endif
if (bind (f, (struct sockaddr *) &ss, ai->ai_addrlen))

View File

@@ -288,7 +288,7 @@ main (int argc, char *argv[])
}
memset (&sin, 0, sizeof (sin));
sin.ss_family = from.ss_family;
#if HAVE_STRUCT_SOCKADDR_SA_LEN
#if HAVE_STRUCT_SOCKADDR_STORAGE_SS_LEN
sin.ss_len = from.ss_len;
#endif
if (bind (peer, (struct sockaddr *) &sin, fromlen) < 0)