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 + + * 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 * 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); }