(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:
@@ -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))
|
||||||
|
Reference in New Issue
Block a user