@@ -403,7 +403,7 @@ void AddCRLToSSLContext(X509_STORE *x509_store, const String& crlPath)
403403 X509_VERIFY_PARAM_free (param);
404404}
405405
406- static String GetX509NameCN (X509_NAME * name)
406+ static String GetX509NameCN (X509NameConstPtr name)
407407{
408408 char errbuf[256 ];
409409 char buffer[256 ];
@@ -598,8 +598,25 @@ int MakeX509CSR(
598598 X509_REQ_set_version (req, 0 );
599599 X509_REQ_set_pubkey (req, key);
600600
601- X509_NAME *name = X509_REQ_get_subject_name (req);
602- X509_NAME_add_entry_by_txt (name, " CN" , MBSTRING_ASC , (unsigned char *)cn.CStr (), -1 , -1 , 0 );
601+ std::unique_ptr<X509_NAME , decltype (&X509_NAME_free)> name{X509_NAME_new (), &X509_NAME_free};
602+ if (!name) {
603+ unsigned long err = ERR_peek_error ();
604+ BOOST_THROW_EXCEPTION (openssl_error ()
605+ << boost::errinfo_api_function (" X509_NAME_new" )
606+ << errinfo_openssl_error (err));
607+ }
608+
609+ X509_NAME_add_entry_by_txt (name.get (), " CN" , MBSTRING_ASC , (unsigned char *)cn.CStr (), -1 , -1 , 0 );
610+
611+ if (!X509_REQ_set_subject_name (req, name.get ())) {
612+ unsigned long err = ERR_peek_error ();
613+ ERR_error_string_n (err, errbuf, sizeof errbuf);
614+ Log (LogCritical, " SSL" )
615+ << " Error while setting CSR subject name: " << err << " , \" " << errbuf << " \" " ;
616+ BOOST_THROW_EXCEPTION (openssl_error ()
617+ << boost::errinfo_api_function (" X509_REQ_set_subject_name" )
618+ << errinfo_openssl_error (err));
619+ }
603620
604621 if (!ca) {
605622 String san = " DNS:" + cn;
@@ -652,8 +669,8 @@ int MakeX509CSR(
652669
653670std::shared_ptr<X509 > CreateCert (
654671 EVP_PKEY * pubkey,
655- X509_NAME * subject,
656- X509_NAME * issuer,
672+ X509NameConstPtr subject,
673+ X509NameConstPtr issuer,
657674 EVP_PKEY * cakey,
658675 long validFrom,
659676 long validFor,
@@ -746,7 +763,7 @@ String GetIcingaCADir()
746763 return Configuration::DataDir + " /ca" ;
747764}
748765
749- std::shared_ptr<X509 > CreateCertIcingaCA (EVP_PKEY *pubkey, X509_NAME * subject, long validFrom, long validFor, bool ca)
766+ std::shared_ptr<X509 > CreateCertIcingaCA (EVP_PKEY *pubkey, X509NameConstPtr subject, long validFrom, long validFor, bool ca)
750767{
751768 char errbuf[256 ];
752769
0 commit comments