]> git.ipfire.org Git - thirdparty/krb5.git/commitdiff
Fix bugs in bindresvport_sa() changes 165/head
authorTom Yu <tlyu@mit.edu>
Wed, 2 Jul 2014 20:13:23 +0000 (16:13 -0400)
committerTom Yu <tlyu@mit.edu>
Wed, 2 Jul 2014 21:04:37 +0000 (17:04 -0400)
In svctcp_create() and svcudp_bufcreate(), set sa->sa_len on platforms
where that field exists, so that a subsequent call to socklen() will
return the correct result.

To make the code more self-evidently correct, zero the entire struct
sockaddr_storage object, using the memset(&ss, 0, sizeof(ss)) idiom.

ticket: 7935

src/lib/rpc/svc_tcp.c
src/lib/rpc/svc_udp.c

index 58f7b0e398568e5c4a0902c7e13a8062f59d52a1..7b69c33da9690d0771c5fb01d02bdba32877c89e 100644 (file)
@@ -159,8 +159,11 @@ svctcp_create(
                }
                set_cloexec_fd(sock);
                madesock = TRUE;
-               memset(sa, 0, sizeof(struct sockaddr_in));
+               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 460472fe6a79c17137691d1c2bc43f1a8e99d4f2..e9f1c3d0088eab638a84a3ca08dd0a92e11eccb1 100644 (file)
@@ -130,8 +130,11 @@ svcudp_bufcreate(
                }
                set_cloexec_fd(sock);
                madesock = TRUE;
-               memset(sa, 0, sizeof(struct sockaddr_in));
+               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) {