aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2018-04-17 12:43:54 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2018-04-17 12:43:54 +0200
commit2aeb201c9751d4ee82978c623310e14b9e831b94 (patch)
tree3f4d72e70d39889e981de68b56799ee2bf85ce78
parent816d8d7a668b541cee99469edb90e4917ea11c3e (diff)
downloadbusybox-2aeb201c9751d4ee82978c623310e14b9e831b94.tar.gz
libbb: new option FEATURE_ETC_SERVICES: if off, /etc/services reads often avoided
In practice, "wget http://host.com/" always uses port 80. People explicitly set non-standard ports via options or parameters ("telnet 1.2.3.4 567" or "telnet 1.2.3.4 ftp") instead of modifying /etc/services. function old new delta telnet_main 1466 1464 -2 rdate_main 215 198 -17 fakeidentd_main 269 252 -17 parse_url 459 392 -67 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/4 up/down: 0/-103) Total: -103 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--include/libbb.h5
-rw-r--r--libbb/Config.src12
-rw-r--r--networking/isrv_identd.c2
-rw-r--r--networking/telnet.c3
-rw-r--r--networking/wget.c8
-rw-r--r--util-linux/rdate.c2
6 files changed, 25 insertions, 7 deletions
diff --git a/include/libbb.h b/include/libbb.h
index 646c58bf2..a605c7f03 100644
--- a/include/libbb.h
+++ b/include/libbb.h
@@ -640,6 +640,11 @@ 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 fdf8bbb28..16e16480b 100644
--- a/libbb/Config.src
+++ b/libbb/Config.src
@@ -76,6 +76,18 @@ 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 133d62a65..0c33dde4f 100644
--- a/networking/isrv_identd.c
+++ b/networking/isrv_identd.c
@@ -159,7 +159,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_port("identd", "tcp", 113));
+ bb_lookup_std_port("identd", "tcp", 113));
xlisten(fd, 5);
}
diff --git a/networking/telnet.c b/networking/telnet.c
index 15d6a08d8..1e6be85bd 100644
--- a/networking/telnet.c
+++ b/networking/telnet.c
@@ -643,7 +643,8 @@ int telnet_main(int argc UNUSED_PARAM, char **argv)
if (!*argv)
bb_show_usage();
host = *argv++;
- port = bb_lookup_port(*argv ? *argv++ : "telnet", "tcp", 23);
+ port = *argv ? bb_lookup_port(*argv++, "tcp", 23)
+ : bb_lookup_std_port("telnet", "tcp", 23);
if (*argv) /* extra params?? */
bb_show_usage();
diff --git a/networking/wget.c b/networking/wget.c
index 2650b5384..b6c76e9dc 100644
--- a/networking/wget.c
+++ b/networking/wget.c
@@ -505,23 +505,23 @@ static void parse_url(const char *src_url, struct host_info *h)
*p = '\0';
h->host = p + 3;
if (strcmp(url, P_FTP) == 0) {
- h->port = bb_lookup_port(P_FTP, "tcp", 21);
+ h->port = bb_lookup_std_port(P_FTP, "tcp", 21);
} else
#if SSL_SUPPORTED
# if ENABLE_FEATURE_WGET_HTTPS
if (strcmp(url, P_FTPS) == 0) {
- h->port = bb_lookup_port(P_FTPS, "tcp", 990);
+ h->port = bb_lookup_std_port(P_FTPS, "tcp", 990);
h->protocol = P_FTPS;
} else
# endif
if (strcmp(url, P_HTTPS) == 0) {
- h->port = bb_lookup_port(P_HTTPS, "tcp", 443);
+ h->port = bb_lookup_std_port(P_HTTPS, "tcp", 443);
h->protocol = P_HTTPS;
} else
#endif
if (strcmp(url, P_HTTP) == 0) {
http:
- h->port = bb_lookup_port(P_HTTP, "tcp", 80);
+ h->port = bb_lookup_std_port(P_HTTP, "tcp", 80);
h->protocol = P_HTTP;
} else {
*p = ':';
diff --git a/util-linux/rdate.c b/util-linux/rdate.c
index f27294e25..5ec795208 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_port("time", "tcp", 37));
+ fd = create_and_connect_stream_or_die(host, bb_lookup_std_port("time", "tcp", 37));
if (safe_read(fd, &nett, 4) != 4) /* read time from server */
bb_error_msg_and_die("%s: %s", host, "short read");