VMS UI_OpenSSL: if the TT device isn't a tty, flag instead of error
On all platforms, if the controlling tty isn't an actual tty, this is flagged by setting is_a_tty to zero... except on VMS, where this was treated as an error. Change this to behave like the other platforms. Reviewed-by: Rich Salz <rsalz@openssl.org> (Merged from https://github.com/openssl/openssl/pull/2063)
This commit is contained in:
parent
2d7bbd6c9f
commit
18edbe6519
1 changed files with 28 additions and 20 deletions
|
@ -450,13 +450,17 @@ static int open_console(UI *ui)
|
|||
#endif
|
||||
#ifdef OPENSSL_SYS_VMS
|
||||
status = sys$assign(&terminal, &channel, 0, 0);
|
||||
|
||||
/* if there isn't a TT device, something is very wrong */
|
||||
if (status != SS$_NORMAL)
|
||||
return 0;
|
||||
status =
|
||||
sys$qiow(0, channel, IO$_SENSEMODE, &iosb, 0, 0, tty_orig, 12, 0, 0,
|
||||
0, 0);
|
||||
|
||||
status = sys$qiow(0, channel, IO$_SENSEMODE, &iosb, 0, 0, tty_orig, 12,
|
||||
0, 0, 0, 0);
|
||||
|
||||
/* If IO$_SENSEMODE doesn't work, this is not a terminal device */
|
||||
if ((status != SS$_NORMAL) || (iosb.iosb$w_value != SS$_NORMAL))
|
||||
return 0;
|
||||
is_a_tty = 0;
|
||||
#endif
|
||||
return 1;
|
||||
}
|
||||
|
@ -473,14 +477,15 @@ static int noecho_console(UI *ui)
|
|||
return 0;
|
||||
#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 0;
|
||||
if (is_a_tty) {
|
||||
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 0;
|
||||
}
|
||||
#endif
|
||||
#if defined(_WIN32) && !defined(_WIN32_WCE)
|
||||
if (is_a_tty) {
|
||||
|
@ -504,14 +509,15 @@ static int echo_console(UI *ui)
|
|||
return 0;
|
||||
#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 0;
|
||||
if (is_a_tty) {
|
||||
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 0;
|
||||
}
|
||||
#endif
|
||||
#if defined(_WIN32) && !defined(_WIN32_WCE)
|
||||
if (is_a_tty) {
|
||||
|
@ -531,6 +537,8 @@ static int close_console(UI *ui)
|
|||
fclose(tty_out);
|
||||
#ifdef OPENSSL_SYS_VMS
|
||||
status = sys$dassgn(channel);
|
||||
if (status != SS$_NORMAL)
|
||||
return 0;
|
||||
#endif
|
||||
CRYPTO_THREAD_unlock(ui->lock);
|
||||
|
||||
|
|
Loading…
Reference in a new issue