4743e1
diff -up cups-1.5b1/cups/usersys.c.getpass cups-1.5b1/cups/usersys.c
4743e1
--- cups-1.5b1/cups/usersys.c.getpass	2011-05-20 05:49:49.000000000 +0200
4743e1
+++ cups-1.5b1/cups/usersys.c	2011-05-24 15:41:33.000000000 +0200
4743e1
@@ -43,6 +43,8 @@
4743e1
 #include "cups-private.h"
Tim Waugh cf5e76
 #include <stdlib.h>
Tim Waugh cf5e76
 #include <sys/stat.h>
Tim Waugh cf5e76
+#include <termios.h>
Tim Waugh 7b0f97
+#include <signal.h>
Tim Waugh cf5e76
 #ifdef WIN32
Tim Waugh cf5e76
 #  include <windows.h>
Tim Waugh d50940
 #else
4743e1
@@ -501,13 +503,31 @@ _cupsGetPassword(const char *prompt)	/* 
4743e1
   * empty password is treated as canceling the authentication request.
Tim Waugh d50940
   */
Tim Waugh d50940
 
4743e1
-  const char	*password = getpass(prompt);
4743e1
-					/* Password string */
4743e1
-
4743e1
-  if (!password || !password[0])
4743e1
-    return (NULL);
4743e1
-  else
Tim Waugh cf5e76
+  static char password[100];
Tim Waugh 7b0f97
+  struct termios oldtio, newtio;
Tim Waugh 7b0f97
+  sigset_t oldset, newset;
Tim Waugh cf5e76
+  int nread;
Tim Waugh 7b0f97
+  sigprocmask (SIG_BLOCK, NULL, &newset);
Tim Waugh 7b0f97
+  sigaddset (&newset, SIGINT);
Tim Waugh 7b0f97
+  sigaddset (&newset, SIGTSTP);
Tim Waugh 7b0f97
+  sigprocmask (SIG_BLOCK, &newset, &oldset);
Tim Waugh 7b0f97
+  tcgetattr (STDIN_FILENO, &oldtio);
Tim Waugh 7b0f97
+  newtio = oldtio;
Tim Waugh 7b0f97
+  newtio.c_lflag &= ~ECHO;
Tim Waugh 7b0f97
+  tcsetattr (STDIN_FILENO, TCSAFLUSH, &newtio);
Tim Waugh cf5e76
+  fputs (prompt, stdout);
Tim Waugh cf5e76
+  fflush (stdout);
Tim Waugh cf5e76
+  nread = read (STDIN_FILENO, password, sizeof (password));
Tim Waugh 7b0f97
+  tcsetattr (STDIN_FILENO, TCSAFLUSH, &oldtio);
Tim Waugh cf5e76
+  fputc ('\n', stdout);
Tim Waugh 7b0f97
+  sigprocmask (SIG_SETMASK, &oldset, NULL);
Tim Waugh cf5e76
+  if (nread > 0)
4743e1
+  {
Tim Waugh cf5e76
+    password[nread - 1] = '\0';
4743e1
     return (password);
4743e1
+  }
Tim Waugh cf5e76
+  else
4743e1
+    return (NULL);
Tim Waugh cf5e76
 #endif /* WIN32 */
Tim Waugh d50940
 }
Tim Waugh cf5e76