diff options
-rw-r--r-- | login-utils/agetty.8 | 5 | ||||
-rw-r--r-- | login-utils/agetty.c | 37 |
2 files changed, 41 insertions, 1 deletions
diff --git a/login-utils/agetty.8 b/login-utils/agetty.8 index 69be5f2be..dc18691f4 100644 --- a/login-utils/agetty.8 +++ b/login-utils/agetty.8 @@ -217,7 +217,10 @@ n Insert the nodename of the machine, also known as the hostname. .TP o -Insert the domainname of the machine. +Insert the NIS domainname of the machine. +.TP +O +Insert the DNS domainname of the machine. .TP r Insert the release number of the OS, eg. 1.1.9. diff --git a/login-utils/agetty.c b/login-utils/agetty.c index eb9fab560..c82710394 100644 --- a/login-utils/agetty.c +++ b/login-utils/agetty.c @@ -30,6 +30,9 @@ #include <getopt.h> #include <time.h> #include <sys/file.h> +#include <sys/types.h> +#include <sys/socket.h> +#include <netdb.h> #include "xstrncpy.h" #include "nls.h" @@ -122,6 +125,15 @@ #define BUFSIZ 1024 #endif +/* set a maximum length for the hostname, */ +#ifdef HOST_NAME_MAX +# define HOSTNAME_LENGTH HOST_NAME_MAX /* defined by POSIX.1 */ +#elif defined(MAXHOSTNAMELEN) +# define HOSTNAME_LENGTH MAXHOSTNAMELEN /* implemented in current Unix-versions */ +#else +# define HOSTNAME_LENGTH 255 +#endif + /* * When multiple baud rates are specified on the command line, the first one * we will try is the first one specified. @@ -879,6 +891,31 @@ do_prompt(op, tp) } break; + case 'O': + { + char *dom = "unknown_domain"; + char host[HOST_NAME_MAX + 1]; + struct addrinfo hints, *info = NULL; + + memset(&hints, 0, sizeof(hints)); + hints.ai_flags = AI_CANONNAME; + + if (gethostname(host, sizeof(host)) || + getaddrinfo(host, NULL, &hints, &info) || + info == NULL) + fputs(dom, stdout); + else { + char *canon; + + if (info->ai_canonname && + (canon = strchr(info->ai_canonname, '.'))) + dom = canon + 1; + fputs(dom, stdout); + freeaddrinfo(info); + } + } + break; + case 'd': case 't': { |