upstream: let the "Confirm user presence for key ..." ssh-askpass

notification respect $SSH_ASKPASS_REQUIRE; ok markus@

OpenBSD-Commit-ID: 7c1a616b348779bda3b9ad46bf592741f8e206c1
This commit is contained in:
djm@openbsd.org 2020-08-11 09:45:54 +00:00 committed by Damien Miller
parent eaf8672b1b
commit e9c2002891

View File

@ -1,4 +1,4 @@
/* $OpenBSD: readpass.c,v 1.62 2020/07/14 23:57:01 djm Exp $ */ /* $OpenBSD: readpass.c,v 1.63 2020/08/11 09:45:54 djm Exp $ */
/* /*
* Copyright (c) 2001 Markus Friedl. All rights reserved. * Copyright (c) 2001 Markus Friedl. All rights reserved.
* *
@ -235,8 +235,8 @@ notify_start(int force_askpass, const char *fmt, ...)
int devnull; int devnull;
pid_t pid; pid_t pid;
void (*osigchld)(int); void (*osigchld)(int);
const char *askpass; const char *askpass, *s;
struct notifier_ctx *ret; struct notifier_ctx *ret = NULL;
va_start(args, fmt); va_start(args, fmt);
xvasprintf(&prompt, fmt, args); xvasprintf(&prompt, fmt, args);
@ -248,15 +248,19 @@ notify_start(int force_askpass, const char *fmt, ...)
(void)write(STDERR_FILENO, "\r", 1); (void)write(STDERR_FILENO, "\r", 1);
(void)write(STDERR_FILENO, prompt, strlen(prompt)); (void)write(STDERR_FILENO, prompt, strlen(prompt));
(void)write(STDERR_FILENO, "\r\n", 2); (void)write(STDERR_FILENO, "\r\n", 2);
free(prompt); goto out;
return NULL;
} }
if ((askpass = getenv("SSH_ASKPASS")) == NULL) if ((askpass = getenv("SSH_ASKPASS")) == NULL)
askpass = _PATH_SSH_ASKPASS_DEFAULT; askpass = _PATH_SSH_ASKPASS_DEFAULT;
if (getenv("DISPLAY") == NULL || *askpass == '\0') { if (*askpass == '\0') {
debug3("%s: cannot notify", __func__); debug3("%s: cannot notify: no askpass", __func__);
free(prompt); goto out;
return NULL; }
if (getenv("DISPLAY") == NULL &&
((s = getenv(SSH_ASKPASS_REQUIRE_ENV)) == NULL ||
strcmp(s, "force") != 0)) {
debug3("%s: cannot notify: no display", __func__);
goto out;
} }
osigchld = ssh_signal(SIGCHLD, SIG_DFL); osigchld = ssh_signal(SIGCHLD, SIG_DFL);
if ((pid = fork()) == -1) { if ((pid = fork()) == -1) {
@ -284,6 +288,7 @@ notify_start(int force_askpass, const char *fmt, ...)
} }
ret->pid = pid; ret->pid = pid;
ret->osigchld = osigchld; ret->osigchld = osigchld;
out:
free(prompt); free(prompt);
return ret; return ret;
} }