aboutsummaryrefslogtreecommitdiffstats
path: root/kbx/kbxserver.c
diff options
context:
space:
mode:
Diffstat (limited to 'kbx/kbxserver.c')
-rw-r--r--kbx/kbxserver.c34
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