diff options
author | Werner Koch <[email protected]> | 2001-12-14 19:36:33 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2001-12-14 19:36:33 +0000 |
commit | 6d27c940b2f34c6adb33567e3a118b2e3a594433 (patch) | |
tree | 5e51ba6930baedb7a16ef118d30c1a87f72c3ecc /sm/server.c | |
parent | * assuan-listen.c (assuan_close_input_fd): New. (diff) | |
download | gnupg-6d27c940b2f34c6adb33567e3a118b2e3a594433.tar.gz gnupg-6d27c940b2f34c6adb33567e3a118b2e3a594433.zip |
* verify.c (gpgsm_verify): Add hash debug helpers
* sign.c (gpgsm_sign): Ditto.
* base64.c (base64_reader_cb): Reset the linelen when we need to
skip the line and adjusted test; I somehow forgot about DeMorgan.
* server.c (cmd_encrypt,cmd_decrypt,cmd_sign,cmd_verify)
(cmd_import): Close the FDs on success.
(close_message_fd): New.
(input_notify): Setting autodetect_encoding to 0 after initializing
it to 0 is pretty pointless. Easy to fix.
Diffstat (limited to 'sm/server.c')
-rw-r--r-- | sm/server.c | 49 |
1 files changed, 48 insertions, 1 deletions
diff --git a/sm/server.c b/sm/server.c index a4c06318b..f1d0031d2 100644 --- a/sm/server.c +++ b/sm/server.c @@ -82,6 +82,16 @@ rc_to_assuan_status (int rc) return rc; } +static void +close_message_fd (CTRL ctrl) +{ + if (ctrl->server_local->message_fd != -1) + { + close (ctrl->server_local->message_fd); + ctrl->server_local->message_fd = -1; + } +} + static void reset_notify (ASSUAN_CONTEXT ctx) { @@ -89,6 +99,7 @@ reset_notify (ASSUAN_CONTEXT ctx) gpgsm_release_certlist (ctrl->server_local->recplist); ctrl->server_local->recplist = NULL; + close_message_fd (ctrl); } @@ -107,7 +118,7 @@ input_notify (ASSUAN_CONTEXT ctx, const char *line) else if (strstr (line, "--binary")) ; else - ctrl->autodetect_encoding = 0; + ctrl->autodetect_encoding = 1; } static void @@ -188,6 +199,10 @@ cmd_encrypt (ASSUAN_CONTEXT ctx, char *line) { 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 rc_to_assuan_status (rc); } @@ -220,6 +235,14 @@ 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); + } + return rc_to_assuan_status (rc); } @@ -245,6 +268,13 @@ cmd_verify (ASSUAN_CONTEXT ctx, char *line) rc = gpgsm_verify (assuan_get_pointer (ctx), fd, ctrl->server_local->message_fd); + if (!rc) + { + /* close and reset the fd */ + close_message_fd (ctrl); + assuan_close_input_fd (ctx); + assuan_close_output_fd (ctx); + } return rc_to_assuan_status (rc); } @@ -258,6 +288,7 @@ cmd_verify (ASSUAN_CONTEXT ctx, char *line) static int cmd_sign (ASSUAN_CONTEXT ctx, char *line) { + CTRL ctrl = assuan_get_pointer (ctx); int inp_fd, out_fd; FILE *out_fp; int detached; @@ -278,6 +309,14 @@ 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); + } + return rc_to_assuan_status (rc); } @@ -291,6 +330,7 @@ cmd_sign (ASSUAN_CONTEXT ctx, char *line) static int cmd_import (ASSUAN_CONTEXT ctx, char *line) { + CTRL ctrl = assuan_get_pointer (ctx); int rc; int fd = assuan_get_input_fd (ctx); @@ -299,6 +339,13 @@ 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); + } return rc_to_assuan_status (rc); } |