[prev in list] [next in list] [prev in thread] [next in thread] 

List:       busybox
Subject:    [PATCH 2/4] Revert 2aeb201 "libbb: new option FEATURE_ETC_SERVICES"
From:       Sergey Ponomarev <stokito () gmail ! com>
Date:       2021-08-25 20:12:38
Message-ID: 20210825201240.98752-2-stokito () gmail ! com
[Download RAW message or body]

Don't lookup /etc/services for well known ports.
In the commit  was added a new function bb_lookup_std_port().
The function is in fact not needed and we may assume that it is always disabled.
Nobody changes ports in the /etc/services i.e. if we know a port it will always \
remain the same. The file can be used only by telnet client and /etc/inetd.conf \
configuration because they may use port names. You may want to change port numbers \
there only to configure a daemon. But this doesn't make sense because it will break a \
client when it will try to call an external daemon which remains on standard port.

For example if you change http to 8080 to make httpd use the port then this will \
break wget if it tries to call an external http url. So clients like wget must not \
use port numbers from /etc/services. Even if we remove the lookup from clients we \
still can't change the port because inted and telnet may do need to make the lookup. \
I.e. they are clients which don't know for sure which port must be used.

Signed-off-by: Sergey Ponomarev <stokito@gmail.com>
---
 include/libbb.h          |  5 -----
 libbb/Config.src         | 12 ------------
 networking/isrv_identd.c |  3 +--
 networking/telnet.c      |  3 +--
 networking/wget.c        |  8 ++++----
 util-linux/rdate.c       |  2 +-
 6 files changed, 7 insertions(+), 26 deletions(-)

diff --git a/include/libbb.h b/include/libbb.h
index 7d6ab4a93..e000ed8b0 100644
--- a/include/libbb.h
+++ b/include/libbb.h
@@ -722,11 +722,6 @@ int setsockopt_bindtodevice(int fd, const char *iface) \
FAST_FUNC;  int bb_getsockname(int sockfd, void *addr, socklen_t addrlen) FAST_FUNC;
 /* NB: returns port in host byte order */
 unsigned bb_lookup_port(const char *port, const char *protocol, unsigned \
                default_port) FAST_FUNC;
-#if ENABLE_FEATURE_ETC_SERVICES
-# define bb_lookup_std_port(portstr, protocol, portnum) bb_lookup_port(portstr, \
                protocol, portnum)
-#else
-# define bb_lookup_std_port(portstr, protocol, portnum) (portnum)
-#endif
 typedef struct len_and_sockaddr {
 	socklen_t len;
 	union {
diff --git a/libbb/Config.src b/libbb/Config.src
index f97de8ef7..886725704 100644
--- a/libbb/Config.src
+++ b/libbb/Config.src
@@ -76,18 +76,6 @@ config FEATURE_ETC_NETWORKS
 	a rarely used feature which allows you to use names
 	instead of IP/mask pairs in route command.
 
-config FEATURE_ETC_SERVICES
-	bool "Consult /etc/services even for well-known ports"
-	default n
-	help
-	Look up e.g. "telnet" and "http" in /etc/services file
-	instead of assuming ports 23 and 80.
-	This is almost never necessary (everybody uses standard ports),
-	and it makes sense to avoid reading this file.
-	If you disable this option, in the cases where port is explicitly
-	specified as a service name (e.g. "telnet HOST PORTNAME"),
-	it will still be looked up in /etc/services.
-
 config FEATURE_EDITING
 	bool "Command line editing"
 	default y
diff --git a/networking/isrv_identd.c b/networking/isrv_identd.c
index f564d604a..5bacfde94 100644
--- a/networking/isrv_identd.c
+++ b/networking/isrv_identd.c
@@ -158,8 +158,7 @@ int fakeidentd_main(int argc UNUSED_PARAM, char **argv)
 
 	fd = 0;
 	if (!(opt & OPT_inetdwait)) {
-		fd = create_and_bind_stream_or_die(bind_address,
-				bb_lookup_std_port("identd", "tcp", 113));
+		fd = create_and_bind_stream_or_die(bind_address, 113);
 		xlisten(fd, 5);
 	}
 
diff --git a/networking/telnet.c b/networking/telnet.c
index 7a0253525..dc088721b 100644
--- a/networking/telnet.c
+++ b/networking/telnet.c
@@ -649,8 +649,7 @@ int telnet_main(int argc UNUSED_PARAM, char **argv)
 	if (!*argv)
 		bb_show_usage();
 	host = *argv++;
-	port = *argv ? bb_lookup_port(*argv++, "tcp", 23)
-		: bb_lookup_std_port("telnet", "tcp", 23);
+	port = *argv ? bb_lookup_port(*argv++, "tcp", 23) : 23;
 	if (*argv) /* extra params?? */
 		bb_show_usage();
 
diff --git a/networking/wget.c b/networking/wget.c
index 6a9604421..46c470c02 100644
--- a/networking/wget.c
+++ b/networking/wget.c
@@ -534,19 +534,19 @@ static void parse_url(const char *src_url, struct host_info *h)
 		h->host = p + 3;
 #if ENABLE_FEATURE_WGET_FTP
 		if (strcmp(url, P_FTP) == 0) {
-			h->port = bb_lookup_std_port(P_FTP, "tcp", 21);
+			h->port = 21;
 			h->protocol = P_FTP;
 		} else
 #endif
 #if FTPS_SUPPORTED
 		if (strcmp(url, P_FTPS) == 0) {
-			h->port = bb_lookup_std_port(P_FTPS, "tcp", 990);
+			h->port = 990;
 			h->protocol = P_FTPS;
 		} else
 #endif
 #if SSL_SUPPORTED
 		if (strcmp(url, P_HTTPS) == 0) {
-			h->port = bb_lookup_std_port(P_HTTPS, "tcp", 443);
+			h->port = 443;
 			h->protocol = P_HTTPS;
 		} else
 #endif
@@ -560,7 +560,7 @@ static void parse_url(const char *src_url, struct host_info *h)
 		// GNU wget is user-friendly and falls back to http://
 		h->host = url;
  http:
-		h->port = bb_lookup_std_port(P_HTTP, "tcp", 80);
+		h->port = 80;
 	}
 
 	// FYI:
diff --git a/util-linux/rdate.c b/util-linux/rdate.c
index 9b80141c9..68d9a7a46 100644
--- a/util-linux/rdate.c
+++ b/util-linux/rdate.c
@@ -45,7 +45,7 @@ static time_t askremotedate(const char *host)
 	alarm(10);
 	signal(SIGALRM, socket_timeout);
 
-	fd = create_and_connect_stream_or_die(host, bb_lookup_std_port("time", "tcp", 37));
+	fd = create_and_connect_stream_or_die(host, 37);
 
 	if (safe_read(fd, &nett, 4) != 4)    /* read time from server */
 		bb_error_msg_and_die("%s: %s", host, "short read");
-- 
2.30.2

_______________________________________________
busybox mailing list
busybox@busybox.net
http://lists.busybox.net/mailman/listinfo/busybox


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic