Nmap Development mailing list archives
PATCH: nsock_core.c / do_actual_read() / recv vs. read
From: " mixter () gmail com" <mixter () gmail com>
Date: Mon, 19 May 2008 20:17:22 +0200
Please find a proposed patch below, which will enable nsock to handle non-network socket data. I've tested extensively with ncat, nmap and the now-working nsock_telnet.c tool, everything seems to be working, and (most importantly) nmap scan results are the same. I would like to incorporate it soon. I've kept it minimal, and I also had to watch out to keep the errno as it is in the loop (otherwise it seems, state information from previous read()s may be destroyed, leading to a block in select()). So this is the safe variant. Please give me a go, or better, scream within the next 2-3 days, otherwise I'll commit it. ;) Mixter Index: nsock_core.c =================================================================== --- nsock_core.c (Revision 7540) +++ nsock_core.c (Arbeitskopie) @@ -475,6 +475,8 @@ /* Traditional read() - no SSL - using recv() because that works better on Windows */ do { buflen = recv(iod->sd, buf, sizeof(buf), 0); + /* In case, retry this with a read() - since we may have a non-network socket here! */ + if (buflen == -1 && socket_errno() == ENOTSOCK) buflen = read(iod->sd, buf, sizeof(buf)); if (buflen == -1) err = socket_errno(); if (buflen > 0) { if (fscat(&nse->iobuf, buf, buflen) == -1) { Fyodor wrote: << Good find. If nsock is not currently able to handle these different types of descriptors transparently, I think it should be improved to do so. The application calling Nsock shouldn't have to set a special flag. I'm not sure of the best way to do this though. One option would be that if recv() gives an ENOTSOCK error on a particular socket, try again with read() and set a flag to do read in the future.
_______________________________________________ Sent through the nmap-dev mailing list http://cgi.insecure.org/mailman/listinfo/nmap-dev Archived at http://SecLists.Org
Current thread:
- PATCH: nsock_core.c / do_actual_read() / recv vs. read mixter () gmail com (May 19)
- Re: PATCH: nsock_core.c / do_actual_read() / recv vs. read Fyodor (May 20)