aboutsummaryrefslogtreecommitdiffstats
path: root/sm/server.c
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2001-12-14 19:36:33 +0000
committerWerner Koch <[email protected]>2001-12-14 19:36:33 +0000
commit6d27c940b2f34c6adb33567e3a118b2e3a594433 (patch)
tree5e51ba6930baedb7a16ef118d30c1a87f72c3ecc /sm/server.c
parent* assuan-listen.c (assuan_close_input_fd): New. (diff)
downloadgnupg-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.c49
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);
}