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:
parent
8cd04d1cb6
commit
866710a056
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user