aboutsummaryrefslogtreecommitdiffstats
path: root/sm/server.c
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2002-02-07 18:43:22 +0000
committerWerner Koch <[email protected]>2002-02-07 18:43:22 +0000
commit2a28f5d0aece3300dea950b6f9bed9dbc1f01fa7 (patch)
tree5ca0c73c6b9289476447ed726b0bd8b1ec6b355c /sm/server.c
parent* decrypt.c (gpgsm_decrypt): Bail out after an decryption error. (diff)
downloadgnupg-2a28f5d0aece3300dea950b6f9bed9dbc1f01fa7.tar.gz
gnupg-2a28f5d0aece3300dea950b6f9bed9dbc1f01fa7.zip
* certlist.c (gpgsm_add_to_certlist): Check that the specified
name identifies a certificate unambiguously. (gpgsm_find_cert): Ditto. * server.c (cmd_listkeys): Check that the data stream is available. (cmd_listsecretkeys): Ditto. (has_option): New. (cmd_sign): Fix ambiguousity in option recognition. * gpgsm.c (main): Enable --logger-fd. * encrypt.c (gpgsm_encrypt): Increased buffer size for better performance. * call-agent.c (gpgsm_agent_pksign): Check the S-Exp received from the agent. * keylist.c (list_cert_colon): Filter out control characters.
Diffstat (limited to '')
-rw-r--r--sm/server.c27
1 files changed, 20 insertions, 7 deletions
diff --git a/sm/server.c b/sm/server.c
index 520a3ddd1..be45060be 100644
--- a/sm/server.c
+++ b/sm/server.c
@@ -42,6 +42,17 @@ struct server_local_s {
CERTLIST recplist;
};
+/* Check whether the option NAME appears in LINE */
+static int
+has_option (const char *line, const char *name)
+{
+ const char *s;
+ int n = strlen (name);
+
+ s = strstr (line, name);
+ return (s && (s == line || spacep (s-1)) && (!s[n] || spacep (s+n)));
+}
+
static void
close_message_fd (CTRL ctrl)
@@ -289,7 +300,7 @@ cmd_sign (ASSUAN_CONTEXT ctx, char *line)
if (out_fd == -1)
return set_error (No_Output, NULL);
- detached = !!strstr (line, "--detached"); /* fixme: this is ambiguous */
+ detached = has_option (line, "--detached");
out_fp = fdopen ( dup(out_fd), "w");
if (!out_fp)
@@ -362,11 +373,12 @@ static int
cmd_listkeys (ASSUAN_CONTEXT ctx, char *line)
{
CTRL ctrl = assuan_get_pointer (ctx);
+ FILE *fp = assuan_get_data_fp (ctx);
+ if (!fp)
+ return set_error (General_Error, "no data stream");
ctrl->with_colons = 1;
- /* fixme: check that the returned data_fp is not NULL */
- gpgsm_list_keys (assuan_get_pointer (ctx), NULL,
- assuan_get_data_fp (ctx), 3);
+ gpgsm_list_keys (assuan_get_pointer (ctx), NULL, fp, 3);
return 0;
}
@@ -375,11 +387,12 @@ static int
cmd_listsecretkeys (ASSUAN_CONTEXT ctx, char *line)
{
CTRL ctrl = assuan_get_pointer (ctx);
+ FILE *fp = assuan_get_data_fp (ctx);
ctrl->with_colons = 1;
- /* fixme: check that the returned data_fp is not NULL */
- gpgsm_list_keys (assuan_get_pointer (ctx), NULL,
- assuan_get_data_fp (ctx), 2);
+ if (!fp)
+ return set_error (General_Error, "no data stream");
+ gpgsm_list_keys (assuan_get_pointer (ctx), NULL, fp, 2);
return 0;
}