Make the handling of output and input formats consistent
authorRichard Levitte <levitte@openssl.org>
Fri, 4 Sep 2015 00:46:47 +0000 (02:46 +0200)
committerRichard Levitte <levitte@openssl.org>
Sat, 5 Sep 2015 23:29:36 +0000 (01:29 +0200)
Most of all, we needed to sort out which ones are binary and which
ones are text, and make sure they are treated accordingly and
consistently so

Reviewed-by: Tim Hudson <tjh@openssl.org>
18 files changed:
apps/apps.h
apps/asn1pars.c
apps/ca.c
apps/cms.c
apps/crl.c
apps/dhparam.c
apps/dsa.c
apps/dsaparam.c
apps/enc.c
apps/genpkey.c
apps/pkcs8.c
apps/pkey.c
apps/rand.c
apps/req.c
apps/rsa.c
apps/sess_id.c
apps/smime.c
apps/x509.c

index a134b8d..cd70948 100644 (file)
@@ -163,8 +163,9 @@ int app_load_modules(const CONF *config);
 void unbuffer(FILE *fp);
 
 /* Often used in calls to bio_open_default. */
-# define RB(xformat)  ((xformat) == FORMAT_ASN1 ? "rb" : "r")
-# define WB(xformat)  ((xformat) == FORMAT_ASN1 ? "wb" : "w")
+# define RB(xformat)  (((xformat) & B_FORMAT_TEXT) ? "rb" : "r")
+# define WB(xformat)  (((xformat) & B_FORMAT_TEXT) ? "wb" : "w")
+# define AB(xformat)  (((xformat) & B_FORMAT_TEXT) ? "ab" : "a")
 
 /*
  * Common verification options.
@@ -535,19 +536,20 @@ void print_cert_checks(BIO *bio, X509 *x,
 void store_setup_crl_download(X509_STORE *st);
 
 /* See OPT_FMT_xxx, above. */
+# define B_FORMAT_TEXT   0x8000
 # define FORMAT_UNDEF    0
 # define FORMAT_ASN1     1
-# define FORMAT_TEXT     2
-# define FORMAT_PEM      3
+# define FORMAT_TEXT    (2 | B_FORMAT_TEXT)
+# define FORMAT_PEM     (3 | B_FORMAT_TEXT)
 # define FORMAT_PKCS12   5
-# define FORMAT_SMIME    6
+# define FORMAT_SMIME   (6 | B_FORMAT_TEXT)
 # define FORMAT_ENGINE   7
-# define FORMAT_PEMRSA   9      /* PEM RSAPubicKey format */
-# define FORMAT_ASN1RSA  10     /* DER RSAPubicKey format */
-# define FORMAT_MSBLOB   11     /* MS Key blob format */
-# define FORMAT_PVK      12     /* MS PVK file format */
-# define FORMAT_HTTP     13     /* Download using HTTP */
-# define FORMAT_NSS      14     /* NSS keylog format */
+# define FORMAT_PEMRSA  (9 | B_FORMAT_TEXT)     /* PEM RSAPubicKey format */
+# define FORMAT_ASN1RSA  10                     /* DER RSAPubicKey format */
+# define FORMAT_MSBLOB   11                     /* MS Key blob format */
+# define FORMAT_PVK      12                     /* MS PVK file format */
+# define FORMAT_HTTP     13                     /* Download using HTTP */
+# define FORMAT_NSS      14                     /* NSS keylog format */
 
 # define EXT_COPY_NONE   0
 # define EXT_COPY_ADD    1
index 24b5568..8881ad4 100644 (file)
@@ -197,7 +197,7 @@ int asn1parse_main(int argc, char **argv)
         BIO_free(in);
     }
 
-    if ((in = bio_open_default(infile, "r")) == NULL)
+    if ((in = bio_open_default(infile, RB(informat))) == NULL)
         goto end;
 
     if (derfile && (derout = bio_open_default(derfile, "wb")) == NULL)
index 5cd8002..ce09155 100644 (file)
--- a/apps/ca.c
+++ b/apps/ca.c
@@ -793,7 +793,7 @@ end_of_options:
             extensions = "default";
     }
 
-        /*****************************************************************/
+    /*****************************************************************/
     if (req || gencrl) {
         Sout = bio_open_default(outfile, "w");
         if (Sout == NULL)
index e40686b..599f217 100644 (file)
@@ -690,16 +690,14 @@ int cms_main(int argc, char **argv)
         flags &= ~CMS_DETACHED;
 
     if (operation & SMIME_OP) {
-        if (outformat == FORMAT_ASN1)
-            outmode = "wb";
+        outmode = WB(outformat);
     } else {
         if (flags & CMS_BINARY)
             outmode = "wb";
     }
 
     if (operation & SMIME_IP) {
-        if (informat == FORMAT_ASN1)
-            inmode = "rb";
+        inmode = RB(informat);
     } else {
         if (flags & CMS_BINARY)
             inmode = "rb";
index c0bf874..1ea0c31 100644 (file)
@@ -346,7 +346,7 @@ int crl_main(int argc, char **argv)
             }
         }
     }
-    out = bio_open_default(outfile, "w");
+    out = bio_open_default(outfile, WB(outformat));
     if (out == NULL)
         goto end;
 
index 2e5ce2c..0640cf8 100644 (file)
@@ -352,7 +352,7 @@ int dhparam_main(int argc, char **argv)
         /* dh != NULL */
     }
 
-    out = bio_open_default(outfile, "w");
+    out = bio_open_default(outfile, WB(outformat));
     if (out == NULL)
         goto end;
 
index 9998bfe..4fca852 100644 (file)
@@ -225,7 +225,7 @@ int dsa_main(int argc, char **argv)
         goto end;
     }
 
-    out = bio_open_owner(outfile, "w", private);
+    out = bio_open_owner(outfile, WB(outformat), private);
     if (out == NULL)
         goto end;
 
index 8d48313..d61bb70 100644 (file)
@@ -195,10 +195,10 @@ int dsaparam_main(int argc, char **argv)
     }
     private = genkey ? 1 : 0;
 
-    in = bio_open_default(infile, "r");
+    in = bio_open_default(infile, RB(informat));
     if (in == NULL)
         goto end;
-    out = bio_open_owner(outfile, "w", private);
+    out = bio_open_owner(outfile, WB(outformat), private);
     if (out == NULL)
         goto end;
 
index 18fcb95..3b8d7eb 100644 (file)
@@ -330,7 +330,7 @@ int enc_main(int argc, char **argv)
         unbuffer(stdin);
         in = dup_bio_in();
     } else
-        in = bio_open_default(infile, "r");
+        in = bio_open_default(infile, base64 ? "r" : "rb");
     if (in == NULL)
         goto end;
 
@@ -366,7 +366,7 @@ int enc_main(int argc, char **argv)
         }
     }
 
-    out = bio_open_default(outfile, "w");
+    out = bio_open_default(outfile, base64 ? "w" : "wb");
     if (out == NULL)
         goto end;
 
index dbbedaa..c29b194 100644 (file)
@@ -184,7 +184,7 @@ int genpkey_main(int argc, char **argv)
     if (!app_load_modules(NULL))
         goto end;
 
-    out = bio_open_owner(outfile, "wb", private);
+    out = bio_open_owner(outfile, WB(outformat), private);
     if (out == NULL)
         goto end;
 
index b120b93..e3cb775 100644 (file)
@@ -239,10 +239,10 @@ int pkcs8_main(int argc, char **argv)
     if ((pbe_nid == -1) && !cipher)
         pbe_nid = NID_pbeWithMD5AndDES_CBC;
 
-    in = bio_open_default(infile, "rb");
+    in = bio_open_default(infile, RB(informat));
     if (in == NULL)
         goto end;
-    out = bio_open_owner(outfile, "wb", private);
+    out = bio_open_owner(outfile, WB(outformat), private);
     if (out == NULL)
         goto end;
 
index 80c2e15..9ef228f 100644 (file)
@@ -172,7 +172,7 @@ int pkey_main(int argc, char **argv)
     if (!app_load_modules(NULL))
         goto end;
 
-    out = bio_open_owner(outfile, "wb", private);
+    out = bio_open_owner(outfile, WB(outformat), private);
     if (out == NULL)
         goto end;
 
index 432e784..a5aa5d9 100644 (file)
@@ -134,7 +134,7 @@ int rand_main(int argc, char **argv)
         BIO_printf(bio_err, "%ld semi-random bytes loaded\n",
                    app_RAND_load_files(inrand));
 
-    out = bio_open_default(outfile, "w");
+    out = bio_open_default(outfile, base64 ? "w" : "wb");
     if (out == NULL)
         goto end;
 
index 59cc6b4..bae3eec 100644 (file)
@@ -764,7 +764,8 @@ int req_main(int argc, char **argv)
 
     out = bio_open_default(outfile,
                            keyout != NULL && outfile != NULL &&
-                           strcmp(keyout, outfile) == 0 ? "a" : "w");
+                           strcmp(keyout, outfile) == 0
+                           ? AB(outformat) : WB(outformat));
     if (out == NULL)
         goto end;
 
index c7ad44b..01cc6ea 100644 (file)
@@ -292,7 +292,7 @@ int rsa_main(int argc, char **argv)
         goto end;
     }
 
-    out = bio_open_owner(outfile, "w", private);
+    out = bio_open_owner(outfile, WB(outformat), private);
     if (out == NULL)
         goto end;
 
index 6816543..e743791 100644 (file)
@@ -160,10 +160,7 @@ int sess_id_main(int argc, char **argv)
     }
 
     if (!noout || text) {
-        const char* modeflag = "w";
-        if (outformat == FORMAT_ASN1 || outformat == FORMAT_NSS)
-            modeflag = "wb";
-        out = bio_open_default(outfile, modeflag);
+        out = bio_open_default(outfile, WB(outformat));
         if (out == NULL)
             goto end;
     }
index 45898de..d597ebf 100644 (file)
@@ -427,16 +427,14 @@ int smime_main(int argc, char **argv)
         flags &= ~PKCS7_DETACHED;
 
     if (operation & SMIME_OP) {
-        if (outformat == FORMAT_ASN1)
-            outmode = "wb";
+        outmode = WB(outformat);
     } else {
         if (flags & PKCS7_BINARY)
             outmode = "wb";
     }
 
     if (operation & SMIME_IP) {
-        if (informat == FORMAT_ASN1)
-            inmode = "rb";
+        inmode = RB(informat);
     } else {
         if (flags & PKCS7_BINARY)
             inmode = "rb";
index acce9e9..8020e8a 100644 (file)
@@ -496,7 +496,7 @@ int x509_main(int argc, char **argv)
     if (!app_load_modules(NULL))
         goto end;
 
-    out = bio_open_default(outfile, "w");
+    out = bio_open_default(outfile, WB(outformat));
     if (out == NULL)
         goto end;
 
@@ -556,7 +556,7 @@ int x509_main(int argc, char **argv)
             BIO_printf(bio_err, "We need a private key to sign with\n");
             goto end;
         }
-        in = bio_open_default(infile, "r");
+        in = bio_open_default(infile, RB(informat));
         if (in == NULL)
             goto end;
         req = PEM_read_bio_X509_REQ(in, NULL, NULL, NULL);