summaryrefslogtreecommitdiffstats
path: root/login-utils/agetty.c
diff options
context:
space:
mode:
Diffstat (limited to 'login-utils/agetty.c')
-rw-r--r--login-utils/agetty.c37
1 files changed, 37 insertions, 0 deletions
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':
{