]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
login: add LOGIN_PLAIN_PROMPT to login.defs
authorKarel Zak <kzak@redhat.com>
Mon, 4 Dec 2017 11:31:29 +0000 (12:31 +0100)
committerKarel Zak <kzak@redhat.com>
Mon, 4 Dec 2017 11:31:29 +0000 (12:31 +0100)
We have command line option -H to disable hostname in login prompt.
Unfortunately, in same cases (e.g. telnetd) it's impossible to specify
login(1) command line options due to hardcoded execl()...

This patch introduces LOGIN_PLAIN_PROMPT boolean for /etc/login.defs
to suppress hostname in the prompt.

Signed-off-by: Karel Zak <kzak@redhat.com>
login-utils/login.1
login-utils/login.c

index 5d43fdcddec884cc8f04d1c2af96770d7396d834..9e4697b12d3849049d6f78541ba596b9c7017787 100644 (file)
@@ -130,6 +130,9 @@ Used by other servers (i.e.,
 to tell
 .B login
 that printing the hostname should be suppressed in the login: prompt.
+See also LOGIN_PLAIN_PROMPT below if your server does not allow to configure
+.B login
+command line.
 .TP
 \fB\-\-help\fR
 Display help text and exit.
@@ -160,6 +163,15 @@ by
 PAM module.
 .RE
 .PP
+.B LOGIN_PLAIN_PROMPT
+(boolean)
+.RS 4
+Tell login that printing the hostname should be suppressed in the login:
+prompt.  This is alternative to the \fB\-H\fR command line option.  The default
+value is
+.IR no .
+.RE
+.PP
 .B LOGIN_TIMEOUT
 (number)
 .RS 4
index cc14002461a1dbe6fdee46e7c1d2f336dcc02392..09ee8f8eae2dde1e5a5741767e062a992d1d3c52 100644 (file)
@@ -677,7 +677,8 @@ static void loginpam_err(pam_handle_t *pamh, int retcode)
 }
 
 /*
- * Composes "<host> login: " string; or returns "login: " if -H is given.
+ * Composes "<host> login: " string; or returns "login: " if -H is given or
+ * LOGIN_PLAIN_PROMPT=yes configured.
  */
 static const char *loginpam_get_prompt(struct login_context *cxt)
 {
@@ -685,11 +686,16 @@ static const char *loginpam_get_prompt(struct login_context *cxt)
        char *prompt, *dflt_prompt = _("login: ");
        size_t sz;
 
-       if (cxt->nohost || !(host = get_thishost(cxt, NULL)))
+       if (cxt->nohost)
+               return dflt_prompt;     /* -H on command line */
+
+       if (getlogindefs_bool("LOGIN_PLAIN_PROMPT", 0) == 1)
                return dflt_prompt;
 
-       sz = strlen(host) + 1 + strlen(dflt_prompt) + 1;
+       if (!(host = get_thishost(cxt, NULL)))
+               return dflt_prompt;
 
+       sz = strlen(host) + 1 + strlen(dflt_prompt) + 1;
        prompt = xmalloc(sz);
        snprintf(prompt, sz, "%s %s", host, dflt_prompt);