Sophie

Sophie

distrib > Mageia > 1 > i586 > media > core-updates-src > by-pkgid > af3bc2e7a0f4ec3df914667f2210a13b > files > 9

cups-1.4.6-3.1.mga1.src.rpm

diff -Naur -x '*.orig' -x '*.rej' -x '*~' cups-1.4.4/cups/usersys.c cups-1.4.4-getpass//cups/usersys.c
--- cups-1.4.4/cups/usersys.c	2010-03-31 00:07:33.000000000 +0200
+++ cups-1.4.4-getpass//cups/usersys.c	2010-09-09 19:57:49.000000000 +0200
@@ -41,6 +41,8 @@
 #include "globals.h"
 #include <stdlib.h>
 #include <sys/stat.h>
+#include <termios.h>
+#include <signal.h>
 #ifdef WIN32
 #  include <windows.h>
 #else
@@ -406,7 +408,29 @@
   * Use the standard getpass function to get a password from the console.
   */
 
-  return (getpass(prompt));
+  static char password[100];
+  struct termios oldtio, newtio;
+  sigset_t oldset, newset;
+  int nread;
+  sigprocmask (SIG_BLOCK, NULL, &newset);
+  sigaddset (&newset, SIGINT);
+  sigaddset (&newset, SIGTSTP);
+  sigprocmask (SIG_BLOCK, &newset, &oldset);
+  tcgetattr (STDIN_FILENO, &oldtio);
+  newtio = oldtio;
+  newtio.c_lflag &= ~ECHO;
+  tcsetattr (STDIN_FILENO, TCSAFLUSH, &newtio);
+  fputs (prompt, stdout);
+  fflush (stdout);
+  nread = read (STDIN_FILENO, password, sizeof (password));
+  tcsetattr (STDIN_FILENO, TCSAFLUSH, &oldtio);
+  fputc ('\n', stdout);
+  sigprocmask (SIG_SETMASK, &oldset, NULL);
+  if (nread > 0)
+    password[nread - 1] = '\0';
+  else
+    password[0] ='\0';
+  return password;
 #endif /* WIN32 */
 }