summaryrefslogtreecommitdiffstats
path: root/usr.bin/ssh/ssh-agent.c
diff options
context:
space:
mode:
authordjm <djm@openbsd.org>2003-06-11 11:18:38 +0000
committerdjm <djm@openbsd.org>2003-06-11 11:18:38 +0000
commit006fce9f9e86b4e4ffe68fefeb7ec5c486e58c4e (patch)
tree3a597c929f54e9f338e57def477b8112c5e2e1db /usr.bin/ssh/ssh-agent.c
parentsync man page with sys/socket.h; (diff)
downloadwireguard-openbsd-006fce9f9e86b4e4ffe68fefeb7ec5c486e58c4e.tar.xz
wireguard-openbsd-006fce9f9e86b4e4ffe68fefeb7ec5c486e58c4e.zip
make agent constraints (lifetime, confirm) work with smartcard keys; ok markus@
Diffstat (limited to 'usr.bin/ssh/ssh-agent.c')
-rw-r--r--usr.bin/ssh/ssh-agent.c25
1 files changed, 21 insertions, 4 deletions
diff --git a/usr.bin/ssh/ssh-agent.c b/usr.bin/ssh/ssh-agent.c
index d29beda5d6f..6b9c3564a18 100644
--- a/usr.bin/ssh/ssh-agent.c
+++ b/usr.bin/ssh/ssh-agent.c
@@ -35,7 +35,7 @@
#include "includes.h"
#include <sys/queue.h>
-RCSID("$OpenBSD: ssh-agent.c,v 1.109 2003/04/08 20:21:29 itojun Exp $");
+RCSID("$OpenBSD: ssh-agent.c,v 1.110 2003/06/11 11:18:38 djm Exp $");
#include <openssl/evp.h>
#include <openssl/md5.h>
@@ -576,13 +576,29 @@ static void
process_add_smartcard_key (SocketEntry *e)
{
char *sc_reader_id = NULL, *pin;
- int i, version, success = 0;
+ int i, version, success = 0, death = 0, confirm = 0;
Key **keys, *k;
Identity *id;
Idtab *tab;
sc_reader_id = buffer_get_string(&e->request, NULL);
pin = buffer_get_string(&e->request, NULL);
+
+ while (buffer_len(&e->request)) {
+ switch (buffer_get_char(&e->request)) {
+ case SSH_AGENT_CONSTRAIN_LIFETIME:
+ death = time(NULL) + buffer_get_int(&e->request);
+ break;
+ case SSH_AGENT_CONSTRAIN_CONFIRM:
+ confirm = 1;
+ break;
+ default:
+ break;
+ }
+ }
+ if (lifetime && !death)
+ death = time(NULL) + lifetime;
+
keys = sc_get_keys(sc_reader_id, pin);
xfree(sc_reader_id);
xfree(pin);
@@ -599,8 +615,8 @@ process_add_smartcard_key (SocketEntry *e)
id = xmalloc(sizeof(Identity));
id->key = k;
id->comment = xstrdup("smartcard key");
- id->death = 0;
- id->confirm = 0;
+ id->death = death;
+ id->confirm = confirm;
TAILQ_INSERT_TAIL(&tab->idlist, id, next);
tab->nentries++;
success = 1;
@@ -744,6 +760,7 @@ process_message(SocketEntry *e)
break;
#ifdef SMARTCARD
case SSH_AGENTC_ADD_SMARTCARD_KEY:
+ case SSH_AGENTC_ADD_SMARTCARD_KEY_CONSTRAINED:
process_add_smartcard_key(e);
break;
case SSH_AGENTC_REMOVE_SMARTCARD_KEY: