version 1.2, 2000/10/16 09:38:44 |
version 1.2.2.1, 2001/02/16 20:12:58 |
|
|
RCSID("$OpenBSD$"); |
RCSID("$OpenBSD$"); |
|
|
#include "xmalloc.h" |
#include "xmalloc.h" |
#include "ssh.h" |
#include "log.h" |
|
#include "cli.h" |
|
|
#include <vis.h> |
#include <vis.h> |
|
|
static int cli_input = -1; |
static int cli_input = -1; |
|
|
cli_input = STDIN_FILENO; |
cli_input = STDIN_FILENO; |
cli_output = STDERR_FILENO; |
cli_output = STDERR_FILENO; |
} else { |
} else { |
cli_input = cli_output = open("/dev/tty", O_RDWR); |
cli_input = cli_output = open(_PATH_TTY, O_RDWR); |
if (cli_input < 0) |
if (cli_input < 0) |
fatal("You have no controlling tty. Cannot read passphrase."); |
fatal("You have no controlling tty. Cannot read passphrase."); |
} |
} |
|
|
} |
} |
|
|
static void |
static void |
cli_close() |
cli_close(void) |
{ |
{ |
if (!cli_from_stdin && cli_input >= 0) |
if (!cli_from_stdin && cli_input >= 0) |
close(cli_input); |
close(cli_input); |
|
|
} |
} |
|
|
void |
void |
intrcatch() |
intrcatch(int sig) |
{ |
{ |
intr = 1; |
intr = 1; |
} |
} |
|
|
static void |
static void |
cli_echo_disable() |
cli_echo_disable(void) |
{ |
{ |
sigemptyset(&nset); |
sigemptyset(&nset); |
sigaddset(&nset, SIGTSTP); |
sigaddset(&nset, SIGTSTP); |
|
|
} |
} |
|
|
static void |
static void |
cli_echo_restore() |
cli_echo_restore(void) |
{ |
{ |
if (echo_modified != 0) { |
if (echo_modified != 0) { |
tcsetattr(cli_input, TCSANOW, &otio); |
tcsetattr(cli_input, TCSANOW, &otio); |
|
|
|
|
output = xmalloc(4*size); |
output = xmalloc(4*size); |
for (p = output, i = 0; i < size; i++) { |
for (p = output, i = 0; i < size; i++) { |
if (buf[i] == '\n') |
if (buf[i] == '\n' || buf[i] == '\r') |
*p++ = buf[i]; |
*p++ = buf[i]; |
else |
else |
p = vis(p, buf[i], 0, 0); |
p = vis(p, buf[i], 0, 0); |
} |
} |
len = p - output; |
len = p - output; |
|
|
for (pos = 0; pos < len; pos += ret) { |
for (pos = 0; pos < len; pos += ret) { |
ret = write(cli_output, output + pos, len - pos); |
ret = write(cli_output, output + pos, len - pos); |
if (ret == -1) |
if (ret == -1) { |
|
xfree(output); |
return -1; |
return -1; |
|
} |
} |
} |
|
xfree(output); |
return 0; |
return 0; |
} |
} |
|
|