summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2009-06-21 10:41:50 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2009-06-21 10:41:50 +0000
commit4cfe156aa74096d7fc8ff1aac4050efd5c10d96e (patch)
treee969536d972898332ae7770a1227f724c76e0c12 /src
parenta60ba71f1ea36c7bb62a49d324fa1046227dc540 (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.cc33
-rw-r--r--src/LibgnutlsTLSContext.h6
-rw-r--r--src/LibsslTLSContext.cc33
-rw-r--r--src/LibsslTLSContext.h6
-rw-r--r--src/MultiUrlRequestInfo.cc5
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)) {