]> git.ipfire.org Git - thirdparty/krb5.git/commitdiff
Avoid using length fields in socket addresses
authorGreg Hudson <ghudson@mit.edu>
Thu, 3 Jul 2014 16:48:53 +0000 (12:48 -0400)
committerGreg Hudson <ghudson@mit.edu>
Fri, 4 Jul 2014 19:14:03 +0000 (15:14 -0400)
Remove code to set or reference the length fields of socket addresses
(sa_len/sin_len/sin6_len), since they aren't portable and setting them
is not required.  Remove autoconf tests for those fields which are no
longer used or which were never used.

There is one exception: in localaddr.c, we still neeed to reference
sa_len for the definition of ifreq_size on platforms which have
sa_len.  Leave that behind, along with the autoconf test which defines
SA_LEN.

src/clients/klist/klist.c
src/configure.in
src/lib/apputils/net-server.c
src/lib/krb5/os/localaddr.c
src/lib/rpc/clnt_generic.c
src/lib/rpc/clnt_simple.c
src/lib/rpc/getrpcport.c
src/lib/rpc/svc_tcp.c
src/lib/rpc/svc_udp.c
src/tests/resolve/addrinfo-test.c
src/util/support/fake-addrinfo.c

index 9388d1406758691fd117ee61b5c3bfea77d4bd4e..51eaa07930c6489cf5a1bfb64452bc972fbdc6d1 100644 (file)
@@ -822,9 +822,6 @@ void one_addr(a)
         {
             struct sockaddr_in *sinp = ss2sin (&ss);
             sinp->sin_family = AF_INET;
-#ifdef HAVE_SA_LEN
-            sinp->sin_len = sizeof (struct sockaddr_in);
-#endif
             memcpy (&sinp->sin_addr, a->contents, 4);
         }
         break;
@@ -834,9 +831,6 @@ void one_addr(a)
         {
             struct sockaddr_in6 *sin6p = ss2sin6 (&ss);
             sin6p->sin6_family = AF_INET6;
-#ifdef HAVE_SA_LEN
-            sin6p->sin6_len = sizeof (struct sockaddr_in6);
-#endif
             memcpy (&sin6p->sin6_addr, a->contents, 16);
         }
         break;
index 39e37381afe7c7dd615333e6388b34596f465d74..1339379260fcba888b81ccd9f529a381d5cfdac6 100644 (file)
@@ -402,9 +402,6 @@ AC_CHECK_HEADER(regexp.h, [], [],
 #define RETURN(c) return(c)
 #define ERROR(c)
 ])
-AC_CHECK_MEMBERS([struct sockaddr_in.sin_len, struct sockaddr.sa_len], , ,
-  [#include <sys/types.h>
-#include <netinet/in.h>])
 AC_CHECK_MEMBERS([struct stat.st_mtimensec,struct stat.st_mtimespec.tv_nsec,struct stat.st_mtim.tv_nsec],,,[#include <sys/types.h>
 #include <sys/stat.h>])
 KRB5_AC_REGEX_FUNCS
@@ -1003,15 +1000,6 @@ else
 fi
 AC_SUBST(GSSRPC__BSD_TYPEALIASES)
 
-# sockaddr length field checks
-
-AC_CHECK_MEMBERS([struct sockaddr_in.sin_len], , ,
-  [#include <sys/types.h>
-@%:@include <netinet/in.h>])
-AC_CHECK_MEMBERS([struct sockaddr.sa_len], , ,
-  [#include <sys/types.h>
-@%:@include <sys/socket.h>])
-
 AC_MSG_CHECKING([return type of setrpcent])
 AC_CACHE_VAL(k5_cv_type_setrpcent,
 [AC_TRY_COMPILE([#include <netdb.h>
index 558eee34cfcb9e49f113694698ecf12c5ba7657d..1ad64141c97e07acce3989570315b59fc424396c 100644 (file)
@@ -708,16 +708,10 @@ setup_tcp_listener_ports(struct socksetup *data)
 
     memset(&sin4, 0, sizeof(sin4));
     sin4.sin_family = AF_INET;
-#ifdef HAVE_SA_LEN
-    sin4.sin_len = sizeof(sin4);
-#endif
     sin4.sin_addr.s_addr = INADDR_ANY;
 
     memset(&sin6, 0, sizeof(sin6));
     sin6.sin6_family = AF_INET6;
-#ifdef SIN6_LEN
-    sin6.sin6_len = sizeof(sin6);
-#endif
     sin6.sin6_addr = in6addr_any;
 
     FOREACH_ELT (tcp_port_data, i, port) {
@@ -776,16 +770,10 @@ setup_rpc_listener_ports(struct socksetup *data)
 
     memset(&sin4, 0, sizeof(sin4));
     sin4.sin_family = AF_INET;
-#ifdef HAVE_SA_LEN
-    sin4.sin_len = sizeof(sin4);
-#endif
     sin4.sin_addr.s_addr = INADDR_ANY;
 
     memset(&sin6, 0, sizeof(sin6));
     sin6.sin6_family = AF_INET6;
-#ifdef HAVE_SA_LEN
-    sin6.sin6_len = sizeof(sin6);
-#endif
     sin6.sin6_addr = in6addr_any;
 
     FOREACH_ELT (rpc_svc_data, i, svc) {
@@ -846,9 +834,6 @@ setup_udp_pktinfo_ports(struct socksetup *data)
 
         memset(&sa, 0, sizeof(sa));
         sa.sin_family = AF_INET;
-#ifdef HAVE_SA_LEN
-        sa.sin_len = sizeof(sa);
-#endif
         r = setup_udp_port_1(data, (struct sockaddr *)&sa, 4);
         if (r == 0)
             data->do_ipv4_udp_all = FALSE;
@@ -861,9 +846,6 @@ setup_udp_pktinfo_ports(struct socksetup *data)
 
         memset(&sa, 0, sizeof(sa));
         sa.sin6_family = AF_INET6;
-#ifdef HAVE_SA_LEN
-        sa.sin6_len = sizeof(sa);
-#endif
         r = setup_udp_port_1(data, (struct sockaddr *)&sa, 6);
         if (r == 0)
             data->do_ipv6_udp_all = FALSE;
index 0e6a05c664d825a6c7ae7daa7b5ac9a635f01c2a..9f7765254467e21dbbffb9183d9cf1dc49dc0daa 100644 (file)
@@ -243,11 +243,6 @@ addr_eq (const struct sockaddr *s1, const struct sockaddr *s2)
 {
     if (s1->sa_family != s2->sa_family)
         return 0;
-#ifdef HAVE_SA_LEN
-    if (s1->sa_len != s2->sa_len)
-        return 0;
-    return !memcmp (s1, s2, s1->sa_len);
-#else
 #define CMPTYPE(T,F) (!memcmp(&((const T*)s1)->F,&((const T*)s2)->F,sizeof(((const T*)s1)->F)))
     switch (s1->sa_family) {
     case AF_INET:
@@ -258,7 +253,6 @@ addr_eq (const struct sockaddr *s1, const struct sockaddr *s2)
         /* Err on side of duplicate listings.  */
         return 0;
     }
-#endif
 }
 #endif
 
@@ -1402,9 +1396,6 @@ get_localaddrs (krb5_context context, krb5_address ***addr, int use_profile)
                 struct sockaddr_in *sinp = ss2sin (&ss);
                 sinp->sin_family = AF_INET;
                 addrp = &sinp->sin_addr;
-#ifdef HAVE_SA_LEN
-                sinp->sin_len = sizeof (struct sockaddr_in);
-#endif
                 break;
             }
             case ADDRTYPE_INET6:
@@ -1412,9 +1403,6 @@ get_localaddrs (krb5_context context, krb5_address ***addr, int use_profile)
                 struct sockaddr_in6 *sin6p = ss2sin6 (&ss);
                 sin6p->sin6_family = AF_INET6;
                 addrp = &sin6p->sin6_addr;
-#ifdef HAVE_SA_LEN
-                sin6p->sin6_len = sizeof (struct sockaddr_in6);
-#endif
                 break;
             }
             default:
index e2e5b1a831d5c362f2188ef81aa2b7172b153c84..da3e8e8ba7edf2e10a8c79032509384b60fb7129 100644 (file)
@@ -76,9 +76,6 @@ clnt_create(
                return (NULL);
        }
        memset(&sockin, 0, sizeof(sockin));
-#if HAVE_STRUCT_SOCKADDR_IN_SIN_LEN
-       sockin.sin_len = sizeof(sockin);
-#endif
        sockin.sin_family = h->h_addrtype;
        sockin.sin_port = 0;
        memmove((char*)&sockin.sin_addr, h->h_addr, sizeof(sockin.sin_addr));
index c1dc8fee64ce334593d1d05e3ac5d689e0c4a06f..df8f246f210162c02fd5972ca39cfba3584b27d8 100644 (file)
@@ -107,9 +107,6 @@ callrpc(
                memset(&server_addr, 0, sizeof(server_addr));
                memmove((char *)&server_addr.sin_addr, hp->h_addr,
                        sizeof(server_addr.sin_addr));
-#if HAVE_STRUCT_SOCKADDR_IN_SIN_LEN
-               server_addr.sin_len = sizeof(server_addr);
-#endif
                server_addr.sin_family = AF_INET;
                server_addr.sin_port =  0;
                if ((crp->client = clntudp_create(&server_addr, prognum,
index 8247bb39d07e3b033196f88976766254aaa64f9b..32ff739fd77aa3e2d08e1943c420a7546e8525a3 100644 (file)
@@ -54,9 +54,6 @@ gssrpc_getrpcport(
                return (0);
        memset(&addr, 0, sizeof(addr));
        memmove((char *) &addr.sin_addr, hp->h_addr, sizeof(addr.sin_addr));
-#if HAVE_STRUCT_SOCKADDR_IN_SIN_LEN
-       addr.sin_len = sizeof(addr);
-#endif
        addr.sin_family = AF_INET;
        addr.sin_port =  0;
        return (pmap_getport(&addr, prognum, versnum, proto));
index 3d02164817574b1168c59a233252681b3ac9e0ee..f05220316f177a0c877569859d01dd2847b65089 100644 (file)
@@ -161,9 +161,6 @@ svctcp_create(
                madesock = TRUE;
                memset(&ss, 0, sizeof(ss));
                sa->sa_family = AF_INET;
-#ifdef HAVE_SA_LEN
-               sa->sa_len = sizeof(struct sockaddr_in);
-#endif
        } else {
                len = sizeof(struct sockaddr_storage);
                if (getsockname(sock, sa, &len) != 0) {
index 603f56a0bc0dd821e9b962cd71b7301aa4fa496b..928006164d978fbbfcdc4bf742340aa34eb73aba 100644 (file)
@@ -132,9 +132,6 @@ svcudp_bufcreate(
                madesock = TRUE;
                memset(&ss, 0, sizeof(ss));
                sa->sa_family = AF_INET;
-#ifdef HAVE_SA_LEN
-               sa->sa_len = sizeof(struct sockaddr_in);
-#endif
        } else {
                len = sizeof(struct sockaddr_storage);
                if (getsockname(sock, sa, &len) < 0) {
index d53b48a68a0135662cb58855ff8d53d34efded58..b5c6da9420f396f334ff91bc8683c6c18ebf96d5 100644 (file)
@@ -266,12 +266,6 @@ int main (int argc, char *argv[])
         return 1;
     }
 
-#if defined(SIN6_LEN)
-    if (ap->ai_addr->sa_len == 0)
-        printf ("BAD: sa_len not set!\n");
-#endif
-
-
     for (ap2 = ap; ap2; ap2 = ap2->ai_next) {
         char hbuf[NI_MAXHOST], pbuf[NI_MAXSERV];
         /* If we don't do this, even AIX's own getnameinfo will reject
index 6ddf8593f069de64521cf037d2cd580cedc7b8d6..4824a6185c7f4eff3c96c1e18b248daaf2422d10 100644 (file)
@@ -566,9 +566,6 @@ static inline int fai_add_entry (struct addrinfo **result, void *addr,
         sin4->sin_family = AF_INET;
         sin4->sin_addr = *(struct in_addr *)addr;
         sin4->sin_port = port;
-#ifdef HAVE_SA_LEN
-        sin4->sin_len = sizeof (struct sockaddr_in);
-#endif
     }
     if (template->ai_family == AF_INET6) {
         struct sockaddr_in6 *sin6;
@@ -580,9 +577,6 @@ static inline int fai_add_entry (struct addrinfo **result, void *addr,
         sin6->sin6_family = AF_INET6;
         sin6->sin6_addr = *(struct in6_addr *)addr;
         sin6->sin6_port = port;
-#ifdef HAVE_SA_LEN
-        sin6->sin6_len = sizeof (struct sockaddr_in6);
-#endif
     }
     n->ai_next = *result;
     *result = n;
@@ -1294,9 +1288,6 @@ getaddrinfo (const char *name, const char *serv, const struct addrinfo *hint,
            just leftover from previous contents of the memory
            block?).  So, always override what libc returned.  */
         ai->ai_addr->sa_family = ai->ai_family;
-#ifdef HAVE_SA_LEN /* always true on AIX, actually */
-        ai->ai_addr->sa_len = ai->ai_addrlen;
-#endif
     }
 #endif