get rid of EVP_PKEY_ECDSA (now we have EVP_PKEY_EC instead)
[openssl.git] / apps / ca.c
index 297e3a2dfdcf8f56bae087d96043d3de9d67ba4a..39956e89a44692abdc2d7bb1544da279be5be0a3 100644 (file)
--- a/apps/ca.c
+++ b/apps/ca.c
 #ifdef OPENSSL_SYS_WINDOWS
 #define strcasecmp _stricmp
 #else
-#include <strings.h>
+#  ifdef NO_STRINGS_H
+    int        strcasecmp();
+#  else
+#    include <strings.h>
+#  endif /* NO_STRINGS_H */
 #endif
 
 #ifndef W_OK
@@ -238,7 +242,6 @@ static int do_body(X509 **xret, EVP_PKEY *pkey, X509 *x509, const EVP_MD *dgst,
                int verbose, X509_REQ *req, char *ext_sect, CONF *conf,
        unsigned long certopt, unsigned long nameopt, int default_op,
        int ext_copy);
-static X509_NAME *do_subject(char *subject);
 static int do_revoke(X509 *x509, TXT_DB *db, int ext, char *extval);
 static int get_certificate_status(const char *ser_status, TXT_DB *db);
 static int do_updatedb(TXT_DB *db);
@@ -696,7 +699,7 @@ bad:
                        goto err;
                        }
                }
-       pkey = load_key(bio_err, keyfile, keyform, key, e, 
+       pkey = load_key(bio_err, keyfile, keyform, 0, key, e, 
                "CA private key");
        if (key) memset(key,0,strlen(key));
        if (pkey == NULL)
@@ -1451,13 +1454,13 @@ bad:
                        }
                if ((crldays == 0) && (crlhours == 0))
                        {
-                       BIO_printf(bio_err,"cannot lookup how long until the next CRL is issuer\n");
+                       BIO_printf(bio_err,"cannot lookup how long until the next CRL is issued\n");
                        goto err;
                        }
 
                if (verbose) BIO_printf(bio_err,"making CRL\n");
                if ((crl=X509_CRL_new()) == NULL) goto err;
-               if (!X509_CRL_set_issuer_name(crl, X509_get_issuer_name(x509))) goto err;
+               if (!X509_CRL_set_issuer_name(crl, X509_get_subject_name(x509))) goto err;
 
                tmptm = ASN1_TIME_new();
                if (!tmptm) goto err;
@@ -1512,7 +1515,7 @@ bad:
                        else
 #endif
 #ifndef OPENSSL_NO_ECDSA
-                       if (pkey->type == EVP_PKEY_ECDSA)
+                       if (pkey->type == EVP_PKEY_EC)
                                dgst=EVP_ecdsa();
                        else
 #endif
@@ -1879,7 +1882,7 @@ static int do_body(X509 **xret, EVP_PKEY *pkey, X509 *x509, const EVP_MD *dgst,
 
        if (subj)
                {
-               X509_NAME *n = do_subject(subj);
+               X509_NAME *n = do_subject(subj, MBSTRING_ASC);
 
                if (!n)
                        {
@@ -2091,9 +2094,8 @@ again2:
                        }
                }
 
-       row[DB_name]=X509_NAME_oneline(dn_subject,NULL,0);
        row[DB_serial]=BN_bn2hex(serial);
-       if ((row[DB_name] == NULL) || (row[DB_serial] == NULL))
+       if (row[DB_serial] == NULL)
                {
                BIO_printf(bio_err,"Memory allocation failure\n");
                goto err;
@@ -2291,7 +2293,7 @@ again2:
        EVP_PKEY_free(pktmp);
 #endif
 #ifndef OPENSSL_NO_ECDSA
-       if (pkey->type == EVP_PKEY_ECDSA)
+       if (pkey->type == EVP_PKEY_EC)
                dgst = EVP_ecdsa();
        pktmp = X509_get_pubkey(ret);
        if (EVP_PKEY_missing_parameters(pktmp) &&
@@ -2316,10 +2318,10 @@ again2:
 
        /* row[DB_serial] done already */
        row[DB_file]=(char *)OPENSSL_malloc(8);
-       /* row[DB_name] done already */
+       row[DB_name]=X509_NAME_oneline(X509_get_subject_name(ret),NULL,0);
 
        if ((row[DB_type] == NULL) || (row[DB_exp_date] == NULL) ||
-               (row[DB_file] == NULL))
+               (row[DB_file] == NULL) || (row[DB_name] == NULL))
                {
                BIO_printf(bio_err,"Memory allocation failure\n");
                goto err;
@@ -3027,13 +3029,13 @@ int make_revoked(X509_REVOKED *rev, char *str)
  * subject is expected to be in the format /type0=value0/type1=value1/type2=...
  * where characters may be escaped by \
  */
-static X509_NAME *do_subject(char *subject)
+X509_NAME *do_subject(char *subject, long chtype)
        {
-       size_t buflen = strlen (subject)+1; /* to copy the types and values into. due to escaping, the copy can only become shorter */
-       char *buf = malloc (buflen);
+       size_t buflen = strlen(subject)+1; /* to copy the types and values into. due to escaping, the copy can only become shorter */
+       char *buf = OPENSSL_malloc(buflen);
        size_t max_ne = buflen / 2 + 1; /* maximum number of name elements */
-       char **ne_types = malloc (max_ne * sizeof (char *));
-       char **ne_values = malloc (max_ne * sizeof (char *));
+       char **ne_types = OPENSSL_malloc(max_ne * sizeof (char *));
+       char **ne_values = OPENSSL_malloc(max_ne * sizeof (char *));
 
        char *sp = subject, *bp = buf;
        int i, ne_num = 0;
@@ -3044,13 +3046,13 @@ static X509_NAME *do_subject(char *subject)
        if (!buf || !ne_types || !ne_values)
        {
                BIO_printf(bio_err, "malloc error\n");
-               goto error0;
+               goto error;
        }
 
        if (*subject != '/')
        {
                BIO_printf(bio_err, "Subject does not start with '/'.\n");
-               goto error0;
+               goto error;
        }
        sp++; /* skip leading / */
 
@@ -3066,7 +3068,7 @@ static X509_NAME *do_subject(char *subject)
                                else
                                {
                                        BIO_printf(bio_err, "escape character at end of string\n");
-                                       goto error0;
+                                       goto error;
                                }
                        else if (*sp == '=')
                        {
@@ -3080,7 +3082,7 @@ static X509_NAME *do_subject(char *subject)
                if (!*sp)
                {
                        BIO_printf(bio_err, "end of string encountered while processing type of subject name element #%d\n", ne_num);
-                       goto error0;
+                       goto error;
                }
                ne_values[ne_num] = bp;
                while (*sp)
@@ -3091,12 +3093,11 @@ static X509_NAME *do_subject(char *subject)
                                else
                                {
                                        BIO_printf(bio_err, "escape character at end of string\n");
-                                       goto error0;
+                                       goto error;
                                }
                        else if (*sp == '/')
                        {
                                sp++;
-                               *bp++ = '\0';
                                break;
                        }
                        else
@@ -3107,7 +3108,7 @@ static X509_NAME *do_subject(char *subject)
        }
 
        if (!(n = X509_NAME_new()))
-               goto error0;
+               goto error;
 
        for (i = 0; i < ne_num; i++)
                {
@@ -3123,25 +3124,26 @@ static X509_NAME *do_subject(char *subject)
                        continue;
                        }
 
-               if (!X509_NAME_add_entry_by_NID(n, nid, MBSTRING_ASC, (unsigned char*)ne_values[i], -1,-1,0))
-                       goto error1;
+               if (!X509_NAME_add_entry_by_NID(n, nid, chtype, (unsigned char*)ne_values[i], -1,-1,0))
+                       goto error;
                }
 
-       free (ne_values);
-       free (ne_types);
-       free (buf);
+       OPENSSL_free(ne_values);
+       OPENSSL_free(ne_types);
+       OPENSSL_free(buf);
        return n;
 
-error1:
+error:
        X509_NAME_free(n);
-error0:
-       free (ne_values);
-       free (ne_types);
-       free (buf);
+       if (ne_values)
+               OPENSSL_free(ne_values);
+       if (ne_types)
+               OPENSSL_free(ne_types);
+       if (buf)
+               OPENSSL_free(buf);
        return NULL;
 }
 
-
 int old_entry_print(BIO *bp, ASN1_OBJECT *obj, ASN1_STRING *str)
        {
        char buf[25],*pbuf, *p;