Commit 2c0d1012 authored by Bodo Möller's avatar Bodo Möller
Browse files

If CONF_get_string returns NULL and we want to tolerate this

(e.g., use a default), we have to call ERR_clear_error().
parent 3ac82faa
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -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;
+33 −8
Original line number Diff line number Diff line
@@ -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;

@@ -832,13 +840,19 @@ bad:
			goto err;
			}
		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);
@@ -851,6 +865,8 @@ bad:
			{
			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,13 +1160,20 @@ 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);
+65 −9
Original line number Diff line number Diff line
@@ -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;
@@ -484,15 +486,24 @@ bad:
		}
	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)
		{
		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)
		{
		extensions = CONF_get_string(req_conf, SECTION, V3_EXTENSIONS);
		if (!extensions)
			ERR_clear_error();
		}
	if (extensions) {
		/* Check syntax of file */
		X509V3_CTX 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,7 +679,11 @@ 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)
			{
@@ -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);
+9 −2
Original line number Diff line number Diff line
@@ -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))