From e6b32e7d1adf2a0c09743d71dfdbe2742c5884ac Mon Sep 17 00:00:00 2001 From: Karel Zak Date: Mon, 4 Dec 2017 12:31:29 +0100 Subject: [PATCH] login: add LOGIN_PLAIN_PROMPT to login.defs 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 --- login-utils/login.1 | 12 ++++++++++++ login-utils/login.c | 12 +++++++++--- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/login-utils/login.1 b/login-utils/login.1 index 5d43fdcdde..9e4697b12d 100644 --- a/login-utils/login.1 +++ b/login-utils/login.1 @@ -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 diff --git a/login-utils/login.c b/login-utils/login.c index cc14002461..09ee8f8eae 100644 --- a/login-utils/login.c +++ b/login-utils/login.c @@ -677,7 +677,8 @@ static void loginpam_err(pam_handle_t *pamh, int retcode) } /* - * Composes " login: " string; or returns "login: " if -H is given. + * Composes " 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); -- 2.47.3