mirror of
git://git.gnupg.org/gnupg.git
synced 2025-07-03 22:56:33 +02:00
gpgsm: Add a way to save a found state.
* kbx/keybox-defs.h (keybox_found_s): New. (keybox_handle): Factor FOUND out to above. Add saved_found. * kbx/keybox-init.c (keybox_release): Release saved_found. (keybox_push_found_state, keybox_pop_found_state): New. * sm/keydb.c (keydb_handle): Add field saved_found. (keydb_new): Init it. (keydb_push_found_state, keydb_pop_found_state): New.
This commit is contained in:
parent
99972bd6e9
commit
42c043a8ad
5 changed files with 98 additions and 7 deletions
54
sm/keydb.c
54
sm/keydb.c
|
@ -56,6 +56,7 @@ static int used_resources;
|
|||
struct keydb_handle {
|
||||
int locked;
|
||||
int found;
|
||||
int saved_found;
|
||||
int current;
|
||||
int is_ephemeral;
|
||||
int used; /* items in active */
|
||||
|
@ -265,6 +266,7 @@ keydb_new (int secret)
|
|||
|
||||
hd = xcalloc (1, sizeof *hd);
|
||||
hd->found = -1;
|
||||
hd->saved_found = -1;
|
||||
|
||||
assert (used_resources <= MAX_KEYDB_RESOURCES);
|
||||
for (i=j=0; i < used_resources; i++)
|
||||
|
@ -476,6 +478,58 @@ unlock_all (KEYDB_HANDLE hd)
|
|||
hd->locked = 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Push the last found state if any. */
|
||||
void
|
||||
keydb_push_found_state (KEYDB_HANDLE hd)
|
||||
{
|
||||
if (!hd)
|
||||
return;
|
||||
|
||||
if (hd->found < 0 || hd->found >= hd->used)
|
||||
{
|
||||
hd->saved_found = -1;
|
||||
return;
|
||||
}
|
||||
|
||||
switch (hd->active[hd->found].type)
|
||||
{
|
||||
case KEYDB_RESOURCE_TYPE_NONE:
|
||||
break;
|
||||
case KEYDB_RESOURCE_TYPE_KEYBOX:
|
||||
keybox_push_found_state (hd->active[hd->found].u.kr);
|
||||
break;
|
||||
}
|
||||
|
||||
hd->saved_found = hd->found;
|
||||
hd->found = -1;
|
||||
}
|
||||
|
||||
|
||||
/* Pop the last found state. */
|
||||
void
|
||||
keydb_pop_found_state (KEYDB_HANDLE hd)
|
||||
{
|
||||
if (!hd)
|
||||
return;
|
||||
|
||||
hd->found = hd->saved_found;
|
||||
hd->saved_found = -1;
|
||||
if (hd->found < 0 || hd->found >= hd->used)
|
||||
return;
|
||||
|
||||
switch (hd->active[hd->found].type)
|
||||
{
|
||||
case KEYDB_RESOURCE_TYPE_NONE:
|
||||
break;
|
||||
case KEYDB_RESOURCE_TYPE_KEYBOX:
|
||||
keybox_pop_found_state (hd->active[hd->found].u.kr);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
Return the last found object. Caller must free it. The returned
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue