summaryrefslogtreecommitdiff
path: root/debian/patches/solaris-ttymon.patch
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches/solaris-ttymon.patch')
-rw-r--r--debian/patches/solaris-ttymon.patch65
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);