krb5 commit: Fix bugs in bindresvport_sa() changes
Tom Yu
tlyu at MIT.EDU
Wed Jul 2 17:17:56 EDT 2014
https://github.com/krb5/krb5/commit/158a551b14b017d232066c4a053dc608d87fa172
commit 158a551b14b017d232066c4a053dc608d87fa172
Author: Tom Yu <tlyu at mit.edu>
Date: Wed Jul 2 16:13:23 2014 -0400
Fix bugs in bindresvport_sa() changes
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 | 5 ++++-
src/lib/rpc/svc_udp.c | 5 ++++-
2 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/src/lib/rpc/svc_tcp.c b/src/lib/rpc/svc_tcp.c
index 58f7b0e..7b69c33 100644
--- a/src/lib/rpc/svc_tcp.c
+++ b/src/lib/rpc/svc_tcp.c
@@ -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) {
diff --git a/src/lib/rpc/svc_udp.c b/src/lib/rpc/svc_udp.c
index 460472f..e9f1c3d 100644
--- a/src/lib/rpc/svc_udp.c
+++ b/src/lib/rpc/svc_udp.c
@@ -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) {
More information about the cvs-krb5
mailing list