diff options
author | Werner Koch <wk@gnupg.org> | 2007-11-26 12:00:39 +0100 |
---|---|---|
committer | Werner Koch <wk@gnupg.org> | 2007-11-26 12:00:39 +0100 |
commit | 3d4ef0c814698381371c9d5563cf158950af896c (patch) | |
tree | 4a85d8ece842de5243f281e644975a2050236332 /sm | |
parent | New command GETAUDITLOG (diff) | |
download | gnupg2-3d4ef0c814698381371c9d5563cf158950af896c.tar.xz gnupg2-3d4ef0c814698381371c9d5563cf158950af896c.zip |
Add option --data to GETAUDITLOG command.
Return HTML formatted dummy output.
Diffstat (limited to 'sm')
-rw-r--r-- | sm/ChangeLog | 4 | ||||
-rw-r--r-- | sm/gpgsm.c | 7 | ||||
-rw-r--r-- | sm/server.c | 44 |
3 files changed, 37 insertions, 18 deletions
diff --git a/sm/ChangeLog b/sm/ChangeLog index 20f2866b1..d53740463 100644 --- a/sm/ChangeLog +++ b/sm/ChangeLog @@ -1,7 +1,7 @@ -2007-11-22 Werner Koch <wk@g10code.com> +h2007-11-22 Werner Koch <wk@g10code.com> * server.c (cmd_getauditlog): New. - (register_commands): Register GETAUDITLOG + (register_commands): Register GETAUDITLOG. 2007-11-19 Werner Koch <wk@g10code.com> diff --git a/sm/gpgsm.c b/sm/gpgsm.c index 7ed4372a2..9958a8138 100644 --- a/sm/gpgsm.c +++ b/sm/gpgsm.c @@ -1649,7 +1649,7 @@ main ( int argc, char **argv) case aVerify: { FILE *fp = NULL; - FILE *auditfp = NULL; + estream_t auditfp = NULL; set_binary (stdin); if (argc == 2 && opt.outfile) @@ -1661,7 +1661,7 @@ main ( int argc, char **argv) { audit_release (ctrl.audit); ctrl.audit = audit_new (); - auditfp = open_fwrite (auditlog); + auditfp = open_es_fwrite (auditlog); } if (!argc) @@ -1682,8 +1682,7 @@ main ( int argc, char **argv) if (fp && fp != stdout) fclose (fp); - if (auditfp && auditfp != stdout) - fclose (auditfp); + es_fclose (auditfp); } break; diff --git a/sm/server.c b/sm/server.c index beab14284..d54865ac9 100644 --- a/sm/server.c +++ b/sm/server.c @@ -934,36 +934,56 @@ cmd_genkey (assuan_context_t ctx, char *line) -/* GETAUDITLOG +/* GETAUDITLOG [--data] !!!WORK in PROGRESS!!! + + If --data is used, the output is send using D-lines and not to the + source given by an OUTPUT command. */ static int cmd_getauditlog (assuan_context_t ctx, char *line) { ctrl_t ctrl = assuan_get_pointer (ctx); int out_fd; - FILE *out_fp; + estream_t out_stream; + int opt_data; int rc; + opt_data = has_option (line, "--data"); + line = skip_options (line); + if (!ctrl->audit) return gpg_error (GPG_ERR_NO_DATA); - out_fd = translate_sys2libc_fd (assuan_get_output_fd (ctx), 1); - if (out_fd == -1) - return set_error (GPG_ERR_ASS_NO_OUTPUT, NULL); - - out_fp = fdopen ( dup(out_fd), "w"); - if (!out_fp) + if (opt_data) { - return set_error (GPG_ERR_ASS_GENERAL, "fdopen() failed"); + out_stream = es_fopencookie (ctx, "w", data_line_cookie_functions); + if (!out_stream) + return set_error (GPG_ERR_ASS_GENERAL, + "error setting up a data stream"); } - audit_print_result (ctrl->audit, out_fp); + else + { + out_fd = translate_sys2libc_fd (assuan_get_output_fd (ctx), 1); + if (out_fd == -1) + return set_error (GPG_ERR_ASS_NO_OUTPUT, NULL); + + out_stream = es_fdopen_nc ( dup (out_fd), "w"); + if (!out_stream) + { + return set_error (GPG_ERR_ASS_GENERAL, "es_fdopen() failed"); + } + } + + audit_print_result (ctrl->audit, out_stream); rc = 0; - fclose (out_fp); + + es_fclose (out_stream); /* Close and reset the fd. */ - assuan_close_output_fd (ctx); + if (!opt_data) + assuan_close_output_fd (ctx); return rc; } |