From 866710a05616be518d9d32261b52c9f81a025fe1 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Fri, 8 Jan 2010 16:09:45 +0100 Subject: 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 --- networking/nc_bloaty.c | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) (limited to 'networking/nc_bloaty.c') diff --git a/networking/nc_bloaty.c b/networking/nc_bloaty.c index 9d7c23dee..e14d512ed 100644 --- a/networking/nc_bloaty.c +++ b/networking/nc_bloaty.c @@ -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 -- cgit v1.2.3