diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2009-06-21 10:41:50 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2009-06-21 10:41:50 +0000 |
| commit | 4cfe156aa74096d7fc8ff1aac4050efd5c10d96e (patch) | |
| tree | e969536d972898332ae7770a1227f724c76e0c12 /src | |
| parent | a60ba71f1ea36c7bb62a49d324fa1046227dc540 (diff) | |
2009-06-21 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
In TLSContext::addClientKeyFile() and addTrustedCACertFile(),
handle excepion inside these functions.
* src/LibgnutlsTLSContext.cc
* src/LibgnutlsTLSContext.h
* src/LibsslTLSContext.cc
* src/LibsslTLSContext.h
* src/MultiUrlRequestInfo.cc
Diffstat (limited to 'src')
| -rw-r--r-- | src/LibgnutlsTLSContext.cc | 33 | ||||
| -rw-r--r-- | src/LibgnutlsTLSContext.h | 6 | ||||
| -rw-r--r-- | src/LibsslTLSContext.cc | 33 | ||||
| -rw-r--r-- | src/LibsslTLSContext.h | 6 | ||||
| -rw-r--r-- | src/MultiUrlRequestInfo.cc | 5 |
5 files changed, 42 insertions, 41 deletions
diff --git a/src/LibgnutlsTLSContext.cc b/src/LibgnutlsTLSContext.cc index 2c3677da..d32e207a 100644 --- a/src/LibgnutlsTLSContext.cc +++ b/src/LibgnutlsTLSContext.cc @@ -78,36 +78,39 @@ bool TLSContext::bad() const return !_good; } -void TLSContext::addClientKeyFile(const std::string& certfile, +bool TLSContext::addClientKeyFile(const std::string& certfile, const std::string& keyfile) - throw(DlAbortEx) { int ret = gnutls_certificate_set_x509_key_file(_certCred, certfile.c_str(), keyfile.c_str(), GNUTLS_X509_FMT_PEM); - if(ret != GNUTLS_E_SUCCESS) { - throw DL_ABORT_EX - (StringFormat("Failed to load client certificate from %s and" - " private key from %s. Cause: %s", - certfile.c_str(), keyfile.c_str(), - gnutls_strerror(ret)).str()); + if(ret == GNUTLS_E_SUCCESS) { + _logger->info("Client Key File(cert=%s, key=%s) were successfully added.", + certfile.c_str(), keyfile.c_str()); + return true; + } else { + _logger->error("Failed to load client certificate from %s and" + " private key from %s. Cause: %s", + certfile.c_str(), keyfile.c_str(), + gnutls_strerror(ret)); + return false; } } -void TLSContext::addTrustedCACertFile(const std::string& certfile) - throw(DlAbortEx) +bool TLSContext::addTrustedCACertFile(const std::string& certfile) { int ret = gnutls_certificate_set_x509_trust_file(_certCred, certfile.c_str(), GNUTLS_X509_FMT_PEM); if(ret < 0) { - throw DL_ABORT_EX - (StringFormat - (MSG_LOADING_TRUSTED_CA_CERT_FAILED, - certfile.c_str(), gnutls_strerror(ret)).str()); + _logger->error(MSG_LOADING_TRUSTED_CA_CERT_FAILED, + certfile.c_str(), gnutls_strerror(ret)); + return false; + } else { + _logger->info("%d certificate(s) were imported.", ret); + return true; } - _logger->info("%d certificate(s) were imported.", ret); } gnutls_certificate_credentials_t TLSContext::getCertCred() const diff --git a/src/LibgnutlsTLSContext.h b/src/LibgnutlsTLSContext.h index 043b46f0..66a56461 100644 --- a/src/LibgnutlsTLSContext.h +++ b/src/LibgnutlsTLSContext.h @@ -62,11 +62,11 @@ public: ~TLSContext(); // private key `keyfile' must be decrypted. - void addClientKeyFile(const std::string& certfile, - const std::string& keyfile) throw(DlAbortEx); + bool addClientKeyFile(const std::string& certfile, + const std::string& keyfile); // certfile can contain multiple certificates. - void addTrustedCACertFile(const std::string& certfile) throw(DlAbortEx); + bool addTrustedCACertFile(const std::string& certfile); bool good() const; diff --git a/src/LibsslTLSContext.cc b/src/LibsslTLSContext.cc index ddcca08d..f0eb3366 100644 --- a/src/LibsslTLSContext.cc +++ b/src/LibsslTLSContext.cc @@ -73,33 +73,34 @@ bool TLSContext::bad() const return !_good; } -void TLSContext::addClientKeyFile(const std::string& certfile, +bool TLSContext::addClientKeyFile(const std::string& certfile, const std::string& keyfile) - throw(DlAbortEx) { if(SSL_CTX_use_PrivateKey_file(_sslCtx, keyfile.c_str(), SSL_FILETYPE_PEM) != 1) { - throw DL_ABORT_EX - (StringFormat - ("Failed to load client private key from %s. Cause: %s", - keyfile.c_str(), ERR_error_string(ERR_get_error(), 0)).str()); + _logger->error("Failed to load client private key from %s. Cause: %s", + keyfile.c_str(), ERR_error_string(ERR_get_error(), 0)); + return false; } if(SSL_CTX_use_certificate_chain_file(_sslCtx, certfile.c_str()) != 1) { - throw DL_ABORT_EX - (StringFormat - ("Failed to load client certificate from %s. Cause: %s", - certfile.c_str(), ERR_error_string(ERR_get_error(), 0)).str()); + _logger->error("Failed to load client certificate from %s. Cause: %s", + certfile.c_str(), ERR_error_string(ERR_get_error(), 0)); + return false; } + _logger->info("Client Key File(cert=%s, key=%s) were successfully added.", + certfile.c_str(), keyfile.c_str()); + return true; } -void TLSContext::addTrustedCACertFile(const std::string& certfile) - throw(DlAbortEx) +bool TLSContext::addTrustedCACertFile(const std::string& certfile) { if(SSL_CTX_load_verify_locations(_sslCtx, certfile.c_str(), 0) != 1) { - throw DL_ABORT_EX - (StringFormat - (MSG_LOADING_TRUSTED_CA_CERT_FAILED, - certfile.c_str(), ERR_error_string(ERR_get_error(), 0)).str()); + _logger->error(MSG_LOADING_TRUSTED_CA_CERT_FAILED, + certfile.c_str(), ERR_error_string(ERR_get_error(), 0)); + return false; + } else { + _logger->info("Trusted CA certificates were successfully added."); + return true; } } diff --git a/src/LibsslTLSContext.h b/src/LibsslTLSContext.h index 6412f2fe..efcc19d5 100644 --- a/src/LibsslTLSContext.h +++ b/src/LibsslTLSContext.h @@ -62,11 +62,11 @@ public: ~TLSContext(); // private key `keyfile' must be decrypted. - void addClientKeyFile(const std::string& certfile, - const std::string& keyfile) throw(DlAbortEx); + bool addClientKeyFile(const std::string& certfile, + const std::string& keyfile); // certfile can contain multiple certificates. - void addTrustedCACertFile(const std::string& certfile) throw(DlAbortEx); + bool addTrustedCACertFile(const std::string& certfile); bool good() const; diff --git a/src/MultiUrlRequestInfo.cc b/src/MultiUrlRequestInfo.cc index e388ef72..c0fbb878 100644 --- a/src/MultiUrlRequestInfo.cc +++ b/src/MultiUrlRequestInfo.cc @@ -140,10 +140,7 @@ DownloadResult::RESULT MultiUrlRequestInfo::execute() _option->get(PREF_PRIVATE_KEY)); } if(!_option->blank(PREF_CA_CERTIFICATE)) { - try { - tlsContext->addTrustedCACertFile(_option->get(PREF_CA_CERTIFICATE)); - } catch(RecoverableException& e) { - _logger->error(EX_EXCEPTION_CAUGHT, e); + if(!tlsContext->addTrustedCACertFile(_option->get(PREF_CA_CERTIFICATE))) { _logger->warn(MSG_WARN_NO_CA_CERT); } } else if(_option->getAsBool(PREF_CHECK_CERTIFICATE)) { |
