diff options
Diffstat (limited to 'sm')
-rw-r--r-- | sm/ChangeLog | 17 | ||||
-rw-r--r-- | sm/certreqgen-ui.c | 13 | ||||
-rw-r--r-- | sm/certreqgen.c | 28 | ||||
-rw-r--r-- | sm/export.c | 5 | ||||
-rw-r--r-- | sm/gpgsm.h | 2 | ||||
-rw-r--r-- | sm/import.c | 5 | ||||
-rw-r--r-- | sm/server.c | 12 |
7 files changed, 47 insertions, 35 deletions
diff --git a/sm/ChangeLog b/sm/ChangeLog index eb7d50057..8d88b7e85 100644 --- a/sm/ChangeLog +++ b/sm/ChangeLog @@ -1,3 +1,20 @@ +2007-08-22 Werner Koch <[email protected]> + + * certreqgen-ui.c (gpgsm_gencertreq_tty): Use es_fopenmem. + +2007-08-21 Werner Koch <[email protected]> + + * import.c (parse_p12): Use gnupg_tmpfile. + * export.c (export_p12): Ditto. + +2007-08-20 Werner Koch <[email protected]> + + * certreqgen.c (read_parameters): Change FP to an estream_t. + (gpgsm_genkey): Replace in_fd and in_stream by a estream_t. + * server.c (cmd_genkey): Adjust for that. + * certreqgen-ui.c (gpgsm_gencertreq_tty): Use es_open_memstream + instead of a temporary file. + 2007-08-14 Werner Koch <[email protected]> * call-dirmngr.c (start_dirmngr): Use dirmngr_socket_name. change diff --git a/sm/certreqgen-ui.c b/sm/certreqgen-ui.c index 09a9456b7..f9e9930e5 100644 --- a/sm/certreqgen-ui.c +++ b/sm/certreqgen-ui.c @@ -97,7 +97,7 @@ gpgsm_gencertreq_tty (ctrl_t ctrl, FILE *output_fp) gpg_error_t err; char *answer; int selection; - FILE *fp = NULL; + estream_t fp = NULL; int method; char *keytype; char *keygrip = NULL; @@ -278,20 +278,20 @@ gpgsm_gencertreq_tty (ctrl_t ctrl, FILE *output_fp) goto leave; /* Now create a parameter file and generate the key. */ - fp = tmpfile (); + fp = es_fopenmem (0, "w+"); if (!fp) { log_error (_("error creating temporary file: %s\n"), strerror (errno)); goto leave; } - fputs (result, fp); - rewind (fp); + es_fputs (result, fp); + es_rewind (fp); tty_printf (_("Now creating certificate request. " "This may take a while ...\n")); { int save_pem = ctrl->create_pem; ctrl->create_pem = 1; /* Force creation of PEM. */ - err = gpgsm_genkey (ctrl, -1, fp, output_fp); + err = gpgsm_genkey (ctrl, fp, output_fp); ctrl->create_pem = save_pem; } if (!err) @@ -302,8 +302,7 @@ gpgsm_gencertreq_tty (ctrl_t ctrl, FILE *output_fp) mem_error: log_error (_("resource problem: out or core\n")); leave: - if (fp) - fclose (fp); + es_fclose (fp); xfree (keytype); xfree (subject_name); xfree (keygrip); diff --git a/sm/certreqgen.c b/sm/certreqgen.c index 05cfb485f..4acd033b4 100644 --- a/sm/certreqgen.c +++ b/sm/certreqgen.c @@ -247,7 +247,7 @@ get_parameter_uint (struct para_data_s *para, enum para_name key) /* Read the certificate generation parameters from FP and generate (all) certificate requests. */ static int -read_parameters (ctrl_t ctrl, FILE *fp, ksba_writer_t writer) +read_parameters (ctrl_t ctrl, estream_t fp, ksba_writer_t writer) { static struct { const char *name; @@ -275,7 +275,7 @@ read_parameters (ctrl_t ctrl, FILE *fp, ksba_writer_t writer) err = NULL; para = NULL; - while (fgets (line, DIM(line)-1, fp) ) + while (es_fgets (line, DIM(line)-1, fp) ) { char *keyword, *value; @@ -391,7 +391,7 @@ read_parameters (ctrl_t ctrl, FILE *fp, ksba_writer_t writer) log_error ("line %d: %s\n", outctrl.lnr, err); rc = gpg_error (GPG_ERR_GENERAL); } - else if (ferror(fp)) + else if (es_ferror(fp)) { log_error ("line %d: read error: %s\n", outctrl.lnr, strerror(errno) ); rc = gpg_error (GPG_ERR_GENERAL); @@ -829,27 +829,15 @@ create_request (ctrl_t ctrl, -/* Create a new key by reading the parameters from in_fd or in_stream. - Multiple keys may be created */ +/* Create a new key by reading the parameters from IN_FP. Multiple + keys may be created */ int -gpgsm_genkey (ctrl_t ctrl, int in_fd, FILE *in_stream, FILE *out_fp) +gpgsm_genkey (ctrl_t ctrl, estream_t in_stream, FILE *out_fp) { int rc; - FILE *in_fp; Base64Context b64writer = NULL; ksba_writer_t writer; - if (in_stream) - in_fp = in_stream; - else - in_fp = fdopen (dup (in_fd), "rb"); - if (!in_fp) - { - gpg_error_t tmperr = gpg_error (gpg_err_code_from_errno (errno)); - log_error ("fdopen() failed: %s\n", strerror (errno)); - return tmperr; - } - ctrl->pem_name = "CERTIFICATE REQUEST"; rc = gpgsm_create_writer (&b64writer, ctrl, out_fp, NULL, &writer); if (rc) @@ -858,7 +846,7 @@ gpgsm_genkey (ctrl_t ctrl, int in_fd, FILE *in_stream, FILE *out_fp) goto leave; } - rc = read_parameters (ctrl, in_fp, writer); + rc = read_parameters (ctrl, in_stream, writer); if (rc) { log_error ("error creating certificate request: %s <%s>\n", @@ -878,8 +866,6 @@ gpgsm_genkey (ctrl_t ctrl, int in_fd, FILE *in_stream, FILE *out_fp) leave: gpgsm_destroy_writer (b64writer); - if (!in_stream) - fclose (in_fp); return rc; } diff --git a/sm/export.c b/sm/export.c index dd87246eb..2685d67da 100644 --- a/sm/export.c +++ b/sm/export.c @@ -32,6 +32,7 @@ #include "keydb.h" #include "exechelp.h" #include "i18n.h" +#include "sysutils.h" @@ -606,7 +607,7 @@ export_p12 (ctrl_t ctrl, const unsigned char *certimg, size_t certimglen, else pgmname = opt.protect_tool_program; - infp = tmpfile (); + infp = gnupg_tmpfile (); if (!infp) { err = gpg_error_from_syserror (); @@ -622,7 +623,7 @@ export_p12 (ctrl_t ctrl, const unsigned char *certimg, size_t certimglen, goto cleanup; } - outfp = tmpfile (); + outfp = gnupg_tmpfile (); if (!outfp) { err = gpg_error_from_syserror (); diff --git a/sm/gpgsm.h b/sm/gpgsm.h index 108c4fe43..dffd12618 100644 --- a/sm/gpgsm.h +++ b/sm/gpgsm.h @@ -325,7 +325,7 @@ int gpgsm_encrypt (ctrl_t ctrl, certlist_t recplist, int in_fd, FILE *out_fp); int gpgsm_decrypt (ctrl_t ctrl, int in_fd, FILE *out_fp); /*-- certreqgen.c --*/ -int gpgsm_genkey (ctrl_t ctrl, int in_fd, FILE *in_stream, FILE *out_fp); +int gpgsm_genkey (ctrl_t ctrl, estream_t in_stream, FILE *out_fp); /*-- certreqgen-ui.c --*/ void gpgsm_gencertreq_tty (ctrl_t ctrl, FILE *out_fp); diff --git a/sm/import.c b/sm/import.c index 8d42c9272..4cbea8481 100644 --- a/sm/import.c +++ b/sm/import.c @@ -33,6 +33,7 @@ #include "keydb.h" #include "exechelp.h" #include "i18n.h" +#include "sysutils.h" struct stats_s { unsigned long count; @@ -517,7 +518,7 @@ parse_p12 (ctrl_t ctrl, ksba_reader_t reader, gpg-protect-tool will anyway parse the entire pkcs#12 message in memory, we simply use tempfiles here and pass them to the gpg-protect-tool. */ - tmpfp = tmpfile (); + tmpfp = gnupg_tmpfile (); if (!tmpfp) { err = gpg_error_from_syserror (); @@ -542,7 +543,7 @@ parse_p12 (ctrl_t ctrl, ksba_reader_t reader, goto cleanup; } - certfp = tmpfile (); + certfp = gnupg_tmpfile (); if (!certfp) { err = gpg_error_from_syserror (); diff --git a/sm/server.c b/sm/server.c index 34326c5eb..f780bf832 100644 --- a/sm/server.c +++ b/sm/server.c @@ -863,6 +863,7 @@ cmd_genkey (assuan_context_t ctx, char *line) int inp_fd, out_fd; FILE *out_fp; int rc; + estream_t in_stream; inp_fd = translate_sys2libc_fd (assuan_get_input_fd (ctx), 0); if (inp_fd == -1) @@ -871,10 +872,17 @@ cmd_genkey (assuan_context_t ctx, char *line) if (out_fd == -1) return set_error (GPG_ERR_ASS_NO_OUTPUT, NULL); + in_stream = es_fdopen_nc (inp_fd, "r"); + if (!in_stream) + return set_error (GPG_ERR_ASS_GENERAL, "es_fdopen failed"); + out_fp = fdopen ( dup(out_fd), "w"); if (!out_fp) - return set_error (GPG_ERR_ASS_GENERAL, "fdopen() failed"); - rc = gpgsm_genkey (ctrl, inp_fd, NULL, out_fp); + { + es_fclose (in_stream); + return set_error (GPG_ERR_ASS_GENERAL, "fdopen() failed"); + } + rc = gpgsm_genkey (ctrl, in_stream, out_fp); fclose (out_fp); /* close and reset the fds */ |