/* read_pwd.c */ /* Copyright (C) 1993 Eric Young - see README for more details */ /* 06-Apr-92 Luke Brennan Support for VMS */ #include "des_locl.h" #include #include #include /* Ick! */ #if defined(__svr4__) || defined(__sgi) || defined(__linux) #define TERMIO #endif #ifndef VMS #ifndef MSDOS #ifdef TERMIO #include #define sgttyb termio #define sg_flags c_lflag /* Really redefine these ioctl's! */ #undef TIOCGETP #define TIOCGETP TCGETA #undef TIOCSETP #define TIOCSETP TCSETA #else /* !TERMIO */ #include #endif #include #else /* MSDOS */ #define fgets(a,b,c) noecho_fgets(a,b,c) #endif #else /* VMS */ #include #include #include #include struct IOSB { short iosb$w_value; short iosb$w_count; long iosb$l_info; }; #endif #ifndef NSIG #define NSIG 32 #endif #ifdef MSDOS static int noecho_fgets(); #endif static void (*savsig[NSIG])(); static jmp_buf save; static void recsig(int sig) { longjmp(save,1); } static void pushsig(void) { int i; for (i=0; i= 2) ioctl(fileno(tty),TIOCSETP,(char *)&tty_orig); #endif #else /* VMS */ if (ps >= 2) status = SYS$QIOW(0,channel,IO$_SETMODE,&iosb,0,0 ,tty_orig,12,0,0,0,0); #endif /* VMS */ if (ps >= 1) popsig(); if (stdin != tty) fclose(tty); #ifdef VMS status = SYS$DASSGN(channel); #endif return(!ok); } int des_read_password(key,prompt,verify) des_cblock *key; char *prompt; int verify; { int ok; char buf[BUFSIZ],buff[BUFSIZ]; if ((ok=read_pw(buf,buff,BUFSIZ,prompt,verify)) == 0) des_string_to_key(buf,key); bzero(buf,BUFSIZ); bzero(buff,BUFSIZ); return(ok); } int des_read_2passwords(key1,key2,prompt,verify) des_cblock *key1; des_cblock *key2; char *prompt; int verify; { int ok; char buf[BUFSIZ],buff[BUFSIZ]; if ((ok=read_pw(buf,buff,BUFSIZ,prompt,verify)) == 0) des_string_to_2keys(buf,key1,key2); bzero(buf,BUFSIZ); bzero(buff,BUFSIZ); return(ok); } int des_read_pw_string(buf,length,prompt,verify) char *buf; int length; char *prompt; int verify; { char buff[BUFSIZ]; int ret; ret=read_pw(buf,buff,(length>BUFSIZ)?BUFSIZ:length,prompt,verify); bzero(buff,BUFSIZ); return(ret); } #ifdef MSDOS static int noecho_fgets(buf,size,tty) char *buf; int size; FILE *tty; { int i; char *p; p=buf; for (;;) { if (size == 0) { *p='\0'; break; } size--; i=getch(); if (i == '\r') i='\n'; *(p++)=i; if (i == '\n') { *p='\0'; break; } } } #endif