-#if defined(TTY_set) && !defined(OPENSSL_SYS_VMS)
- if (is_a_tty && (TTY_set(fileno(tty),&tty_new) == -1))
-#ifdef OPENSSL_SYS_MPE
- ; /* MPE lies -- echo really has been disabled */
-#else
- return(-1);
-#endif
-#endif
-#ifdef OPENSSL_SYS_VMS
- tty_new[0] = tty_orig[0];
- tty_new[1] = tty_orig[1] | TT$M_NOECHO;
- tty_new[2] = tty_orig[2];
- status = sys$qiow(0,channel,IO$_SETMODE,&iosb,0,0,tty_new,12,0,0,0,0);
- if ((status != SS$_NORMAL) || (iosb.iosb$w_value != SS$_NORMAL))
- return(-1);
-#endif
- ps=2;
-
- while ((!ok) && (number--))
- {
- fputs(prompt,stderr);
- fflush(stderr);
-
- buf[0]='\0';
- fgets(buf,size,tty);
- if (feof(tty)) goto error;
- if (ferror(tty)) goto error;
- if ((p=(char *)strchr(buf,'\n')) != NULL)
- *p='\0';
- else read_till_nl(tty);
- if (verify)
- {
- fprintf(stderr,"\nVerifying password - %s",prompt);
- fflush(stderr);
- buff[0]='\0';
- fgets(buff,size,tty);
- if (feof(tty)) goto error;
- if ((p=(char *)strchr(buff,'\n')) != NULL)
- *p='\0';
- else read_till_nl(tty);
-
- if (strcmp(buf,buff) != 0)
- {
- fprintf(stderr,"\nVerify failure");
- fflush(stderr);
- break;
- /* continue; */
- }
- }
- ok=1;
- }
-
-error:
- fprintf(stderr,"\n");
-#if 0
- perror("fgets(tty)");
-#endif
- /* What can we do if there is an error? */
-#if defined(TTY_set) && !defined(OPENSSL_SYS_VMS)
- if (ps >= 2) TTY_set(fileno(tty),&tty_orig);
-#endif
-#ifdef OPENSSL_SYS_VMS
- if (ps >= 2)
- status = sys$qiow(0,channel,IO$_SETMODE,&iosb,0,0
- ,tty_orig,12,0,0,0,0);
-#endif
-
- if (ps >= 1) popsig();
- if (stdin != tty) fclose(tty);
-#ifdef OPENSSL_SYS_VMS
- status = sys$dassgn(channel);
-#endif
- return(!ok);
- }
+# if defined(TTY_get) && !defined(OPENSSL_SYS_VMS)
+ if (TTY_get(fileno(tty), &tty_orig) == -1) {
+# ifdef ENOTTY
+ if (errno == ENOTTY)
+ is_a_tty = 0;
+ else
+# endif
+# ifdef EINVAL
+ /*
+ * Ariel Glenn ariel@columbia.edu reports that solaris can return
+ * EINVAL instead. This should be ok
+ */
+ if (errno == EINVAL)
+ is_a_tty = 0;
+ else
+# endif
+ return (-1);
+ }
+ memcpy(&(tty_new), &(tty_orig), sizeof(tty_orig));
+# endif
+# ifdef OPENSSL_SYS_VMS
+ status = sys$assign(&terminal, &channel, 0, 0);
+ if (status != SS$_NORMAL)
+ return (-1);
+ status =
+ sys$qiow(0, channel, IO$_SENSEMODE, &iosb, 0, 0, tty_orig, 12, 0, 0,
+ 0, 0);
+ if ((status != SS$_NORMAL) || (iosb.iosb$w_value != SS$_NORMAL))
+ return (-1);
+# endif