diff options
author | Damien Miller <djm@mindrot.org> | 2000-10-14 16:23:11 +1100 |
---|---|---|
committer | Damien Miller <djm@mindrot.org> | 2000-10-14 16:23:11 +1100 |
commit | 874d77bb134a21a5cf625956b60173376a993ba8 (patch) | |
tree | 93dd73b2ff1fbf0ad5f3978a2c4e0d8438a0bf7c /readpass.c | |
parent | 89d9796fbedef4eed6956a2c095c7cc25330c28d (diff) |
- (djm) Big OpenBSD sync:
- markus@cvs.openbsd.org 2000/09/30 10:27:44
[log.c]
allow loglevel debug
- markus@cvs.openbsd.org 2000/10/03 11:59:57
[packet.c]
hmac->mac
- markus@cvs.openbsd.org 2000/10/03 12:03:03
[auth-krb4.c auth-passwd.c auth-rh-rsa.c auth-rhosts.c auth-rsa.c auth1.c]
move fake-auth from auth1.c to individual auth methods, disables s/key in
debug-msg
- markus@cvs.openbsd.org 2000/10/03 12:16:48
ssh.c
do not resolve canonname, i have no idea why this was added oin ossh
- markus@cvs.openbsd.org 2000/10/09 15:30:44
ssh-keygen.1 ssh-keygen.c
-X now reads private ssh.com DSA keys, too.
- markus@cvs.openbsd.org 2000/10/09 15:32:34
auth-options.c
clear options on every call.
- markus@cvs.openbsd.org 2000/10/09 15:51:00
authfd.c authfd.h
interop with ssh-agent2, from <res@shore.net>
- markus@cvs.openbsd.org 2000/10/10 14:20:45
compat.c
use rexexp for version string matching
- provos@cvs.openbsd.org 2000/10/10 22:02:18
[kex.c kex.h myproposal.h ssh.h ssh2.h sshconnect2.c sshd.c dh.c dh.h]
First rough implementation of the diffie-hellman group exchange. The
client can ask the server for bigger groups to perform the diffie-hellman
in, thus increasing the attack complexity when using ciphers with longer
keys. University of Windsor provided network, T the company.
- markus@cvs.openbsd.org 2000/10/11 13:59:52
[auth-rsa.c auth2.c]
clear auth options unless auth sucessfull
- markus@cvs.openbsd.org 2000/10/11 14:00:27
[auth-options.h]
clear auth options unless auth sucessfull
- markus@cvs.openbsd.org 2000/10/11 14:03:27
[scp.1 scp.c]
support 'scp -o' with help from mouring@pconline.com
- markus@cvs.openbsd.org 2000/10/11 14:11:35
[dh.c]
Wall
- markus@cvs.openbsd.org 2000/10/11 14:14:40
[auth.h auth2.c readconf.c readconf.h readpass.c servconf.c servconf.h]
[ssh.h sshconnect2.c sshd_config auth2-skey.c cli.c cli.h]
add support for s/key (kbd-interactive) to ssh2, based on work by
mkiernan@avantgo.com and me
- markus@cvs.openbsd.org 2000/10/11 14:27:24
[auth.c auth1.c auth2.c authfile.c cipher.c cipher.h kex.c kex.h]
[myproposal.h packet.c readconf.c session.c ssh.c ssh.h sshconnect1.c]
[sshconnect2.c sshd.c]
new cipher framework
- markus@cvs.openbsd.org 2000/10/11 14:45:21
[cipher.c]
remove DES
- markus@cvs.openbsd.org 2000/10/12 03:59:20
[cipher.c cipher.h sshconnect1.c sshconnect2.c sshd.c]
enable DES in SSH-1 clients only
- markus@cvs.openbsd.org 2000/10/12 08:21:13
[kex.h packet.c]
remove unused
- markus@cvs.openbsd.org 2000/10/13 12:34:46
[sshd.c]
Kludge for F-Secure Macintosh < 1.0.2; appro@fy.chalmers.se
- markus@cvs.openbsd.org 2000/10/13 12:59:15
[cipher.c cipher.h myproposal.h rijndael.c rijndael.h]
rijndael/aes support
- markus@cvs.openbsd.org 2000/10/13 13:10:54
[sshd.8]
more info about -V
- markus@cvs.openbsd.org 2000/10/13 13:12:02
[myproposal.h]
prefer no compression
Diffstat (limited to 'readpass.c')
-rw-r--r-- | readpass.c | 82 |
1 files changed, 9 insertions, 73 deletions
diff --git a/readpass.c b/readpass.c index c38292f15..f3a7dcbed 100644 --- a/readpass.c +++ b/readpass.c | |||
@@ -32,88 +32,24 @@ | |||
32 | */ | 32 | */ |
33 | 33 | ||
34 | #include "includes.h" | 34 | #include "includes.h" |
35 | RCSID("$OpenBSD: readpass.c,v 1.11 2000/06/20 01:39:44 markus Exp $"); | 35 | RCSID("$OpenBSD: readpass.c,v 1.12 2000/10/11 20:14:39 markus Exp $"); |
36 | 36 | ||
37 | #include "xmalloc.h" | 37 | #include "xmalloc.h" |
38 | #include "ssh.h" | 38 | #include "ssh.h" |
39 | 39 | #include "cli.h" | |
40 | volatile int intr; | ||
41 | |||
42 | void | ||
43 | intcatch() | ||
44 | { | ||
45 | intr = 1; | ||
46 | } | ||
47 | 40 | ||
48 | /* | 41 | /* |
49 | * Reads a passphrase from /dev/tty with echo turned off. Returns the | 42 | * Reads a passphrase from /dev/tty with echo turned off. Returns the |
50 | * passphrase (allocated with xmalloc), being very careful to ensure that | 43 | * passphrase (allocated with xmalloc), being very careful to ensure that |
51 | * no other userland buffer is storing the password. | 44 | * no other userland buffer is storing the password. |
52 | */ | 45 | */ |
46 | /* | ||
47 | * Note: the funcationallity of this routing has been moved to | ||
48 | * cli_read_passphrase(). This routing remains to maintain | ||
49 | * compatibility with existing code. | ||
50 | */ | ||
53 | char * | 51 | char * |
54 | read_passphrase(const char *prompt, int from_stdin) | 52 | read_passphrase(char *prompt, int from_stdin) |
55 | { | 53 | { |
56 | char buf[1024], *p, ch; | 54 | return cli_read_passphrase(prompt, from_stdin, 0); |
57 | struct termios tio, saved_tio; | ||
58 | sigset_t oset, nset; | ||
59 | struct sigaction sa, osa; | ||
60 | int input, output, echo = 0; | ||
61 | |||
62 | if (from_stdin) { | ||
63 | input = STDIN_FILENO; | ||
64 | output = STDERR_FILENO; | ||
65 | } else | ||
66 | input = output = open("/dev/tty", O_RDWR); | ||
67 | |||
68 | if (input == -1) | ||
69 | fatal("You have no controlling tty. Cannot read passphrase.\n"); | ||
70 | |||
71 | /* block signals, get terminal modes and turn off echo */ | ||
72 | sigemptyset(&nset); | ||
73 | sigaddset(&nset, SIGTSTP); | ||
74 | (void) sigprocmask(SIG_BLOCK, &nset, &oset); | ||
75 | memset(&sa, 0, sizeof(sa)); | ||
76 | sa.sa_handler = intcatch; | ||
77 | (void) sigaction(SIGINT, &sa, &osa); | ||
78 | |||
79 | intr = 0; | ||
80 | |||
81 | if (tcgetattr(input, &saved_tio) == 0 && (saved_tio.c_lflag & ECHO)) { | ||
82 | echo = 1; | ||
83 | tio = saved_tio; | ||
84 | tio.c_lflag &= ~(ECHO | ECHOE | ECHOK | ECHONL); | ||
85 | (void) tcsetattr(input, TCSANOW, &tio); | ||
86 | } | ||
87 | |||
88 | fflush(stdout); | ||
89 | |||
90 | (void)write(output, prompt, strlen(prompt)); | ||
91 | for (p = buf; read(input, &ch, 1) == 1 && ch != '\n';) { | ||
92 | if (intr) | ||
93 | break; | ||
94 | if (p < buf + sizeof(buf) - 1) | ||
95 | *p++ = ch; | ||
96 | } | ||
97 | *p = '\0'; | ||
98 | if (!intr) | ||
99 | (void)write(output, "\n", 1); | ||
100 | |||
101 | /* restore terminal modes and allow signals */ | ||
102 | if (echo) | ||
103 | tcsetattr(input, TCSANOW, &saved_tio); | ||
104 | (void) sigprocmask(SIG_SETMASK, &oset, NULL); | ||
105 | (void) sigaction(SIGINT, &osa, NULL); | ||
106 | |||
107 | if (intr) { | ||
108 | kill(getpid(), SIGINT); | ||
109 | sigemptyset(&nset); | ||
110 | /* XXX tty has not neccessarily drained by now? */ | ||
111 | sigsuspend(&nset); | ||
112 | } | ||
113 | |||
114 | if (!from_stdin) | ||
115 | (void)close(input); | ||
116 | p = xstrdup(buf); | ||
117 | memset(buf, 0, sizeof(buf)); | ||
118 | return (p); | ||
119 | } | 55 | } |