From 2c0d10123eac1117d64a8476bbc1f730439403ab Mon Sep 17 00:00:00 2001 From: =?utf8?q?Bodo=20M=C3=B6ller?= Date: Fri, 15 Dec 2000 16:59:49 +0000 Subject: [PATCH] If CONF_get_string returns NULL and we want to tolerate this (e.g., use a default), we have to call ERR_clear_error(). --- apps/apps.c | 6 ++++- apps/ca.c | 41 +++++++++++++++++++++++------ apps/req.c | 74 ++++++++++++++++++++++++++++++++++++++++++++++------- apps/x509.c | 11 ++++++-- 4 files changed, 112 insertions(+), 20 deletions(-) diff --git a/apps/apps.c b/apps/apps.c index a04f871d0a..ca3f557ca2 100644 --- a/apps/apps.c +++ b/apps/apps.c @@ -442,7 +442,11 @@ int add_oid_section(BIO *err, LHASH *conf) STACK_OF(CONF_VALUE) *sktmp; CONF_VALUE *cnf; int i; - if(!(p=CONF_get_string(conf,NULL,"oid_section"))) return 1; + if(!(p=CONF_get_string(conf,NULL,"oid_section"))) + { + ERR_clear_error(); + return 1; + } if(!(sktmp = CONF_get_section(conf, p))) { BIO_printf(err, "problem loading oid section %s\n", p); return 0; diff --git a/apps/ca.c b/apps/ca.c index c0677a5f2b..1e70de9a6a 100644 --- a/apps/ca.c +++ b/apps/ca.c @@ -523,6 +523,8 @@ bad: if (conf != NULL) { p=CONF_get_string(conf,NULL,"oid_file"); + if (p == NULL) + ERR_clear_error(); if (p != NULL) { BIO *oid_bio; @@ -550,6 +552,8 @@ bad: } randfile = CONF_get_string(conf, BASE_SECTION, "RANDFILE"); + if (randfile == NULL) + ERR_clear_error(); app_RAND_load_file(randfile, bio_err, 0); in=BIO_new(BIO_s_file()); @@ -635,9 +639,13 @@ bad: } f=CONF_get_string(conf,BASE_SECTION,ENV_PRESERVE); + if (f == NULL) + ERR_clear_error(); if ((f != NULL) && ((*f == 'y') || (*f == 'Y'))) preserve=1; f=CONF_get_string(conf,BASE_SECTION,ENV_MSIE_HACK); + if (f == NULL) + ERR_clear_error(); if ((f != NULL) && ((*f == 'y') || (*f == 'Y'))) msie_hack=1; @@ -831,26 +839,34 @@ bad: lookup_fail(section,ENV_SERIAL); goto err; } - if(!extensions) + if (!extensions) + { extensions=CONF_get_string(conf,section,ENV_EXTENSIONS); - if(extensions) { + if (!extensions) + ERR_clear_error(); + } + if (extensions) + { /* Check syntax of file */ X509V3_CTX ctx; X509V3_set_ctx_test(&ctx); X509V3_set_conf_lhash(&ctx, conf); - if(!X509V3_EXT_add_conf(conf, &ctx, extensions, NULL)) { + if (!X509V3_EXT_add_conf(conf, &ctx, extensions, NULL)) + { BIO_printf(bio_err, "Error Loading extension section %s\n", extensions); ret = 1; goto err; + } } - } if (startdate == NULL) { startdate=CONF_get_string(conf,section, ENV_DEFAULT_STARTDATE); + if (startdate == NULL) + ERR_clear_error(); } if (startdate && !ASN1_UTCTIME_set_string(NULL,startdate)) { @@ -863,6 +879,8 @@ bad: { enddate=CONF_get_string(conf,section, ENV_DEFAULT_ENDDATE); + if (enddate == NULL) + ERR_clear_error(); } if (enddate && !ASN1_UTCTIME_set_string(NULL,enddate)) { @@ -1142,20 +1160,27 @@ bad: /*****************************************************************/ if (gencrl) { - if(!crl_ext) crl_ext=CONF_get_string(conf,section,ENV_CRLEXT); - if(crl_ext) { + if (!crl_ext) + { + crl_ext=CONF_get_string(conf,section,ENV_CRLEXT); + if (!crl_ext) + ERR_clear_error(); + } + if (crl_ext) + { /* Check syntax of file */ X509V3_CTX ctx; X509V3_set_ctx_test(&ctx); X509V3_set_conf_lhash(&ctx, conf); - if(!X509V3_EXT_add_conf(conf, &ctx, crl_ext, NULL)) { + if(!X509V3_EXT_add_conf(conf, &ctx, crl_ext, NULL)) + { BIO_printf(bio_err, "Error Loading CRL extension section %s\n", crl_ext); ret = 1; goto err; + } } - } if ((hex=BIO_new(BIO_s_mem())) == NULL) goto err; if (!crldays && !crlhours) diff --git a/apps/req.c b/apps/req.c index f740e01527..292bc5910f 100644 --- a/apps/req.c +++ b/apps/req.c @@ -463,6 +463,8 @@ bad: if (req_conf != NULL) { p=CONF_get_string(req_conf,NULL,"oid_file"); + if (p == NULL) + ERR_clear_error(); if (p != NULL) { BIO *oid_bio; @@ -482,18 +484,27 @@ bad: } } } - if(!add_oid_section(bio_err, req_conf)) goto end; + if(!add_oid_section(bio_err, req_conf)) goto end; - if ((md_alg == NULL) && - ((p=CONF_get_string(req_conf,SECTION,"default_md")) != NULL)) + if (md_alg == NULL) { - if ((md_alg=EVP_get_digestbyname(p)) != NULL) - digest=md_alg; + p=CONF_get_string(req_conf,SECTION,"default_md"); + if (p == NULL) + ERR_clear_error(); + if (p != NULL) + { + if ((md_alg=EVP_get_digestbyname(p)) != NULL) + digest=md_alg; + } } - if(!extensions) + if (!extensions) + { extensions = CONF_get_string(req_conf, SECTION, V3_EXTENSIONS); - if(extensions) { + if (!extensions) + ERR_clear_error(); + } + if (extensions) { /* Check syntax of file */ X509V3_CTX ctx; X509V3_set_ctx_test(&ctx); @@ -506,12 +517,22 @@ bad: } if(!passin) + { passin = CONF_get_string(req_conf, SECTION, "input_password"); - + if (!passin) + ERR_clear_error(); + } + if(!passout) + { passout = CONF_get_string(req_conf, SECTION, "output_password"); + if (!passout) + ERR_clear_error(); + } p = CONF_get_string(req_conf, SECTION, STRING_MASK); + if (!p) + ERR_clear_error(); if(p && !ASN1_STRING_set_default_mask_asc(p)) { BIO_printf(bio_err, "Invalid global string mask setting %s\n", p); @@ -519,7 +540,11 @@ bad: } if(!req_exts) + { req_exts = CONF_get_string(req_conf, SECTION, REQ_EXTENSIONS); + if (!req_exts) + ERR_clear_error(); + } if(req_exts) { /* Check syntax of file */ X509V3_CTX ctx; @@ -597,6 +622,8 @@ bad: if (EVP_PKEY_type(pkey->type) == EVP_PKEY_DSA) { char *randfile = CONF_get_string(req_conf,SECTION,"RANDFILE"); + if (randfile == NULL) + ERR_clear_error(); app_RAND_load_file(randfile, bio_err, 0); } } @@ -604,6 +631,8 @@ bad: if (newreq && (pkey == NULL)) { char *randfile = CONF_get_string(req_conf,SECTION,"RANDFILE"); + if (randfile == NULL) + ERR_clear_error(); app_RAND_load_file(randfile, bio_err, 0); if (inrand) app_RAND_load_files(inrand); @@ -650,8 +679,12 @@ bad: if (pkey == NULL) goto end; if (keyout == NULL) + { keyout=CONF_get_string(req_conf,SECTION,KEYFILE); - + if (keyout == NULL) + ERR_clear_error(); + } + if (keyout == NULL) { BIO_printf(bio_err,"writing new private key to stdout\n"); @@ -675,7 +708,12 @@ bad: p=CONF_get_string(req_conf,SECTION,"encrypt_rsa_key"); if (p == NULL) + { + ERR_clear_error(); p=CONF_get_string(req_conf,SECTION,"encrypt_key"); + if (p == NULL) + ERR_clear_error(); + } if ((p != NULL) && (strcmp(p,"no") == 0)) cipher=NULL; if (nodes) cipher=NULL; @@ -983,6 +1021,8 @@ static int make_REQ(X509_REQ *req, EVP_PKEY *pkey, int attribs) char *tmp, *dn_sect,*attr_sect; tmp=CONF_get_string(req_conf,SECTION,PROMPT); + if (tmp == NULL) + ERR_clear_error(); if((tmp != NULL) && !strcmp(tmp, "no")) no_prompt = 1; dn_sect=CONF_get_string(req_conf,SECTION,DISTINGUISHED_NAME); @@ -1001,7 +1041,10 @@ static int make_REQ(X509_REQ *req, EVP_PKEY *pkey, int attribs) attr_sect=CONF_get_string(req_conf,SECTION,ATTRIBUTES); if (attr_sect == NULL) + { + ERR_clear_error(); attr_sk=NULL; + } else { attr_sk=CONF_get_section(req_conf,attr_sect); @@ -1076,11 +1119,17 @@ start: for (;;) if ((nid=OBJ_txt2nid(type)) == NID_undef) goto start; sprintf(buf,"%s_default",v->name); if ((def=CONF_get_string(req_conf,dn_sect,buf)) == NULL) + { + ERR_clear_error(); def=""; + } sprintf(buf,"%s_value",v->name); if ((value=CONF_get_string(req_conf,dn_sect,buf)) == NULL) + { + ERR_clear_error(); value=NULL; + } sprintf(buf,"%s_min",v->name); min=(int)CONF_get_number(req_conf,dn_sect,buf); @@ -1122,12 +1171,19 @@ start2: for (;;) sprintf(buf,"%s_default",type); if ((def=CONF_get_string(req_conf,attr_sect,buf)) == NULL) + { + ERR_clear_error(); def=""; + } + sprintf(buf,"%s_value",type); if ((value=CONF_get_string(req_conf,attr_sect,buf)) == NULL) + { + ERR_clear_error(); value=NULL; + } sprintf(buf,"%s_min",type); min=(int)CONF_get_number(req_conf,attr_sect,buf); diff --git a/apps/x509.c b/apps/x509.c index de25790145..9422e1d15c 100644 --- a/apps/x509.c +++ b/apps/x509.c @@ -498,8 +498,15 @@ bad: ,errorline,extfile); goto end; } - if (!extsect && !(extsect = CONF_get_string(extconf, "default", - "extensions"))) extsect = "default"; + if (!extsect) + { + extsect = CONF_get_string(extconf, "default", "extensions"); + if (!extsect) + { + ERR_clear_error(); + extsect = "default"; + } + } X509V3_set_ctx_test(&ctx2); X509V3_set_conf_lhash(&ctx2, extconf); if (!X509V3_EXT_add_conf(extconf, &ctx2, extsect, NULL)) -- 2.25.1