diff options
author | Daniel Stenberg <daniel@haxx.se> | 2005-04-09 22:33:14 +0000 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2005-04-09 22:33:14 +0000 |
commit | f09e479fd62e62f7f81f6219c02b14c96cff6120 (patch) | |
tree | ac2274be387febbcc94c6d6a96916e09921a9a4e | |
parent | 80fe93bc338b3795a4ac32f1d15bc71861100ffd (diff) |
Blah, revert my removal of the extra check since the problem is there for real.
Archived thread of the help-gnutls mailing list regarding this problem:
http://lists.gnu.org/archive/html/help-gnutls/2005-04/msg00000.html
(and I _am_ sorry for my confused behaviour on this problem.)
-rw-r--r-- | lib/gtls.c | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/lib/gtls.c b/lib/gtls.c index a87c3a03b..bc7cd27e3 100644 --- a/lib/gtls.c +++ b/lib/gtls.c @@ -149,13 +149,25 @@ Curl_gtls_connect(struct connectdata *conn, return CURLE_SSL_CONNECT_ERROR; } - /* set the trusted CA cert bundle file */ - rc = gnutls_certificate_set_x509_trust_file(conn->ssl[sockindex].cred, - data->set.ssl.CAfile, - GNUTLS_X509_FMT_PEM); - if(rc) { - infof(data, "error reading the ca cert file %s", - data->set.ssl.CAfile); + if(data->set.ssl.CAfile) { + /* set the trusted CA cert bundle file */ + + /* + * Unfortunately, if a file name is set here and this function fails for + * whatever reason (missing file, bad file, etc), gnutls will no longer + * handshake properly but it just loops forever. Therefore, we must return + * error here if we get an error when setting the CA cert file name. + * + * (Question/report posted to the help-gnutls mailing list, April 8 2005) + */ + rc = gnutls_certificate_set_x509_trust_file(conn->ssl[sockindex].cred, + data->set.ssl.CAfile, + GNUTLS_X509_FMT_PEM); + if(rc) { + failf(data, "error reading the ca cert file %s", + data->set.ssl.CAfile); + return CURLE_SSL_CACERT; + } } /* Initialize TLS session as a client */ |