2012-10-17 [colin] 3.8.1cvs100
authorColin Leroy <colin@colino.net>
Wed, 17 Oct 2012 07:52:49 +0000 (07:52 +0000)
committerColin Leroy <colin@colino.net>
Wed, 17 Oct 2012 07:52:49 +0000 (07:52 +0000)
* src/common/ssl_certificate.c
Fix bug #2759, "Error messages regarding bad
client certificates are less than helpful"
Based on patch by bug reporter.

ChangeLog
PATCHSETS
configure.ac
src/common/ssl_certificate.c

index 3f99995..1e0e285 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2012-10-17 [colin]     3.8.1cvs100
+
+       * src/common/ssl_certificate.c
+               Fix bug #2759, "Error messages regarding bad
+               client certificates are less than helpful"
+               Based on patch by bug reporter.
+
 2012-10-13 [paul]      3.8.1cvs99
 
        * src/common/ssl_certificate.c
index f0872eb..74a7769 100644 (file)
--- a/PATCHSETS
+++ b/PATCHSETS
 ( cvs diff -u -r 1.9.2.60 -r 1.9.2.61 src/common/defs.h;  ) > 3.8.1cvs97.patchset
 ( cvs diff -u -r 1.382.2.616 -r 1.382.2.617 src/compose.c;  cvs diff -u -r 1.14.2.34 -r 1.14.2.35 src/grouplistdialog.c;  cvs diff -u -r 1.179.2.267 -r 1.179.2.268 src/imap.c;  cvs diff -u -r 1.2.2.36 -r 1.2.2.37 src/news_gtk.c;  cvs diff -u -r 1.49.2.153 -r 1.49.2.154 src/procmime.c;  cvs diff -u -r 1.150.2.130 -r 1.150.2.131 src/procmsg.c;  cvs diff -u -r 1.36.2.206 -r 1.36.2.207 src/common/utils.c;  cvs diff -u -r 1.20.2.81 -r 1.20.2.82 src/common/utils.h;  cvs diff -u -r 1.1.4.122 -r 1.1.4.123 src/etpan/imap-thread.c;  ) > 3.8.1cvs98.patchset
 ( cvs diff -u -r 1.4.2.44 -r 1.4.2.45 src/common/ssl_certificate.c;  ) > 3.8.1cvs99.patchset
+( cvs diff -u -r 1.4.2.45 -r 1.4.2.46 src/common/ssl_certificate.c;  ) > 3.8.1cvs100.patchset
index 11ae90a..1fe4ac6 100644 (file)
@@ -12,7 +12,7 @@ MINOR_VERSION=8
 MICRO_VERSION=1
 INTERFACE_AGE=0
 BINARY_AGE=0
-EXTRA_VERSION=99
+EXTRA_VERSION=100
 EXTRA_RELEASE=
 EXTRA_GTK2_VERSION=
 
index c1b371c..7552a99 100644 (file)
@@ -34,6 +34,7 @@
 #include <stdio.h>
 #include <glib.h>
 #include <glib/gi18n.h>
+#include <errno.h>
 #ifdef G_OS_WIN32
 #  include <winsock2.h>
 #else
@@ -273,14 +274,16 @@ static gnutls_pkcs12_t gnutls_d2i_PKCS12_fp(FILE *fp, int format)
        struct stat s;
        int r;
        if (fstat(fileno(fp), &s) < 0) {
-               perror("fstat");
+               log_error(LOG_PROTOCOL, _("Cannot stat P12 certificate file (%s)\n"),
+                                 strerror(errno));
                return NULL;
        }
        tmp.data = malloc(s.st_size);
        memset(tmp.data, 0, s.st_size);
        tmp.size = s.st_size;
        if (fread (tmp.data, 1, s.st_size, fp) < s.st_size) {
-               perror("fread");
+               log_error(LOG_PROTOCOL, _("Cannot read P12 certificate file (%s)\n"),
+                                 strerror(errno));
                free(tmp.data);
                return NULL;
        }
@@ -288,7 +291,8 @@ static gnutls_pkcs12_t gnutls_d2i_PKCS12_fp(FILE *fp, int format)
        gnutls_pkcs12_init(&p12);
 
        if ((r = gnutls_pkcs12_import(p12, &tmp, (format == 0)?GNUTLS_X509_FMT_DER:GNUTLS_X509_FMT_PEM,0)) < 0) {
-               g_warning("p12 import failed: %s\n", gnutls_strerror(r));
+               log_error(LOG_PROTOCOL, _("Cannot import P12 certificate file (%s)\n"),
+                                 gnutls_strerror(r));
                gnutls_pkcs12_deinit(p12);
                p12 = NULL;
        }
@@ -655,9 +659,13 @@ gnutls_x509_crt ssl_certificate_get_x509_from_pem_file(const gchar *file)
                        x509 = gnutls_d2i_X509_fp(fp, 1);
                        fclose(fp);
                        return x509;
+               } else {
+                       log_error(LOG_PROTOCOL, _("Cannot open certificate file %s: %s\n"),
+                                 file, strerror(errno));
                }
        } else {
-               log_error(LOG_PROTOCOL, _("Cannot open certificate file %s\n"), file);
+               log_error(LOG_PROTOCOL, _("Certificate file %s missing (%s)\n"),
+                         file, strerror(errno));
        }
        return NULL;
 }
@@ -674,9 +682,13 @@ gnutls_x509_privkey ssl_certificate_get_pkey_from_pem_file(const gchar *file)
                        key = gnutls_d2i_key_fp(fp, 1);
                        fclose(fp);
                        return key;
+               } else {
+                       log_error(LOG_PROTOCOL, _("Cannot open key file %s (%s)\n"),
+                       file, strerror(errno));
                }
        } else {
-               log_error(LOG_PROTOCOL, _("Cannot open key file %s\n"), file);
+               log_error(LOG_PROTOCOL, _("Key file %s missing (%s)\n"), file,
+                         strerror(errno));
        }
        return NULL;
 }
@@ -822,9 +834,16 @@ void ssl_certificate_get_x509_and_pkey_from_p12_file(const gchar *file, const gc
                if (fp) {
                        p12 = gnutls_d2i_PKCS12_fp(fp, 0);
                        fclose(fp);
+                       if (!p12) {
+                               log_error(LOG_PROTOCOL, _("Failed to read P12 certificate file %s\n"), file);
+                       }
+               } else {
+                       log_error(LOG_PROTOCOL, _("Cannot open P12 certificate file %s (%s)\n"),
+                                 file, strerror(errno));
                }
        } else {
-               log_error(LOG_PROTOCOL, _("Cannot open certificate file %s\n"), file);
+               log_error(LOG_PROTOCOL, _("P12 Certificate file %s missing (%s)\n"), file,
+                         strerror(errno));
        }
        if (p12 != NULL) {
                if ((r = parse_pkcs12(p12, password, pkey, x509)) == 0) {