--- a/libpurple/certificate.c Sat Mar 27 02:11:31 2010 +0000 +++ b/libpurple/certificate.c Sat Mar 27 03:55:09 2010 +0000 @@ -377,6 +377,16 @@ return (scheme->import_certificate)(filename); } +GSList * +purple_certificates_import(PurpleCertificateScheme *scheme, const gchar *filename) +{ + g_return_val_if_fail(scheme, NULL); + g_return_val_if_fail(scheme->import_certificates, NULL); + g_return_val_if_fail(filename, NULL); + + return (scheme->import_certificates)(filename); +} + gboolean purple_certificate_export(const gchar *filename, PurpleCertificate *crt) { @@ -800,8 +810,9 @@ PurpleCertificateScheme *x509; GDir *certdir; const gchar *entry; - GPatternSpec *pempat; + GPatternSpec *pempat, *crtpat; GList *iter = NULL; + GSList *crts = NULL; if (x509_ca_initialized) return TRUE; @@ -817,6 +828,7 @@ /* Use a glob to only read .pem files */ pempat = g_pattern_spec_new("*.pem"); + crtpat = g_pattern_spec_new("*.crt"); /* Populate the certificates pool from the search path(s) */ for (iter = x509_ca_paths; iter; iter = iter->next) { @@ -830,32 +842,39 @@ gchar *fullpath; PurpleCertificate *crt; - if ( !g_pattern_match_string(pempat, entry) ) { + if (!g_pattern_match_string(pempat, entry) && !g_pattern_match_string(crtpat, entry)) { continue; } fullpath = g_build_filename(iter->data, entry, NULL); /* TODO: Respond to a failure in the following? */ - crt = purple_certificate_import(x509, fullpath); + crts = purple_certificates_import(x509, fullpath); - if (x509_ca_quiet_put_cert(crt)) { - purple_debug_info("certificate/x509/ca", - "Loaded %s\n", - fullpath); - } else { - purple_debug_error("certificate/x509/ca", - "Failed to load %s\n", - fullpath); + while (crts && crts->data) { + crt = crts->data; + if (x509_ca_quiet_put_cert(crt)) { + gchar *name; + name = purple_certificate_get_subject_name(crt); + purple_debug_info("certificate/x509/ca", + "Loaded %s from %s\n", + name ? name : "(unknown)", fullpath); + } else { + purple_debug_error("certificate/x509/ca", + "Failed to load certificate from %s\n", + fullpath); + } + purple_certificate_destroy(crt); + crts = g_slist_delete_link(crts, crts); } - purple_certificate_destroy(crt); g_free(fullpath); } g_dir_close(certdir); } g_pattern_spec_free(pempat); + g_pattern_spec_free(crtpat); purple_debug_info("certificate/x509/ca", "Lazy init completed.\n");