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

Denys Vlasenko vda.linux at googlemail.com
Fri Jan 8 15:09:45 UTC 2010


commit: http://git.busybox.net/busybox/commit/?id=866710a05616be518d9d32261b52c9f81a025fe1
branch: http://git.busybox.net/busybox/commit/?id=refs/heads/master

function                                             old     new   delta
dolisten                                             742     830     +88

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 networking/nc_bloaty.c |   31 ++++++++++++++++++++++---------
 1 files changed, 22 insertions(+), 9 deletions(-)

diff --git a/networking/nc_bloaty.c b/networking/nc_bloaty.c
index 9d7c23d..e14d512 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
-- 
1.6.3.3



More information about the busybox-cvs mailing list