summaryrefslogtreecommitdiffstats
path: root/kbx/backend-sqlite.c
diff options
context:
space:
mode:
authorWerner Koch <wk@gnupg.org>2020-09-24 10:27:19 +0200
committerWerner Koch <wk@gnupg.org>2020-09-24 10:37:42 +0200
commit25ad3c22d79d06c16a5fc652b0a6e3ffd99ad2b6 (patch)
tree055829e80850bdec48fcbce915ff9e4de8280021 /kbx/backend-sqlite.c
parentkeyboxd: Fix UDPATE keyblob SQL statement (diff)
downloadgnupg2-25ad3c22d79d06c16a5fc652b0a6e3ffd99ad2b6.tar.xz
gnupg2-25ad3c22d79d06c16a5fc652b0a6e3ffd99ad2b6.zip
keyboxd: Implement multiple search descriptions.
* kbx/kbx-client-util.c (kbx_client_data_simple): New. * kbx/backend-sqlite.c (struct be_sqlite_local_s): Add field descidx. (be_sqlite_search): Use that. * g10/call-keyboxd.c (keydb_search): Implement multi mode. -- With that change the keyboxd is at par with the keybox code. Signed-off-by: Werner Koch <wk@gnupg.org>
Diffstat (limited to 'kbx/backend-sqlite.c')
-rw-r--r--kbx/backend-sqlite.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/kbx/backend-sqlite.c b/kbx/backend-sqlite.c
index 6ba1886d6..0b5155a8f 100644
--- a/kbx/backend-sqlite.c
+++ b/kbx/backend-sqlite.c
@@ -78,6 +78,9 @@ struct be_sqlite_local_s
unsigned int filter_opgp : 1;
unsigned int filter_x509 : 1;
+ /* The current description index. */
+ unsigned int descidx;
+
/* The select statement has been executed with success. */
int select_done;
@@ -690,7 +693,7 @@ run_select_statement (ctrl_t ctrl, be_sqlite_local_t ctx,
unsigned char kidbuf[8];
- descidx = 0; /* Fixme: take from context. */
+ descidx = ctx->descidx;
if (descidx >= ndesc)
{
err = gpg_error (GPG_ERR_EOF);
@@ -985,6 +988,7 @@ be_sqlite_search (ctrl_t ctrl,
/* Reset */
ctx->select_done = 0;
ctx->select_eof = 0;
+ ctx->descidx = 0;
err = 0;
goto leave;
}
@@ -996,6 +1000,7 @@ be_sqlite_search (ctrl_t ctrl,
goto leave;
}
+ again:
if (!ctx->select_done)
{
/* Initial search - run the select. */
@@ -1131,7 +1136,11 @@ be_sqlite_search (ctrl_t ctrl,
}
else if (gpg_err_code (err) == GPG_ERR_SQL_DONE)
{
- /* FIXME: Move on to the next description index. */
+ if (++ctx->descidx < ndesc)
+ {
+ ctx->select_done = 0;
+ goto again;
+ }
err = gpg_error (GPG_ERR_EOF);
ctx->select_eof = 1;
}