[git commit] hostname: do not use gethostbyname() for "hostname -s"

Denys Vlasenko vda.linux at googlemail.com
Tue Dec 17 18:13:45 UTC 2013


commit: http://git.busybox.net/busybox/commit/?id=e9355c43263efd8f9b31b83c4e2aeba4a82de75e
branch: http://git.busybox.net/busybox/commit/?id=refs/heads/master

There's no reason to call gethostbyname() on the value returned
by uname() when asked just for a short name of a host.  This may
also be wrong, when uname is set to one value, but in /etc/hosts
(or elsewhere) the "canonical" name is different.  This is often
the case for localhost entry in /etc/hosts:

  127.0.0.1     localhost       myname

With this content of /etc/hosts, and uname being set to myname,
busybox hostname -s will return localhost, while regular
hostname utility returns myname.

Fix this by not calling gethostbyname() for the simple
'hostname -s' use.

Signed-off-by: Michael Tokarev <mjt at tls.msk.ru>
Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 networking/hostname.c |    7 +++++--
 1 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/networking/hostname.c b/networking/hostname.c
index d2516b5..b3e3522 100644
--- a/networking/hostname.c
+++ b/networking/hostname.c
@@ -106,7 +106,7 @@ int hostname_main(int argc UNUSED_PARAM, char **argv)
 		OPT_i = 0x4,
 		OPT_s = 0x8,
 		OPT_F = 0x10,
-		OPT_dfis = 0xf,
+		OPT_dfi = 0x7,
 	};
 
 	unsigned opts;
@@ -134,7 +134,7 @@ int hostname_main(int argc UNUSED_PARAM, char **argv)
 	if (applet_name[0] == 'd') /* dnsdomainname? */
 		opts = OPT_d;
 
-	if (opts & OPT_dfis) {
+	if (opts & OPT_dfi) {
 		/* Cases when we need full hostname (or its part) */
 		struct hostent *hp;
 		char *p;
@@ -159,6 +159,9 @@ int hostname_main(int argc UNUSED_PARAM, char **argv)
 				bb_putchar('\n');
 			}
 		}
+	} else if (opts & OPT_s) {
+		strchrnul(buf, '.')[0] = '\0';
+		puts(buf);
 	} else if (opts & OPT_F) {
 		/* Set the hostname */
 		do_sethostname(hostname_str, 1);


More information about the busybox-cvs mailing list