nc: fix "nc -nl -p LPORT RHOST" case (was expecting remote port 0). closes bug 837

function                                             old     new   delta
dolisten                                             742     830     +88

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2010-01-08 16:09:45 +01:00
parent 8cd04d1cb6
commit 866710a056

View File

@ -340,16 +340,29 @@ create new one, and bind() it. TODO */
rr = accept(netfd, &remend.u.sa, &remend.len);
if (rr < 0)
bb_perror_msg_and_die("accept");
if (themaddr && memcmp(&remend.u.sa, &themaddr->u.sa, remend.len) != 0) {
/* nc 1.10 bails out instead, and its error message
* is not suppressed by o_verbose */
if (o_verbose) {
char *remaddr = xmalloc_sockaddr2dotted(&remend.u.sa);
bb_error_msg("connect from wrong ip/port %s ignored", remaddr);
free(remaddr);
if (themaddr) {
int sv_port, port, r;
sv_port = get_nport(&remend.u.sa); /* save */
port = get_nport(&themaddr->u.sa);
if (port == 0) {
/* "nc -nl -p LPORT RHOST" (w/o RPORT!):
* we should accept any remote port */
set_nport(&remend, 0); /* blot out remote port# */
}
r = memcmp(&remend.u.sa, &themaddr->u.sa, remend.len);
set_nport(&remend, sv_port); /* restore */
if (r != 0) {
/* nc 1.10 bails out instead, and its error message
* is not suppressed by o_verbose */
if (o_verbose) {
char *remaddr = xmalloc_sockaddr2dotted(&remend.u.sa);
bb_error_msg("connect from wrong ip/port %s ignored", remaddr);
free(remaddr);
}
close(rr);
goto again;
}
close(rr);
goto again;
}
unarm();
} else