aboutsummaryrefslogtreecommitdiff
path: root/security/krb5/files/patch-lib-rpc-clnt_tcp.c
diff options
context:
space:
mode:
Diffstat (limited to 'security/krb5/files/patch-lib-rpc-clnt_tcp.c')
-rw-r--r--security/krb5/files/patch-lib-rpc-clnt_tcp.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/security/krb5/files/patch-lib-rpc-clnt_tcp.c b/security/krb5/files/patch-lib-rpc-clnt_tcp.c
new file mode 100644
index 000000000000..8427e25152e1
--- /dev/null
+++ b/security/krb5/files/patch-lib-rpc-clnt_tcp.c
@@ -0,0 +1,21 @@
+--- lib/rpc/clnt_tcp.c.orig 2011-09-06 02:05:14.000000000 +0000
++++ lib/rpc/clnt_tcp.c 2011-09-06 02:10:30.000000000 +0000
+@@ -187,9 +187,16 @@
+ ct->ct_sock = *sockp;
+ ct->ct_wait.tv_usec = 0;
+ ct->ct_waitset = FALSE;
+- if (raddr == NULL)
+- memset(&ct->ct_addr, 0, sizeof(ct->ct_addr));
++ if (raddr == NULL) {
++ /* Get the remote address from the socket, if it's IPv4. */
++ struct sockaddr_in sin;
++ socklen_t len = sizeof(sin);
++ int ret = getpeername(ct->ct_sock, (struct sockaddr *)&sin, &len);
++ if (ret == 0 && len == sizeof(sin) && sin.sin_family == AF_INET)
++ ct->ct_addr = sin;
+ else
++ memset(&ct->ct_addr, 0, sizeof(ct->ct_addr));
++ } else
+ ct->ct_addr = *raddr;
+
+ /*