summaryrefslogtreecommitdiffstats
path: root/src/lib
diff options
context:
space:
mode:
authorJohn Kohl <jtkohl@mit.edu>1990-03-08 16:19:38 +0000
committerJohn Kohl <jtkohl@mit.edu>1990-03-08 16:19:38 +0000
commit06a0c77128f24c67e71b3430a92dffe0a0250b1f (patch)
treec534f9fd35fb69cb8e44aae5c1d7cb36984d689b /src/lib
parent7f1587a22a1f23da5e0f18ded9257a4bb1cb2726 (diff)
downloadkrb5-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.c29
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;