=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/ssh/ssh-agent.c,v retrieving revision 1.108.2.2 retrieving revision 1.109 diff -u -r1.108.2.2 -r1.109 --- src/usr.bin/ssh/ssh-agent.c 2004/03/04 18:18:16 1.108.2.2 +++ src/usr.bin/ssh/ssh-agent.c 2003/04/08 20:21:29 1.109 @@ -35,7 +35,7 @@ #include "includes.h" #include -RCSID("$OpenBSD: ssh-agent.c,v 1.108.2.2 2004/03/04 18:18:16 brad Exp $"); +RCSID("$OpenBSD: ssh-agent.c,v 1.109 2003/04/08 20:21:29 itojun Exp $"); #include #include @@ -175,7 +175,7 @@ p = read_passphrase(prompt, RP_ALLOW_EOF); if (p != NULL) { /* - * Accept empty responses and responses consisting + * Accept empty responses and responses consisting * of the word "yes" as affirmative. */ if (*p == '\0' || *p == '\n' || strcasecmp(p, "yes") == 0) @@ -576,29 +576,13 @@ process_add_smartcard_key (SocketEntry *e) { char *sc_reader_id = NULL, *pin; - int i, version, success = 0, death = 0, confirm = 0; + int i, version, success = 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); @@ -614,9 +598,9 @@ if (lookup_identity(k, version) == NULL) { id = xmalloc(sizeof(Identity)); id->key = k; - id->comment = sc_get_key_label(k); - id->death = death; - id->confirm = confirm; + id->comment = xstrdup("smartcard key"); + id->death = 0; + id->confirm = 0; TAILQ_INSERT_TAIL(&tab->idlist, id, next); tab->nentries++; success = 1; @@ -760,7 +744,6 @@ 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: @@ -780,7 +763,7 @@ static void new_socket(sock_type type, int fd) { - u_int i, old_alloc, new_alloc; + u_int i, old_alloc; if (fcntl(fd, F_SETFL, O_NONBLOCK) < 0) error("fcntl O_NONBLOCK: %s", strerror(errno)); @@ -791,26 +774,25 @@ for (i = 0; i < sockets_alloc; i++) if (sockets[i].type == AUTH_UNUSED) { sockets[i].fd = fd; + sockets[i].type = type; buffer_init(&sockets[i].input); buffer_init(&sockets[i].output); buffer_init(&sockets[i].request); - sockets[i].type = type; return; } old_alloc = sockets_alloc; - new_alloc = sockets_alloc + 10; + sockets_alloc += 10; if (sockets) - sockets = xrealloc(sockets, new_alloc * sizeof(sockets[0])); + sockets = xrealloc(sockets, sockets_alloc * sizeof(sockets[0])); else - sockets = xmalloc(new_alloc * sizeof(sockets[0])); - for (i = old_alloc; i < new_alloc; i++) + sockets = xmalloc(sockets_alloc * sizeof(sockets[0])); + for (i = old_alloc; i < sockets_alloc; i++) sockets[i].type = AUTH_UNUSED; - sockets_alloc = new_alloc; + sockets[old_alloc].type = type; sockets[old_alloc].fd = fd; buffer_init(&sockets[old_alloc].input); buffer_init(&sockets[old_alloc].output); buffer_init(&sockets[old_alloc].request); - sockets[old_alloc].type = type; } static int @@ -945,7 +927,7 @@ } static void -cleanup_socket(void) +cleanup_socket(void *p) { if (socket_name[0]) unlink(socket_name); @@ -953,17 +935,17 @@ rmdir(socket_dir); } -void +static void cleanup_exit(int i) { - cleanup_socket(); - _exit(i); + cleanup_socket(NULL); + exit(i); } static void cleanup_handler(int sig) { - cleanup_socket(); + cleanup_socket(NULL); _exit(2); } @@ -1087,7 +1069,7 @@ if (agentsocket == NULL) { /* Create private directory for agent socket */ - strlcpy(socket_dir, "/tmp/ssh-XXXXXXXXXX", sizeof socket_dir); + strlcpy(socket_dir, "/tmp/ssh-XXXXXXXX", sizeof socket_dir); if (mkdtemp(socket_dir) == NULL) { perror("mkdtemp: private socket dir"); exit(1); @@ -1116,7 +1098,7 @@ perror("bind"); cleanup_exit(1); } - if (listen(sock, SSH_LISTEN_BACKLOG) < 0) { + if (listen(sock, 128) < 0) { perror("listen"); cleanup_exit(1); } @@ -1185,6 +1167,7 @@ } skip: + fatal_add_cleanup(cleanup_socket, NULL); new_socket(AUTH_SOCKET, sock); if (ac > 0) { signal(SIGALRM, check_parent_exists);