]> git.ipfire.org Git - people/ms/ipfire-3.x.git/blame - pkgs/cups/patches/cups-getpass.patch
Move packages to pkgs subdirectory.
[people/ms/ipfire-3.x.git] / pkgs / cups / patches / cups-getpass.patch
CommitLineData
f92713d3
SS
1diff -up cups-1.4.4/cups/usersys.c.getpass cups-1.4.4/cups/usersys.c
2--- cups-1.4.4/cups/usersys.c.getpass 2010-03-30 23:07:33.000000000 +0100
3+++ cups-1.4.4/cups/usersys.c 2010-06-18 09:38:08.368096897 +0100
4@@ -41,6 +41,8 @@
5 #include "globals.h"
6 #include <stdlib.h>
7 #include <sys/stat.h>
8+#include <termios.h>
9+#include <signal.h>
10 #ifdef WIN32
11 # include <windows.h>
12 #else
13@@ -406,7 +408,29 @@ _cupsGetPassword(const char *prompt) /*
14 * Use the standard getpass function to get a password from the console.
15 */
16
17- return (getpass(prompt));
18+ static char password[100];
19+ struct termios oldtio, newtio;
20+ sigset_t oldset, newset;
21+ int nread;
22+ sigprocmask (SIG_BLOCK, NULL, &newset);
23+ sigaddset (&newset, SIGINT);
24+ sigaddset (&newset, SIGTSTP);
25+ sigprocmask (SIG_BLOCK, &newset, &oldset);
26+ tcgetattr (STDIN_FILENO, &oldtio);
27+ newtio = oldtio;
28+ newtio.c_lflag &= ~ECHO;
29+ tcsetattr (STDIN_FILENO, TCSAFLUSH, &newtio);
30+ fputs (prompt, stdout);
31+ fflush (stdout);
32+ nread = read (STDIN_FILENO, password, sizeof (password));
33+ tcsetattr (STDIN_FILENO, TCSAFLUSH, &oldtio);
34+ fputc ('\n', stdout);
35+ sigprocmask (SIG_SETMASK, &oldset, NULL);
36+ if (nread > 0)
37+ password[nread - 1] = '\0';
38+ else
39+ password[0] ='\0';
40+ return password;
41 #endif /* WIN32 */
42 }
43