(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
This commit is contained in:
Assar Westerlund
1999-07-05 19:07:05 +00:00
parent 0117755210
commit faca5a7f19

View File

@@ -656,17 +656,20 @@ handle_tcp(struct descr *d, int index, int min_free)
} }
sa = (struct sockaddr *)sa_buf; sa = (struct sockaddr *)sa_buf;
from_len = sa_size; /*
n = recvfrom(d[index].s, buf, sizeof(buf), 0, * We can't trust recvfrom to return an address so we always call
sa, &from_len); * getpeername.
*/
n = recvfrom(d[index].s, buf, sizeof(buf), 0, NULL, NULL);
if(n < 0){ if(n < 0){
krb5_warn(context, errno, "recvfrom"); krb5_warn(context, errno, "recvfrom");
goto out; goto out;
} }
/* sometimes recvfrom doesn't return an address */ from_len = sa_size;
if(from_len == 0) { if (getpeername(d[index].s, sa, &from_len) < 0) {
from_len = sa_size; krb5_warn(context, errno, "getpeername");
getpeername(d[index].s, sa, &from_len); goto out;
} }
addr_to_string(sa, from_len, addr, sizeof(addr)); addr_to_string(sa, from_len, addr, sizeof(addr));
if (grow_descr (&d[index], n)) if (grow_descr (&d[index], n))