diff options
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 |