Commit 22cc954c authored by Stas Korobeynikov's avatar Stas Korobeynikov Committed by Pavel Vainerman

add readpassphrase for read passphrase

parent bb0e2260
...@@ -126,12 +126,10 @@ read_passphrase(const char *prompt, int flags) ...@@ -126,12 +126,10 @@ read_passphrase(const char *prompt, int flags)
char *askpass = NULL, *ret, buf[1024]; char *askpass = NULL, *ret, buf[1024];
int rppflags, use_askpass = 0, ttyfd; int rppflags, use_askpass = 0, ttyfd;
if (!NxAuthOnlyModeEnabled && !NxModeEnabled && !NXStdinPassEnabled) {
rppflags = (flags & RP_ECHO) ? RPP_ECHO_ON : RPP_ECHO_OFF; rppflags = (flags & RP_ECHO) ? RPP_ECHO_ON : RPP_ECHO_OFF;
if (flags & RP_USE_ASKPASS) if (flags & RP_ALLOW_STDIN) {
use_askpass = 1;
else if (flags & RP_ALLOW_STDIN) {
if (!isatty(STDIN_FILENO)) { if (!isatty(STDIN_FILENO)) {
debug("read_passphrase: stdin is not a tty");
use_askpass = 1; use_askpass = 1;
} }
} else { } else {
...@@ -154,17 +152,37 @@ read_passphrase(const char *prompt, int flags) ...@@ -154,17 +152,37 @@ read_passphrase(const char *prompt, int flags)
askpass = getenv(SSH_ASKPASS_ENV); askpass = getenv(SSH_ASKPASS_ENV);
else else
askpass = _PATH_SSH_ASKPASS_DEFAULT; askpass = _PATH_SSH_ASKPASS_DEFAULT;
if ((ret = ssh_askpass(askpass, prompt)) == NULL) return ssh_askpass(askpass, prompt);
if (!(flags & RP_ALLOW_EOF))
return xstrdup("");
return ret;
} }
if (readpassphrase(prompt, buf, sizeof buf, rppflags) == NULL) { if (readpassphrase(prompt, buf, sizeof buf, rppflags) == NULL) {
if (flags & RP_ALLOW_EOF) if (flags & RP_ALLOW_EOF)
return NULL; return NULL;
return xstrdup(""); return xstrdup("");
} }
} else {
size_t len;
int retr;
fprintf(stdout, "%s", prompt);
fflush(stdout);
len = retr = 0;
do {
retr = read(STDIN_FILENO, buf + len, sizeof(buf) - 1 - len);
if (retr == -1 && errno == EINTR)
continue;
if (retr <= 0)
break;
len += retr;
} while (sizeof(buf) - 1 - len > 0 && buf[len] == '\n');
buf[len-1] = '\0';
fprintf(stdout, "\n");
fflush(stdout);
}
ret = xstrdup(buf); ret = xstrdup(buf);
explicit_bzero(buf, sizeof(buf)); explicit_bzero(buf, sizeof(buf));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment