summaryrefslogtreecommitdiff
path: root/source4/lib/replace/getpass.c
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2007-10-17 14:00:09 +0200
committerStefan Metzmacher <metze@samba.org>2007-12-21 05:43:10 +0100
commit090015a6fb40cf3dd925bc7db9015f91567c475e (patch)
tree86448f65ff1be488c409d009e5bbf2a424e042d1 /source4/lib/replace/getpass.c
parentce7a3abcd8174c9693db853734f3d17bde9a4194 (diff)
downloadsamba-090015a6fb40cf3dd925bc7db9015f91567c475e.tar.gz
samba-090015a6fb40cf3dd925bc7db9015f91567c475e.tar.bz2
samba-090015a6fb40cf3dd925bc7db9015f91567c475e.zip
r25678: reformat getpass() replacement code
metze (cherry picked from commit 3e8f43e3cf97f10be4717978643ef3edca8650a5) (This used to be commit 78da4477a7ef920ff77b41abb841465511b8db31)
Diffstat (limited to 'source4/lib/replace/getpass.c')
-rw-r--r--source4/lib/replace/getpass.c120
1 files changed, 58 insertions, 62 deletions
diff --git a/source4/lib/replace/getpass.c b/source4/lib/replace/getpass.c
index f6a72ad86a..eb69e68f19 100644
--- a/source4/lib/replace/getpass.c
+++ b/source4/lib/replace/getpass.c
@@ -140,69 +140,65 @@ static void catch_signal(int signum,void (*handler)(int ))
char *getsmbpass(const char *prompt)
{
- FILE *in, *out;
- int echo_off;
- static char buf[256];
- static size_t bufsize = sizeof(buf);
- size_t nread;
-
- /* Catch problematic signals */
- catch_signal(SIGINT, SIGNAL_CAST SIG_IGN);
-
- /* Try to write to and read from the terminal if we can.
- If we can't open the terminal, use stderr and stdin. */
-
- in = fopen ("/dev/tty", "w+");
- if (in == NULL)
- {
- in = stdin;
- out = stderr;
- }
- else
- out = in;
-
- setvbuf(in, NULL, _IONBF, 0);
-
- /* Turn echoing off if it is on now. */
-
- if (tcgetattr (fileno (in), &t) == 0)
- {
- if (ECHO_IS_ON(t))
- {
- TURN_ECHO_OFF(t);
- echo_off = tcsetattr (fileno (in), TCSAFLUSH, &t) == 0;
- TURN_ECHO_ON(t);
+ FILE *in, *out;
+ int echo_off;
+ static char buf[256];
+ static size_t bufsize = sizeof(buf);
+ size_t nread;
+
+ /* Catch problematic signals */
+ catch_signal(SIGINT, SIGNAL_CAST SIG_IGN);
+
+ /* Try to write to and read from the terminal if we can.
+ If we can't open the terminal, use stderr and stdin. */
+
+ in = fopen ("/dev/tty", "w+");
+ if (in == NULL) {
+ in = stdin;
+ out = stderr;
+ } else {
+ out = in;
}
- else
- echo_off = 0;
- }
- else
- echo_off = 0;
-
- /* Write the prompt. */
- fputs (prompt, out);
- fflush (out);
-
- /* Read the password. */
- buf[0] = 0;
- fgets(buf, bufsize, in);
- nread = strlen(buf);
- if (buf[nread - 1] == '\n')
- buf[nread - 1] = '\0';
-
- /* Restore echoing. */
- if (echo_off)
- (void) tcsetattr (fileno (in), TCSANOW, &t);
-
- if (in != stdin)
- /* We opened the terminal; now close it. */
- fclose (in);
-
- /* Catch problematic signals */
- catch_signal(SIGINT, SIGNAL_CAST SIG_DFL);
-
- printf("\n");
- return buf;
+
+ setvbuf(in, NULL, _IONBF, 0);
+
+ /* Turn echoing off if it is on now. */
+
+ if (tcgetattr (fileno (in), &t) == 0) {
+ if (ECHO_IS_ON(t)) {
+ TURN_ECHO_OFF(t);
+ echo_off = tcsetattr (fileno (in), TCSAFLUSH, &t) == 0;
+ TURN_ECHO_ON(t);
+ } else {
+ echo_off = 0;
+ }
+ } else {
+ echo_off = 0;
+ }
+
+ /* Write the prompt. */
+ fputs(prompt, out);
+ fflush(out);
+
+ /* Read the password. */
+ buf[0] = 0;
+ fgets(buf, bufsize, in);
+ nread = strlen(buf);
+ if (buf[nread - 1] == '\n')
+ buf[nread - 1] = '\0';
+
+ /* Restore echoing. */
+ if (echo_off)
+ tcsetattr (fileno (in), TCSANOW, &t);
+
+ if (in != stdin) /* We opened the terminal; now close it. */
+ fclose(in);
+
+ /* Catch problematic signals */
+ catch_signal(SIGINT, SIGNAL_CAST SIG_DFL);
+
+ printf("\n");
+ return buf;
}
#else