And nobody will use the FEATURE_ETC_SERVICES because it's useless and potentially breaks clients. FTP is always 21 no matter what is written in /etc/services. So let's just inline it as it's made in GNU wget. We have two cases: 1. "Well known port" i.e. that we know for sure in compile time FTP, HTTP e.g. wget http://example.com 2. Port that may differ i.e. that comes from user input: inetd conf. A user may input any port name or port number. E.g. telnet alternate-http example.com http
This commit is about 1 On Thu, 9 Sept 2021 at 22:44, Denys Vlasenko <[email protected]> wrote: > > Why? > Just do not select FEATURE_ETC_SERVICES. > > On Wed, Aug 25, 2021 at 10:14 PM Sergey Ponomarev <[email protected]> wrote: > > > > 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 <[email protected]> > > --- > > 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 > > [email protected] > > http://lists.busybox.net/mailman/listinfo/busybox -- Sergey Ponomarev, skype:stokito _______________________________________________ busybox mailing list [email protected] http://lists.busybox.net/mailman/listinfo/busybox
