Changed the way i18n files are located under Windows. The setting of the
[gnupg.git] / sm / certreqgen.c
index 4ffd836..30b8179 100644 (file)
@@ -1,11 +1,11 @@
 /* certreqgen.c - Generate a key and a certification request
 /* certreqgen.c - Generate a key and a certification request
- *     Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc.
+ * Copyright (C) 2002, 2003, 2005, 2007 Free Software Foundation, Inc.
  *
  * This file is part of GnuPG.
  *
  * GnuPG is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  *
  * This file is part of GnuPG.
  *
  * GnuPG is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
+ * the Free Software Foundation; either version 3 of the License, or
  * (at your option) any later version.
  *
  * GnuPG is distributed in the hope that it will be useful,
  * (at your option) any later version.
  *
  * GnuPG is distributed in the hope that it will be useful,
@@ -14,9 +14,7 @@
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- * USA.
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
  */
 
 /*
  */
 
 /*
@@ -249,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 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;
 {
   static struct {
     const char *name;
@@ -277,7 +275,7 @@ read_parameters (ctrl_t ctrl, FILE *fp, ksba_writer_t writer)
 
   err = NULL;
   para = NULL;
 
   err = NULL;
   para = NULL;
-  while (fgets (line, DIM(line)-1, fp) )
+  while (es_fgets (line, DIM(line)-1, fp) )
     {
       char *keyword, *value;
 
     {
       char *keyword, *value;
 
@@ -393,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);
     }
       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);
     {
       log_error ("line %d: read error: %s\n", outctrl.lnr, strerror(errno) );
       rc = gpg_error (GPG_ERR_GENERAL);
@@ -573,8 +571,8 @@ proc_parameters (ctrl_t ctrl,
       if (rc)
         {
           r = get_parameter (para, pKEYTYPE, 0);
       if (rc)
         {
           r = get_parameter (para, pKEYTYPE, 0);
-          log_error (_("line %d: key generation failed: %s\n"),
-                     r->lnr, gpg_strerror (rc));
+          log_error (_("line %d: key generation failed: %s <%s>\n"),
+                     r->lnr, gpg_strerror (rc), gpg_strsource (rc));
           xfree (cardkeyid);
           return rc;
         }
           xfree (cardkeyid);
           return rc;
         }
@@ -788,8 +786,7 @@ create_request (ctrl_t ctrl,
               goto leave;
             }
           gcry_sexp_release (s_pkey);
               goto leave;
             }
           gcry_sexp_release (s_pkey);
-          for (n=0; n < 20; n++)
-            sprintf (hexgrip+n*2, "%02X", grip[n]);
+          bin2hex (grip, 20, hexgrip);
 
           if (carddirect)
             rc = gpgsm_scd_pksign (ctrl, carddirect, NULL,
 
           if (carddirect)
             rc = gpgsm_scd_pksign (ctrl, carddirect, NULL,
@@ -831,27 +828,15 @@ create_request (ctrl_t ctrl,
 
 
 \f
 
 
 \f
-/* 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
 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;
 {
   int rc;
-  FILE *in_fp;
   Base64Context b64writer = NULL;
   ksba_writer_t writer;
 
   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)
   ctrl->pem_name = "CERTIFICATE REQUEST";
   rc = gpgsm_create_writer (&b64writer, ctrl, out_fp, NULL, &writer);
   if (rc)
@@ -860,11 +845,11 @@ gpgsm_genkey (ctrl_t ctrl, int in_fd, FILE *in_stream, FILE *out_fp)
       goto leave;
     }
 
       goto leave;
     }
 
-  rc = read_parameters (ctrl, in_fp, writer);
+  rc = read_parameters (ctrl, in_stream, writer);
   if (rc)
     {
   if (rc)
     {
-      log_error ("error creating certificate request: %s\n",
-                 gpg_strerror (rc));
+      log_error ("error creating certificate request: %s <%s>\n",
+                 gpg_strerror (rc), gpg_strsource (rc));
       goto leave;
     }
 
       goto leave;
     }
 
@@ -880,8 +865,6 @@ gpgsm_genkey (ctrl_t ctrl, int in_fd, FILE *in_stream, FILE *out_fp)
 
  leave:
   gpgsm_destroy_writer (b64writer);
 
  leave:
   gpgsm_destroy_writer (b64writer);
-  if (!in_stream)
-    fclose (in_fp);
   return rc;
 }
 
   return rc;
 }