From 5e00c1773d8fd44ba95b39a48e12b0ec94ac8cbe Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Mon, 9 Sep 2019 14:25:02 +0200 Subject: [PATCH] kbx: Fix keyboxd search first. * kbx/kbxserver.c (cmd_next): Switch to mode next if needed. -- Signed-off-by: Werner Koch --- kbx/kbxserver.c | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/kbx/kbxserver.c b/kbx/kbxserver.c index a54444178..df110b301 100644 --- a/kbx/kbxserver.c +++ b/kbx/kbxserver.c @@ -352,10 +352,24 @@ cmd_next (assuan_context_t ctx, char *line) ctrl->no_data_return = opt_no_data; if (ctrl->server_local->multi_search_desc_len) - err = kbxd_search (ctrl, ctrl->server_local->multi_search_desc, - ctrl->server_local->multi_search_desc_len, 0); + { + /* The next condition should never be tru but we better handle + * the first/next transition anyway. */ + if (ctrl->server_local->multi_search_desc[0].mode + == KEYDB_SEARCH_MODE_FIRST) + ctrl->server_local->multi_search_desc[0].mode = KEYDB_SEARCH_MODE_NEXT; + + err = kbxd_search (ctrl, ctrl->server_local->multi_search_desc, + ctrl->server_local->multi_search_desc_len, 0); + } else - err = kbxd_search (ctrl, &ctrl->server_local->search_desc, 1, 0); + { + /* We need to do the transition from first to next here. */ + if (ctrl->server_local->search_desc.mode == KEYDB_SEARCH_MODE_FIRST) + ctrl->server_local->search_desc.mode = KEYDB_SEARCH_MODE_NEXT; + + err = kbxd_search (ctrl, &ctrl->server_local->search_desc, 1, 0); + } if (err) goto leave;