diff options
Diffstat (limited to 'debian/patches/solaris-ttymon.patch')
-rw-r--r-- | debian/patches/solaris-ttymon.patch | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/debian/patches/solaris-ttymon.patch b/debian/patches/solaris-ttymon.patch new file mode 100644 index 0000000..ac74593 --- /dev/null +++ b/debian/patches/solaris-ttymon.patch @@ -0,0 +1,65 @@ +Index: b/src/login.c +=================================================================== +--- a/src/login.c 2013-07-27 19:33:24.107846041 +0400 ++++ b/src/login.c 2013-07-27 19:33:47.744886053 +0400 +@@ -517,6 +517,7 @@ + int main (int argc, char **argv) + { + const char *tmptty; ++ const char *ttyprompt; + char tty[BUFSIZ]; + + #ifdef RLOGIN +@@ -628,6 +629,8 @@ + + setup_tty (); + ++ ttyprompt = getenv("TTYPROMPT"); ++ + #ifndef USE_PAM + (void) umask (getdef_num ("UMASK", GETDEF_DEFAULT_UMASK)); + +@@ -735,19 +738,33 @@ + char hostn[256]; + char loginprompt[256]; /* That's one hell of a prompt :) */ + +- /* Make the login prompt look like we want it */ +- if (gethostname (hostn, sizeof (hostn)) == 0) { +- snprintf (loginprompt, +- sizeof (loginprompt), +- _("%s login: "), hostn); ++ if (ttyprompt == NULL || ttyprompt[0] == '\0') { ++ /* Make the login prompt look like we want it */ ++ if (gethostname (hostn, sizeof (hostn)) == 0) { ++ snprintf (loginprompt, ++ sizeof (loginprompt), ++ _("%s login: "), hostn); ++ } else { ++ strncpy (loginprompt, _("login: "), ++ sizeof (loginprompt)); ++ } ++ ++ retcode = pam_set_item (pamh, PAM_USER_PROMPT, loginprompt); ++ PAM_FAIL_CHECK; + } else { +- strncpy (loginprompt, _("login: "), +- sizeof (loginprompt)); ++ ssize_t r; ++ size_t n; ++ retcode = pam_set_item (pamh, PAM_USER_PROMPT, ttyprompt); ++ PAM_FAIL_CHECK; ++ r = getline(&username, &n, stdin); ++ if (r > 0) { ++ if (username[r-1] == '\n') ++ username[r-1] = '\0'; ++ retcode = pam_set_item (pamh, PAM_USER, username); ++ PAM_FAIL_CHECK; ++ } + } + +- retcode = pam_set_item (pamh, PAM_USER_PROMPT, loginprompt); +- PAM_FAIL_CHECK; +- + /* if we didn't get a user on the command line, + set it to NULL */ + get_pam_user (&pam_user); |