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>
This commit is contained in:
parent
816d8d7a66
commit
2aeb201c97
@ -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;
|
int bb_getsockname(int sockfd, void *addr, socklen_t addrlen) FAST_FUNC;
|
||||||
/* NB: returns port in host byte order */
|
/* NB: returns port in host byte order */
|
||||||
unsigned bb_lookup_port(const char *port, const char *protocol, unsigned default_port) FAST_FUNC;
|
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 {
|
typedef struct len_and_sockaddr {
|
||||||
socklen_t len;
|
socklen_t len;
|
||||||
union {
|
union {
|
||||||
|
@ -76,6 +76,18 @@ config FEATURE_ETC_NETWORKS
|
|||||||
a rarely used feature which allows you to use names
|
a rarely used feature which allows you to use names
|
||||||
instead of IP/mask pairs in route command.
|
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
|
config FEATURE_EDITING
|
||||||
bool "Command line editing"
|
bool "Command line editing"
|
||||||
default y
|
default y
|
||||||
|
@ -159,7 +159,7 @@ int fakeidentd_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
fd = 0;
|
fd = 0;
|
||||||
if (!(opt & OPT_inetdwait)) {
|
if (!(opt & OPT_inetdwait)) {
|
||||||
fd = create_and_bind_stream_or_die(bind_address,
|
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);
|
xlisten(fd, 5);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -643,7 +643,8 @@ int telnet_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
if (!*argv)
|
if (!*argv)
|
||||||
bb_show_usage();
|
bb_show_usage();
|
||||||
host = *argv++;
|
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?? */
|
if (*argv) /* extra params?? */
|
||||||
bb_show_usage();
|
bb_show_usage();
|
||||||
|
|
||||||
|
@ -505,23 +505,23 @@ static void parse_url(const char *src_url, struct host_info *h)
|
|||||||
*p = '\0';
|
*p = '\0';
|
||||||
h->host = p + 3;
|
h->host = p + 3;
|
||||||
if (strcmp(url, P_FTP) == 0) {
|
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
|
} else
|
||||||
#if SSL_SUPPORTED
|
#if SSL_SUPPORTED
|
||||||
# if ENABLE_FEATURE_WGET_HTTPS
|
# if ENABLE_FEATURE_WGET_HTTPS
|
||||||
if (strcmp(url, P_FTPS) == 0) {
|
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;
|
h->protocol = P_FTPS;
|
||||||
} else
|
} else
|
||||||
# endif
|
# endif
|
||||||
if (strcmp(url, P_HTTPS) == 0) {
|
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;
|
h->protocol = P_HTTPS;
|
||||||
} else
|
} else
|
||||||
#endif
|
#endif
|
||||||
if (strcmp(url, P_HTTP) == 0) {
|
if (strcmp(url, P_HTTP) == 0) {
|
||||||
http:
|
http:
|
||||||
h->port = bb_lookup_port(P_HTTP, "tcp", 80);
|
h->port = bb_lookup_std_port(P_HTTP, "tcp", 80);
|
||||||
h->protocol = P_HTTP;
|
h->protocol = P_HTTP;
|
||||||
} else {
|
} else {
|
||||||
*p = ':';
|
*p = ':';
|
||||||
|
@ -45,7 +45,7 @@ static time_t askremotedate(const char *host)
|
|||||||
alarm(10);
|
alarm(10);
|
||||||
signal(SIGALRM, socket_timeout);
|
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 */
|
if (safe_read(fd, &nett, 4) != 4) /* read time from server */
|
||||||
bb_error_msg_and_die("%s: %s", host, "short read");
|
bb_error_msg_and_die("%s: %s", host, "short read");
|
||||||
|
Loading…
Reference in New Issue
Block a user