aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sm/ChangeLog9
-rw-r--r--sm/decrypt.c9
-rw-r--r--sm/server.c72
3 files changed, 45 insertions, 45 deletions
diff --git a/sm/ChangeLog b/sm/ChangeLog
index 703f8cdf3..c2cf619a4 100644
--- a/sm/ChangeLog
+++ b/sm/ChangeLog
@@ -1,3 +1,12 @@
+2002-02-06 Werner Koch <[email protected]>
+
+ * decrypt.c (gpgsm_decrypt): Bail out after an decryption error.
+
+ * server.c (reset_notify): Close input and output FDs.
+ (cmd_encrypt,cmd_decrypt,cmd_verify,cmd_sign.cmd_import)
+ (cmd_genkey): Close the FDs and release the recipient list even in
+ the error case.
+
2002-02-01 Marcus Brinkmann <[email protected]>
* sign.c (gpgsm_sign): Do not release certificate twice.
diff --git a/sm/decrypt.c b/sm/decrypt.c
index 3068262d7..d16bb59e4 100644
--- a/sm/decrypt.c
+++ b/sm/decrypt.c
@@ -385,8 +385,13 @@ gpgsm_decrypt (CTRL ctrl, int in_fd, FILE *out_fp)
&dfparm);
xfree (enc_val);
if (rc)
- log_error ("decrypting session key failed: %s\n",
- gnupg_strerror (rc));
+ {
+ /* fixme: as soon as we support multiple recipients, we
+ should just set a flag and try the next recipient */
+ log_error ("decrypting session key failed: %s\n",
+ gnupg_strerror (rc));
+ goto leave;
+ }
else
{ /* setup the bulk decrypter */
ksba_writer_set_filter (writer,
diff --git a/sm/server.c b/sm/server.c
index 298ccda2d..520a3ddd1 100644
--- a/sm/server.c
+++ b/sm/server.c
@@ -83,6 +83,8 @@ reset_notify (ASSUAN_CONTEXT ctx)
gpgsm_release_certlist (ctrl->server_local->recplist);
ctrl->server_local->recplist = NULL;
close_message_fd (ctrl);
+ assuan_close_input_fd (ctx);
+ assuan_close_output_fd (ctx);
}
@@ -178,15 +180,12 @@ cmd_encrypt (ASSUAN_CONTEXT ctx, char *line)
inp_fd, out_fp);
fclose (out_fp);
- if (!rc)
- {
- gpgsm_release_certlist (ctrl->server_local->recplist);
- ctrl->server_local->recplist = NULL;
- /* close and reset the fd */
- close_message_fd (ctrl);
- assuan_close_input_fd (ctx);
- assuan_close_output_fd (ctx);
- }
+ gpgsm_release_certlist (ctrl->server_local->recplist);
+ ctrl->server_local->recplist = NULL;
+ /* close and reset the fd */
+ close_message_fd (ctrl);
+ assuan_close_input_fd (ctx);
+ assuan_close_output_fd (ctx);
return map_to_assuan_status (rc);
}
@@ -218,13 +217,10 @@ cmd_decrypt (ASSUAN_CONTEXT ctx, char *line)
rc = gpgsm_decrypt (ctrl, inp_fd, out_fp);
fclose (out_fp);
- if (!rc)
- {
- /* close and reset the fd */
- close_message_fd (ctrl);
- assuan_close_input_fd (ctx);
- assuan_close_output_fd (ctx);
- }
+ /* close and reset the fd */
+ close_message_fd (ctrl);
+ assuan_close_input_fd (ctx);
+ assuan_close_output_fd (ctx);
return map_to_assuan_status (rc);
}
@@ -263,13 +259,10 @@ cmd_verify (ASSUAN_CONTEXT ctx, char *line)
if (out_fp)
fclose (out_fp);
- if (!rc)
- {
- /* close and reset the fd */
- close_message_fd (ctrl);
- assuan_close_input_fd (ctx);
- assuan_close_output_fd (ctx);
- }
+ /* close and reset the fd */
+ close_message_fd (ctrl);
+ assuan_close_input_fd (ctx);
+ assuan_close_output_fd (ctx);
return map_to_assuan_status (rc);
}
@@ -304,13 +297,10 @@ cmd_sign (ASSUAN_CONTEXT ctx, char *line)
rc = gpgsm_sign (assuan_get_pointer (ctx), inp_fd, detached, out_fp);
fclose (out_fp);
- if (!rc)
- {
- /* close and reset the fd */
- close_message_fd (ctrl);
- assuan_close_input_fd (ctx);
- assuan_close_output_fd (ctx);
- }
+ /* close and reset the fd */
+ close_message_fd (ctrl);
+ assuan_close_input_fd (ctx);
+ assuan_close_output_fd (ctx);
return map_to_assuan_status (rc);
}
@@ -334,13 +324,11 @@ cmd_import (ASSUAN_CONTEXT ctx, char *line)
rc = gpgsm_import (assuan_get_pointer (ctx), fd);
- if (!rc)
- {
- /* close and reset the fd */
- close_message_fd (ctrl);
- assuan_close_input_fd (ctx);
- assuan_close_output_fd (ctx);
- }
+ /* close and reset the fd */
+ close_message_fd (ctrl);
+ assuan_close_input_fd (ctx);
+ assuan_close_output_fd (ctx);
+
return map_to_assuan_status (rc);
}
@@ -423,12 +411,10 @@ cmd_genkey (ASSUAN_CONTEXT ctx, char *line)
rc = gpgsm_genkey (ctrl, inp_fd, out_fp);
fclose (out_fp);
- if (!rc)
- {
- /* close and reset the fds */
- assuan_close_input_fd (ctx);
- assuan_close_output_fd (ctx);
- }
+ /* close and reset the fds */
+ assuan_close_input_fd (ctx);
+ assuan_close_output_fd (ctx);
+
return map_to_assuan_status (rc);
}