diff options
author | Sami Kerola | 2012-10-12 23:11:16 +0200 |
---|---|---|
committer | Karel Zak | 2012-10-22 10:14:36 +0200 |
commit | 74b3df85f7f8d3a34a0b97c02413dd602a7b12c8 (patch) | |
tree | 6f68bf9661f67baed1ac5124575ab6475828fafb /term-utils | |
parent | logger: replace gethostbyname() with getaddrinfo() (diff) | |
download | kernel-qcow2-util-linux-74b3df85f7f8d3a34a0b97c02413dd602a7b12c8.tar.gz kernel-qcow2-util-linux-74b3df85f7f8d3a34a0b97c02413dd602a7b12c8.tar.xz kernel-qcow2-util-linux-74b3df85f7f8d3a34a0b97c02413dd602a7b12c8.zip |
agetty: replace gethostbyname() with getaddrinfo()
The gethostbyname() is legacy function which may be withdrawn in a
future.
Reference: http://pubs.opengroup.org/onlinepubs/009695399/functions/gethostbyname.html
Signed-off-by: Sami Kerola <kerolasa@iki.fi>
Diffstat (limited to 'term-utils')
-rw-r--r-- | term-utils/agetty.8 | 2 | ||||
-rw-r--r-- | term-utils/agetty.c | 24 |
2 files changed, 19 insertions, 7 deletions
diff --git a/term-utils/agetty.8 b/term-utils/agetty.8 index e400ec855..e51017d0d 100644 --- a/term-utils/agetty.8 +++ b/term-utils/agetty.8 @@ -215,7 +215,7 @@ no hostname at all will be shown. \-\-long\-hostname By default the hostname is only printed until the first dot. With this option enabled, the full qualified hostname by gethostname() -or if not found by gethostbyname() is shown. +or if not found by getaddrinfo() is shown. .TP \-\-version Output version information and exit. diff --git a/term-utils/agetty.c b/term-utils/agetty.c index 9bb0fd753..e53a70188 100644 --- a/term-utils/agetty.c +++ b/term-utils/agetty.c @@ -1331,18 +1331,30 @@ static void do_prompt(struct options *op, struct termios *tp) char *hn = xgethostname(); if (hn) { - struct hostent *ht; char *dot = strchr(hn, '.'); + char *cn = hn; + struct addrinfo *res = NULL; if ((op->flags & F_LONGHNAME) == 0) { if (dot) *dot = '\0'; - write_all(STDOUT_FILENO, hn, strlen(hn)); - } else if (dot == NULL && (ht = gethostbyname(hn))) - write_all(STDOUT_FILENO, ht->h_name, strlen(ht->h_name)); - else - write_all(STDOUT_FILENO, hn, strlen(hn)); + + } else if (dot == NULL) { + struct addrinfo hints; + + memset(&hints, 0, sizeof(hints)); + hints.ai_flags = AI_CANONNAME; + + if (!getaddrinfo(hn, NULL, &hints, &res) + && res && res->ai_canonname) + cn = res->ai_canonname; + } + + write_all(STDOUT_FILENO, cn, strlen(cn)); write_all(STDOUT_FILENO, " ", 1); + + if (res) + freeaddrinfo(res); free(hn); } } |