aboutsummaryrefslogtreecommitdiffstats
path: root/smime/gui/certificate-manager.c
diff options
context:
space:
mode:
Diffstat (limited to 'smime/gui/certificate-manager.c')
-rw-r--r--smime/gui/certificate-manager.c40
1 files changed, 27 insertions, 13 deletions
diff --git a/smime/gui/certificate-manager.c b/smime/gui/certificate-manager.c
index 1f1bbb9f13..eb3a08bf84 100644
--- a/smime/gui/certificate-manager.c
+++ b/smime/gui/certificate-manager.c
@@ -131,7 +131,6 @@ static void
import_your (GtkWidget *widget, CertificateManagerData *cfm)
{
GtkWidget *filesel;
- const char *filename;
GtkFileFilter* filter;
@@ -145,6 +144,7 @@ import_your (GtkWidget *widget, CertificateManagerData *cfm)
filter = gtk_file_filter_new();
gtk_file_filter_set_name (filter, _("All PKCS12 files"));
+ gtk_file_filter_add_mime_type (filter, "application/x-x509-user-cert");
gtk_file_filter_add_mime_type (filter, "application/x-pkcs12");
gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (filesel), filter);
@@ -154,7 +154,10 @@ import_your (GtkWidget *widget, CertificateManagerData *cfm)
gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (filesel), filter);
if (GTK_RESPONSE_OK == gtk_dialog_run (GTK_DIALOG (filesel))) {
- filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (filesel));
+ char *filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (filesel));
+
+ /* destroy dialog to get rid of it in the GUI */
+ gtk_widget_destroy (filesel);
if (e_cert_db_import_pkcs12_file (e_cert_db_peek (),
filename, NULL /* XXX */)) {
@@ -164,9 +167,10 @@ import_your (GtkWidget *widget, CertificateManagerData *cfm)
load_certs (cfm, E_CERT_USER, add_user_cert);
gtk_tree_view_expand_all (GTK_TREE_VIEW (cfm->yourcerts_treeview));
}
- }
- gtk_widget_destroy (filesel);
+ g_free (filename);
+ } else
+ gtk_widget_destroy (filesel);
}
static void
@@ -374,7 +378,6 @@ static void
import_contact (GtkWidget *widget, CertificateManagerData *cfm)
{
GtkWidget *filesel;
- const char *filename;
GtkFileFilter *filter;
@@ -389,6 +392,7 @@ import_contact (GtkWidget *widget, CertificateManagerData *cfm)
filter = gtk_file_filter_new();
gtk_file_filter_set_name (filter, _("All email certificate files"));
gtk_file_filter_add_mime_type (filter, "application/x-x509-email-cert");
+ gtk_file_filter_add_mime_type (filter, "application/x-x509-ca-cert");
gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (filesel), filter);
filter = gtk_file_filter_new ();
@@ -397,7 +401,10 @@ import_contact (GtkWidget *widget, CertificateManagerData *cfm)
gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (filesel), filter);
if (GTK_RESPONSE_OK == gtk_dialog_run (GTK_DIALOG (filesel))) {
- filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (filesel));
+ char *filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (filesel));
+
+ /* destroy dialog to get rid of it in the GUI */
+ gtk_widget_destroy (filesel);
if (e_cert_db_import_certs_from_file (e_cert_db_peek (),
filename,
@@ -410,9 +417,10 @@ import_contact (GtkWidget *widget, CertificateManagerData *cfm)
load_certs (cfm, E_CERT_CONTACT, add_contact_cert);
gtk_tree_view_expand_all (GTK_TREE_VIEW (cfm->contactcerts_treeview));
}
- }
- gtk_widget_destroy (filesel);
+ g_free (filename);
+ } else
+ gtk_widget_destroy (filesel);
}
static void
@@ -598,7 +606,6 @@ static void
import_ca (GtkWidget *widget, CertificateManagerData *cfm)
{
GtkWidget *filesel;
- const char *filename;
GtkFileFilter *filter;
@@ -621,7 +628,10 @@ import_ca (GtkWidget *widget, CertificateManagerData *cfm)
gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (filesel), filter);
if (GTK_RESPONSE_OK == gtk_dialog_run (GTK_DIALOG (filesel))) {
- filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (filesel));
+ char *filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (filesel));
+
+ /* destroy dialog to get rid of it in the GUI */
+ gtk_widget_destroy (filesel);
if (e_cert_db_import_certs_from_file (e_cert_db_peek (),
filename,
@@ -633,9 +643,10 @@ import_ca (GtkWidget *widget, CertificateManagerData *cfm)
unload_certs (cfm, E_CERT_CA);
load_certs (cfm, E_CERT_CA, add_ca_cert);
}
- }
- gtk_widget_destroy (filesel);
+ g_free (filename);
+ } else
+ gtk_widget_destroy (filesel);
}
static void
@@ -953,7 +964,10 @@ load_certs (CertificateManagerData *cfm,
!CERT_LIST_END(node, certList);
node = CERT_LIST_NEXT(node)) {
ECert *cert = e_cert_new ((CERTCertificate*)node->cert);
- if (e_cert_get_cert_type(cert) == type) {
+ ECertType ct = e_cert_get_cert_type (cert);
+
+ /* show everything else in a contact tab */
+ if (ct == type || (type == E_CERT_CONTACT && ct != E_CERT_CA && ct != E_CERT_USER)) {
add_cert (cfm, cert);
}
}