From faca5a7f19126d18a4efaeb9c79c22ba37460a7e Mon Sep 17 00:00:00 2001 From: Assar Westerlund Date: Mon, 5 Jul 1999 19:07:05 +0000 Subject: [PATCH] (handle_tcp): always do getpeername, we can't trust recvfrom to return anything sensible git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@6421 ec53bebd-3082-4978-b11e-865c3cabbd6b --- kdc/connect.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/kdc/connect.c b/kdc/connect.c index 7d04f3ca2..493fbb1cc 100644 --- a/kdc/connect.c +++ b/kdc/connect.c @@ -656,17 +656,20 @@ handle_tcp(struct descr *d, int index, int min_free) } sa = (struct sockaddr *)sa_buf; - from_len = sa_size; - n = recvfrom(d[index].s, buf, sizeof(buf), 0, - sa, &from_len); + /* + * We can't trust recvfrom to return an address so we always call + * getpeername. + */ + + n = recvfrom(d[index].s, buf, sizeof(buf), 0, NULL, NULL); if(n < 0){ krb5_warn(context, errno, "recvfrom"); goto out; } - /* sometimes recvfrom doesn't return an address */ - if(from_len == 0) { - from_len = sa_size; - getpeername(d[index].s, sa, &from_len); + from_len = sa_size; + if (getpeername(d[index].s, sa, &from_len) < 0) { + krb5_warn(context, errno, "getpeername"); + goto out; } addr_to_string(sa, from_len, addr, sizeof(addr)); if (grow_descr (&d[index], n))