|
Lines 136-141
Link Here
|
| 136 |
/* Default lifetime (0 == forever) */ |
136 |
/* Default lifetime (0 == forever) */ |
| 137 |
static int lifetime = 0; |
137 |
static int lifetime = 0; |
| 138 |
|
138 |
|
|
|
139 |
#ifdef SMARTCARD |
| 140 |
/* forward declaration needed */ |
| 141 |
static void remove_all_smartcard_keys(); |
| 142 |
#endif /* SMARTCARD */ |
| 143 |
|
| 139 |
static void |
144 |
static void |
| 140 |
close_socket(SocketEntry *e) |
145 |
close_socket(SocketEntry *e) |
| 141 |
{ |
146 |
{ |
|
Lines 330-337
Link Here
|
| 330 |
key = key_from_blob(blob, blen); |
335 |
key = key_from_blob(blob, blen); |
| 331 |
if (key != NULL) { |
336 |
if (key != NULL) { |
| 332 |
Identity *id = lookup_identity(key, 2); |
337 |
Identity *id = lookup_identity(key, 2); |
| 333 |
if (id != NULL && (!id->confirm || confirm_key(id) == 0)) |
338 |
if (id != NULL && (!id->confirm || confirm_key(id) == 0)) { |
| 334 |
ok = key_sign(id->key, &signature, &slen, data, dlen); |
339 |
ok = key_sign(id->key, &signature, &slen, data, dlen); |
|
|
340 |
#ifdef SMARTCARD |
| 341 |
if ((ok != 0) && (id->key->flags &= KEY_FLAG_EXT)) { |
| 342 |
remove_all_smartcard_keys(); |
| 343 |
} |
| 344 |
#endif /* SMARTCARD */ |
| 345 |
} |
| 335 |
key_free(key); |
346 |
key_free(key); |
| 336 |
} |
347 |
} |
| 337 |
buffer_init(&msg); |
348 |
buffer_init(&msg); |
|
Lines 675-680
Link Here
|
| 675 |
} |
686 |
} |
| 676 |
|
687 |
|
| 677 |
static void |
688 |
static void |
|
|
689 |
remove_all_smartcard_keys() |
| 690 |
{ |
| 691 |
/* walk through all stored identities and remove keys on external hardware */ |
| 692 |
Identity *id, *nxt; |
| 693 |
int version; |
| 694 |
Idtab *tab; |
| 695 |
|
| 696 |
for (version = 1; version < 3; version++) { |
| 697 |
tab = idtab_lookup(version); |
| 698 |
for (id = TAILQ_FIRST(&tab->idlist); id; id = nxt) { |
| 699 |
nxt = TAILQ_NEXT(id, next); |
| 700 |
if (id->key->flags &= KEY_FLAG_EXT) { |
| 701 |
debug("Removing hardware key '%s'", id->comment); |
| 702 |
TAILQ_REMOVE(&tab->idlist, id, next); |
| 703 |
free_identity(id); |
| 704 |
tab->nentries--; |
| 705 |
} |
| 706 |
} |
| 707 |
} |
| 708 |
} |
| 709 |
|
| 710 |
static void |
| 678 |
process_remove_smartcard_key(SocketEntry *e) |
711 |
process_remove_smartcard_key(SocketEntry *e) |
| 679 |
{ |
712 |
{ |
| 680 |
char *sc_reader_id = NULL, *pin; |
713 |
char *sc_reader_id = NULL, *pin; |