diff options
| author | John Kohl <jtkohl@mit.edu> | 1990-03-08 16:19:38 +0000 |
|---|---|---|
| committer | John Kohl <jtkohl@mit.edu> | 1990-03-08 16:19:38 +0000 |
| commit | 06a0c77128f24c67e71b3430a92dffe0a0250b1f (patch) | |
| tree | c534f9fd35fb69cb8e44aae5c1d7cb36984d689b /src/lib | |
| parent | 7f1587a22a1f23da5e0f18ded9257a4bb1cb2726 (diff) | |
| download | krb5-06a0c77128f24c67e71b3430a92dffe0a0250b1f.tar.gz krb5-06a0c77128f24c67e71b3430a92dffe0a0250b1f.tar.xz krb5-06a0c77128f24c67e71b3430a92dffe0a0250b1f.zip | |
add real POSIX support
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@371 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/krb5/os/read_pwd.c | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/src/lib/krb5/os/read_pwd.c b/src/lib/krb5/os/read_pwd.c index ccbb64a5c..7e7df2989 100644 --- a/src/lib/krb5/os/read_pwd.c +++ b/src/lib/krb5/os/read_pwd.c @@ -20,7 +20,6 @@ static char rcsid_read_pwd_c[] = #include <krb5/krb5.h> #include <krb5/krb5_err.h> -#include <sys/ioctl.h> #include <stdio.h> #include <errno.h> #include <signal.h> @@ -29,14 +28,20 @@ static char rcsid_read_pwd_c[] = #include <krb5/ext-proto.h> #ifdef POSIX +#include <termios.h> #define sigtype void #else +#include <sys/ioctl.h> #define sigtype int #endif /* POSIX */ extern int errno; +#ifdef POSIX +#define cleanup(errcode) (void) signal(SIGINT, ointrfunc); tcsetattr(0, TCSANOW, &save_control); return errcode; +#else #define cleanup(errcode) (void) signal(SIGINT, ointrfunc); ioctl(0, TIOCSETP, (char *)&tty_savestate); return errcode; +#endif static jmp_buf pwd_jump; @@ -57,11 +62,24 @@ int *size_return; { /* adapted from Kerberos v4 des/read_password.c */ - struct sgttyb tty_state, tty_savestate; char *readin_string = 0; register char *ptr; int scratchchar; sigtype (*ointrfunc)(); +#ifdef POSIX + struct termios echo_control, save_control; + + if (tcgetattr(0, &echo_control) == -1) + return errno; + + save_control = echo_control; + echo_control.c_lflag &= ~(ECHO|ECHONL); + + if (tcsetattr(0, TCSANOW, &echo_control) == -1) + return errno; +#else + /* 4.3BSD style */ + struct sgttyb tty_state, tty_savestate; /* save terminal state */ if (ioctl(0,TIOCGETP,(char *)&tty_savestate) == -1) @@ -72,6 +90,7 @@ int *size_return; tty_state.sg_flags &= ~ECHO; if (ioctl(0,TIOCSETP,(char *)&tty_state) == -1) return errno; +#endif if (setjmp(pwd_jump)) { /* interrupted */ @@ -148,9 +167,13 @@ int *size_return; /* reset intrfunc */ (void) signal(SIGINT, ointrfunc); +#ifdef POSIX + if (tcsetattr(0, TCSANOW, &save_control) == -1) + return errno; +#else if (ioctl(0, TIOCSETP, (char *)&tty_savestate) == -1) return errno; - +#endif *size_return = strlen(return_pwd); return 0; |
