upstream commit

add a -q option to ssh-add to make it quiet on success.

if you want to silence ssh-add without this you generally redirect
the output to /dev/null, but that can hide error output which you
should see.

ok djm@

Upstream-ID: 2f31b9b13f99dcf587e9a8ba443458e6c0d8997c
This commit is contained in:
dlg@openbsd.org 2017-08-29 09:42:29 +00:00 committed by Damien Miller
parent a54eb27dd6
commit 530591a579
2 changed files with 28 additions and 16 deletions

View File

@ -1,4 +1,4 @@
.\" $OpenBSD: ssh-add.1,v 1.64 2017/05/05 10:41:58 naddy Exp $ .\" $OpenBSD: ssh-add.1,v 1.65 2017/08/29 09:42:29 dlg Exp $
.\" .\"
.\" Author: Tatu Ylonen <ylo@cs.hut.fi> .\" Author: Tatu Ylonen <ylo@cs.hut.fi>
.\" Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland .\" Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@ -35,7 +35,7 @@
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
.\" .\"
.Dd $Mdocdate: May 5 2017 $ .Dd $Mdocdate: August 29 2017 $
.Dt SSH-ADD 1 .Dt SSH-ADD 1
.Os .Os
.Sh NAME .Sh NAME
@ -43,7 +43,7 @@
.Nd adds private key identities to the authentication agent .Nd adds private key identities to the authentication agent
.Sh SYNOPSIS .Sh SYNOPSIS
.Nm ssh-add .Nm ssh-add
.Op Fl cDdkLlXx .Op Fl cDdkLlqXx
.Op Fl E Ar fingerprint_hash .Op Fl E Ar fingerprint_hash
.Op Fl t Ar life .Op Fl t Ar life
.Op Ar .Op Ar
@ -134,6 +134,8 @@ Set a maximum lifetime when adding identities to an agent.
The lifetime may be specified in seconds or in a time format The lifetime may be specified in seconds or in a time format
specified in specified in
.Xr sshd_config 5 . .Xr sshd_config 5 .
.It Fl q
Be quiet after a successful operation.
.It Fl X .It Fl X
Unlock the agent. Unlock the agent.
.It Fl x .It Fl x

View File

@ -1,4 +1,4 @@
/* $OpenBSD: ssh-add.c,v 1.133 2017/07/01 13:50:45 djm Exp $ */ /* $OpenBSD: ssh-add.c,v 1.134 2017/08/29 09:42:29 dlg Exp $ */
/* /*
* Author: Tatu Ylonen <ylo@cs.hut.fi> * Author: Tatu Ylonen <ylo@cs.hut.fi>
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@ -102,7 +102,7 @@ clear_pass(void)
} }
static int static int
delete_file(int agent_fd, const char *filename, int key_only) delete_file(int agent_fd, const char *filename, int key_only, int qflag)
{ {
struct sshkey *public, *cert = NULL; struct sshkey *public, *cert = NULL;
char *certpath = NULL, *comment = NULL; char *certpath = NULL, *comment = NULL;
@ -113,7 +113,10 @@ delete_file(int agent_fd, const char *filename, int key_only)
return -1; return -1;
} }
if ((r = ssh_remove_identity(agent_fd, public)) == 0) { if ((r = ssh_remove_identity(agent_fd, public)) == 0) {
fprintf(stderr, "Identity removed: %s (%s)\n", filename, comment); if (!qflag) {
fprintf(stderr, "Identity removed: %s (%s)\n",
filename, comment);
}
ret = 0; ret = 0;
} else } else
fprintf(stderr, "Could not remove identity \"%s\": %s\n", fprintf(stderr, "Could not remove identity \"%s\": %s\n",
@ -138,8 +141,10 @@ delete_file(int agent_fd, const char *filename, int key_only)
certpath, filename); certpath, filename);
if ((r = ssh_remove_identity(agent_fd, cert)) == 0) { if ((r = ssh_remove_identity(agent_fd, cert)) == 0) {
fprintf(stderr, "Identity removed: %s (%s)\n", certpath, if (!qflag) {
comment); fprintf(stderr, "Identity removed: %s (%s)\n",
certpath, comment);
}
ret = 0; ret = 0;
} else } else
fprintf(stderr, "Could not remove identity \"%s\": %s\n", fprintf(stderr, "Could not remove identity \"%s\": %s\n",
@ -179,7 +184,7 @@ delete_all(int agent_fd)
} }
static int static int
add_file(int agent_fd, const char *filename, int key_only) add_file(int agent_fd, const char *filename, int key_only, int qflag)
{ {
struct sshkey *private, *cert; struct sshkey *private, *cert;
char *comment = NULL; char *comment = NULL;
@ -427,13 +432,13 @@ lock_agent(int agent_fd, int lock)
} }
static int static int
do_file(int agent_fd, int deleting, int key_only, char *file) do_file(int agent_fd, int deleting, int key_only, char *file, int qflag)
{ {
if (deleting) { if (deleting) {
if (delete_file(agent_fd, file, key_only) == -1) if (delete_file(agent_fd, file, key_only, qflag) == -1)
return -1; return -1;
} else { } else {
if (add_file(agent_fd, file, key_only) == -1) if (add_file(agent_fd, file, key_only, qflag) == -1)
return -1; return -1;
} }
return 0; return 0;
@ -456,6 +461,7 @@ usage(void)
fprintf(stderr, " -X Unlock agent.\n"); fprintf(stderr, " -X Unlock agent.\n");
fprintf(stderr, " -s pkcs11 Add keys from PKCS#11 provider.\n"); fprintf(stderr, " -s pkcs11 Add keys from PKCS#11 provider.\n");
fprintf(stderr, " -e pkcs11 Remove keys provided by PKCS#11 provider.\n"); fprintf(stderr, " -e pkcs11 Remove keys provided by PKCS#11 provider.\n");
fprintf(stderr, " -q Be quiet after a successful operation.\n");
} }
int int
@ -466,7 +472,7 @@ main(int argc, char **argv)
int agent_fd; int agent_fd;
char *pkcs11provider = NULL; char *pkcs11provider = NULL;
int r, i, ch, deleting = 0, ret = 0, key_only = 0; int r, i, ch, deleting = 0, ret = 0, key_only = 0;
int xflag = 0, lflag = 0, Dflag = 0; int xflag = 0, lflag = 0, Dflag = 0, qflag = 0;
ssh_malloc_init(); /* must be called before any mallocs */ ssh_malloc_init(); /* must be called before any mallocs */
/* Ensure that fds 0, 1 and 2 are open or directed to /dev/null */ /* Ensure that fds 0, 1 and 2 are open or directed to /dev/null */
@ -494,7 +500,7 @@ main(int argc, char **argv)
exit(2); exit(2);
} }
while ((ch = getopt(argc, argv, "klLcdDxXE:e:s:t:")) != -1) { while ((ch = getopt(argc, argv, "klLcdDxXE:e:qs:t:")) != -1) {
switch (ch) { switch (ch) {
case 'E': case 'E':
fingerprint_hash = ssh_digest_alg_by_name(optarg); fingerprint_hash = ssh_digest_alg_by_name(optarg);
@ -539,6 +545,9 @@ main(int argc, char **argv)
goto done; goto done;
} }
break; break;
case 'q':
qflag = 1;
break;
default: default:
usage(); usage();
ret = 1; ret = 1;
@ -587,7 +596,8 @@ main(int argc, char **argv)
default_files[i]); default_files[i]);
if (stat(buf, &st) < 0) if (stat(buf, &st) < 0)
continue; continue;
if (do_file(agent_fd, deleting, key_only, buf) == -1) if (do_file(agent_fd, deleting, key_only, buf,
qflag) == -1)
ret = 1; ret = 1;
else else
count++; count++;
@ -597,7 +607,7 @@ main(int argc, char **argv)
} else { } else {
for (i = 0; i < argc; i++) { for (i = 0; i < argc; i++) {
if (do_file(agent_fd, deleting, key_only, if (do_file(agent_fd, deleting, key_only,
argv[i]) == -1) argv[i], qflag) == -1)
ret = 1; ret = 1;
} }
} }