libbb: new option FEATURE_ETC_SERVICES: if off, /etc/services reads often avoided
No binary (build failed)
—
(log yok)
| @@ -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 { | |
| @@ -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 | |
| @@ -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); | |
| } | |
| @@ -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(); | |
| @@ -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 = ':'; | |
| @@ -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"); | |