diff options
author | Werner Koch <[email protected]> | 2019-09-09 07:01:28 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2019-09-09 07:01:28 +0000 |
commit | 1545b948e1c8e8fa4873d434fb790a88ed96091c (patch) | |
tree | df2046d2340dbb1c8e60bea1e5b6d173652a5691 /kbx/kbxserver.c | |
parent | kbx: Add framework for the SEARCH command (diff) | |
download | gnupg-1545b948e1c8e8fa4873d434fb790a88ed96091c.tar.gz gnupg-1545b948e1c8e8fa4873d434fb790a88ed96091c.zip |
kbx: Allow searching from start.
* kbx/kbxserver.c (cmd_search): Detect empty pattern.
--
Signed-off-by: Werner Koch <[email protected]>
Diffstat (limited to 'kbx/kbxserver.c')
-rw-r--r-- | kbx/kbxserver.c | 34 |
1 files changed, 23 insertions, 11 deletions
diff --git a/kbx/kbxserver.c b/kbx/kbxserver.c index 1f70ef779..a54444178 100644 --- a/kbx/kbxserver.c +++ b/kbx/kbxserver.c @@ -225,22 +225,34 @@ cmd_search (assuan_context_t ctx, char *line) ctrl->server_local->search_any_found = 0; - if (!*line && opt_more) + if (!*line) { - err = set_error (GPG_ERR_INV_ARG, "--more but no pattern"); - goto leave; + if (opt_more) + { + err = set_error (GPG_ERR_INV_ARG, "--more but no pattern"); + goto leave; + } + else if (!*line && ctrl->server_local->search_expecting_more) + { + /* It would be too surprising to first set a pattern but + * finally add no pattern to search the entire DB. */ + err = set_error (GPG_ERR_INV_ARG, "--more pending but no pattern"); + goto leave; + } + else /* No pattern - return the first item. */ + { + memset (&ctrl->server_local->search_desc, 0, + sizeof ctrl->server_local->search_desc); + ctrl->server_local->search_desc.mode = KEYDB_SEARCH_MODE_FIRST; + } } - else if (!*line && ctrl->server_local->search_expecting_more) + else { - /* It would be too surprising to first set a pattern but finally - * add no pattern to search the entire DB. */ - err = set_error (GPG_ERR_INV_ARG, "--more pending but no pattern"); - goto leave; + err = classify_user_id (line, &ctrl->server_local->search_desc, 0); + if (err) + goto leave; } - err = classify_user_id (line, &ctrl->server_local->search_desc, 0); - if (err) - goto leave; if (opt_more || ctrl->server_local->search_expecting_more) { /* More pattern are expected - store the current one and return |