aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--smime/ChangeLog45
-rw-r--r--smime/gui/Makefile.am2
-rw-r--r--smime/gui/ca-trust-dialog.c113
-rw-r--r--smime/gui/ca-trust-dialog.h33
-rw-r--r--smime/gui/certificate-manager.c55
-rw-r--r--smime/gui/certificate-viewer.c25
-rw-r--r--smime/gui/component.c23
-rw-r--r--smime/gui/smime-ui.glade9
-rw-r--r--smime/lib/e-cert-db.c59
-rw-r--r--smime/lib/e-cert-db.h2
-rw-r--r--smime/lib/smime-marshal.list1
11 files changed, 318 insertions, 49 deletions
diff --git a/smime/ChangeLog b/smime/ChangeLog
index 853d893eba..48a8661d67 100644
--- a/smime/ChangeLog
+++ b/smime/ChangeLog
@@ -1,3 +1,48 @@
+2004-03-24 Chris Toshok <toshok@ximian.com>
+
+ * lib/smime-marshal.list: add BOOL:POINTER,POINTER,POINTER,POINTER
+ for confirm_ca_cert_import.
+
+ * lib/e-cert-db.c (e_cert_db_class_init): initialize the
+ confirm_ca_cert_import signal.
+ (confirm_download_ca_cert): emit confirm_ca_cert_import and use
+ the returned values.
+ (handle_ca_cert_download): fix the ca trust foo.
+ (e_cert_db_import_certs): pass the cerdb to
+ handle_ca_cert_download since we need to emit something on that
+ object.
+
+ * lib/e-cert-db.h (struct _ECertDBClass): add
+ confirm_ca_cert_import signal.
+
+ * gui/smime-ui.glade: give names to the check buttons in the ca
+ trust dialog.
+
+ * gui/component.c (smime_confirm_ca_cert_import): new function,
+ show the trust dialog.
+ (smime_component_init): connect to "confirm_ca_cert_import"
+ signal.
+
+ * gui/certificate-viewer.c (fill_in_general): fix lots of
+ uninitialized variable accesses.
+ (certificate_viewer_show): don't show the dialog (or connect to
+ the response signal.) that's the caller's job.
+
+ * gui/certificate-manager.c (view_your): do the showing of the
+ certificate_viewer here.
+ (view_contact): same.
+ (view_ca): same.
+ (edit_ca): new function, pop up the ca trust dialog. we need more
+ here though, to fill in the toggle buttons when bringing up the
+ dialog, and also to save out the settings when the user clicks ok.
+ (initialize_authoritycerts_ui): hook up the edit_ca button.
+
+ * gui/Makefile.am (libevolution_smime_la_SOURCES): add
+ ca-trust-dialog.[ch].
+
+ * gui/ca-trust-dialog.[ch]: new file implementing the ca trust
+ dialog used for importing/editing ca trust levels.
+
2004-03-19 Chris Toshok <toshok@ximian.com>
[ fixes bug #52667 ]
diff --git a/smime/gui/Makefile.am b/smime/gui/Makefile.am
index 17526784d6..3a18b30784 100644
--- a/smime/gui/Makefile.am
+++ b/smime/gui/Makefile.am
@@ -19,6 +19,8 @@ INCLUDES = \
noinst_LTLIBRARIES = libevolution-smime.la
libevolution_smime_la_SOURCES = \
+ ca-trust-dialog.c \
+ ca-trust-dialog.h \
certificate-manager.c \
certificate-manager.h \
certificate-viewer.c \
diff --git a/smime/gui/ca-trust-dialog.c b/smime/gui/ca-trust-dialog.c
new file mode 100644
index 0000000000..2e97653601
--- /dev/null
+++ b/smime/gui/ca-trust-dialog.c
@@ -0,0 +1,113 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Authors: Chris Toshok <toshok@ximian.com>
+ *
+ * Copyright (C) 2004 Novell, Inc. (www.novell.com)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "ca-trust-dialog.h"
+#include "certificate-viewer.h"
+
+#include <gtk/gtk.h>
+
+#include <libgnome/gnome-i18n.h>
+#include <glade/glade.h>
+
+#define GLADE_FILE_NAME "smime-ui.glade"
+
+typedef struct {
+ GladeXML *gui;
+ GtkWidget *dialog;
+ GtkWidget *ssl_checkbutton;
+ GtkWidget *email_checkbutton;
+ GtkWidget *objsign_checkbutton;
+ GtkWidget *view_cert_button;
+
+ ECert *cert;
+} CATrustDialogData;
+
+static void
+free_data (gpointer data, GObject *where_the_object_was)
+{
+ CATrustDialogData *ctd = data;
+
+ g_object_unref (ctd->cert);
+ g_object_unref (ctd->gui);
+ g_free (ctd);
+}
+
+static void
+view_cert (GtkWidget *button, CATrustDialogData *data)
+{
+ GtkWidget *dialog = certificate_viewer_show (data->cert);
+
+ gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (data->dialog));
+
+ gtk_dialog_run (GTK_DIALOG (dialog));
+
+ gtk_widget_destroy (dialog);
+}
+
+GtkWidget*
+ca_trust_dialog_show (ECert *cert, gboolean importing)
+{
+ CATrustDialogData *ctd_data;
+
+ ctd_data = g_new0 (CATrustDialogData, 1);
+ ctd_data->gui = glade_xml_new (EVOLUTION_GLADEDIR "/" GLADE_FILE_NAME, NULL, NULL);
+
+ ctd_data->dialog = glade_xml_get_widget (ctd_data->gui, "ca-trust-dialog");
+ ctd_data->cert = g_object_ref (cert);
+
+ ctd_data->ssl_checkbutton = glade_xml_get_widget (ctd_data->gui, "ssl_trust_checkbutton");
+ ctd_data->email_checkbutton = glade_xml_get_widget (ctd_data->gui, "email_trust_checkbutton");
+ ctd_data->objsign_checkbutton = glade_xml_get_widget (ctd_data->gui, "objsign_trust_checkbutton");
+ ctd_data->view_cert_button = glade_xml_get_widget (ctd_data->gui, "view_certificate_button");
+
+ g_signal_connect (ctd_data->view_cert_button,
+ "clicked", G_CALLBACK (view_cert),
+ ctd_data);
+
+ gtk_widget_realize (ctd_data->dialog);
+ gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (ctd_data->dialog)->action_area), 12);
+
+ g_object_weak_ref (G_OBJECT (ctd_data->dialog), free_data, ctd_data);
+
+ g_object_set_data (G_OBJECT (ctd_data->dialog), "CATrustDialogData", ctd_data);
+
+ return ctd_data->dialog;
+}
+
+void
+ca_trust_dialog_get_trust (GtkWidget *widget, gboolean *ssl, gboolean *email, gboolean *objsign)
+{
+ CATrustDialogData *ctd_data;
+
+ ctd_data = g_object_get_data (G_OBJECT (widget), "CATrustDialogData");
+ if (!ctd_data)
+ return;
+
+ *ssl = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (ctd_data->ssl_checkbutton));
+ *email = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (ctd_data->email_checkbutton));
+ *objsign = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (ctd_data->objsign_checkbutton));
+}
diff --git a/smime/gui/ca-trust-dialog.h b/smime/gui/ca-trust-dialog.h
new file mode 100644
index 0000000000..e15d98170a
--- /dev/null
+++ b/smime/gui/ca-trust-dialog.h
@@ -0,0 +1,33 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Authors: Chris Toshok <toshok@ximian.com>
+ *
+ * Copyright (C) 2004 Novell, Inc. (www.novell.com)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _CA_TRUST_DIALOG_H_
+#define _CA_TRUST_DIALOG_H
+
+#include <gtk/gtkwidget.h>
+#include "e-cert.h"
+
+GtkWidget* ca_trust_dialog_show (ECert *cert, gboolean importing);
+
+void ca_trust_dialog_get_trust (GtkWidget *widget, gboolean *ssl, gboolean *email, gboolean *objsign);
+
+#endif /* _CA_TRUST_DIALOG_H_ */
diff --git a/smime/gui/certificate-manager.c b/smime/gui/certificate-manager.c
index 94698d2264..a59f8a0d96 100644
--- a/smime/gui/certificate-manager.c
+++ b/smime/gui/certificate-manager.c
@@ -33,6 +33,7 @@
#include <glade/glade.h>
#include "evolution-config-control.h"
+#include "ca-trust-dialog.h"
#include "certificate-manager.h"
#include "certificate-viewer.h"
@@ -192,8 +193,12 @@ view_your (GtkWidget *widget, CertificateManagerData *cfm)
4, &cert,
-1);
- if (cert)
- certificate_viewer_show (cert);
+ if (cert) {
+ GtkWidget *dialog = certificate_viewer_show (cert);
+ g_signal_connect (dialog, "response",
+ G_CALLBACK (gtk_widget_destroy), NULL);
+ gtk_widget_show (dialog);
+ }
}
}
@@ -305,8 +310,12 @@ view_contact (GtkWidget *widget, CertificateManagerData *cfm)
3, &cert,
-1);
- if (cert)
- certificate_viewer_show (cert);
+ if (cert) {
+ GtkWidget *dialog = certificate_viewer_show (cert);
+ g_signal_connect (dialog, "response",
+ G_CALLBACK (gtk_widget_destroy), NULL);
+ gtk_widget_show (dialog);
+ }
}
}
@@ -452,8 +461,39 @@ view_ca (GtkWidget *widget, CertificateManagerData *cfm)
1, &cert,
-1);
- if (cert)
- certificate_viewer_show (cert);
+ if (cert) {
+ GtkWidget *dialog = certificate_viewer_show (cert);
+ g_signal_connect (dialog, "response",
+ G_CALLBACK (gtk_widget_destroy), NULL);
+ gtk_widget_show (dialog);
+ }
+ }
+}
+
+static void
+edit_ca (GtkWidget *widget, CertificateManagerData *cfm)
+{
+ GtkTreeIter iter;
+
+ if (gtk_tree_selection_get_selected (gtk_tree_view_get_selection (GTK_TREE_VIEW(cfm->authoritycerts_treeview)),
+ NULL,
+ &iter)) {
+ ECert *cert;
+
+ gtk_tree_model_get (GTK_TREE_MODEL (cfm->authoritycerts_streemodel),
+ &iter,
+ 1, &cert,
+ -1);
+
+ if (cert) {
+ GtkWidget *dialog = ca_trust_dialog_show (cert, FALSE);
+
+ gtk_dialog_run (GTK_DIALOG (dialog));
+
+ /* XXX more stuff here surely */
+
+ gtk_widget_destroy (dialog);
+ }
}
}
@@ -556,6 +596,9 @@ initialize_authoritycerts_ui (CertificateManagerData *cfm)
if (cfm->view_ca_button)
g_signal_connect (cfm->view_ca_button, "clicked", G_CALLBACK (view_ca), cfm);
+ if (cfm->edit_ca_button)
+ g_signal_connect (cfm->edit_ca_button, "clicked", G_CALLBACK (edit_ca), cfm);
+
if (cfm->import_ca_button)
g_signal_connect (cfm->import_ca_button, "clicked", G_CALLBACK (import_ca), cfm);
diff --git a/smime/gui/certificate-viewer.c b/smime/gui/certificate-viewer.c
index 8fd5acb0b9..4495ca8f2b 100644
--- a/smime/gui/certificate-viewer.c
+++ b/smime/gui/certificate-viewer.c
@@ -70,24 +70,24 @@ fill_in_general (CertificateViewerData *cvm_data, ECert *cert)
char *markup;
/* issued to */
+ label = glade_xml_get_widget (cvm_data->gui, "issued-to-cn");
if (e_cert_get_cn (cert)) {
- label = glade_xml_get_widget (cvm_data->gui, "issued-to-cn");
gtk_label_set_text (GTK_LABEL (label), e_cert_get_cn (cert));
}
else {
gtk_label_set_markup (GTK_LABEL (label), NOT_PART_OF_CERT_MARKUP);
}
+ label = glade_xml_get_widget (cvm_data->gui, "issued-to-o");
if (e_cert_get_org (cert)) {
- label = glade_xml_get_widget (cvm_data->gui, "issued-to-o");
gtk_label_set_text (GTK_LABEL (label), e_cert_get_org (cert));
}
else {
gtk_label_set_markup (GTK_LABEL (label), NOT_PART_OF_CERT_MARKUP);
}
+ label = glade_xml_get_widget (cvm_data->gui, "issued-to-ou");
if (e_cert_get_org_unit (cert)) {
- label = glade_xml_get_widget (cvm_data->gui, "issued-to-ou");
gtk_label_set_text (GTK_LABEL (label), e_cert_get_org_unit (cert));
}
else {
@@ -99,24 +99,24 @@ fill_in_general (CertificateViewerData *cvm_data, ECert *cert)
gtk_label_set_text (GTK_LABEL (label), text);
/* issued by */
+ label = glade_xml_get_widget (cvm_data->gui, "issued-by-cn");
if (e_cert_get_issuer_cn (cert)) {
- label = glade_xml_get_widget (cvm_data->gui, "issued-by-cn");
gtk_label_set_text (GTK_LABEL (label), e_cert_get_issuer_cn (cert));
}
else {
gtk_label_set_markup (GTK_LABEL (label), NOT_PART_OF_CERT_MARKUP);
}
+ label = glade_xml_get_widget (cvm_data->gui, "issued-by-o");
if (e_cert_get_issuer_org (cert)) {
- label = glade_xml_get_widget (cvm_data->gui, "issued-by-o");
- gtk_label_set_text (GTK_LABEL (label), e_cert_get_issuer_org (cert));
+ gtk_label_set_text (GTK_LABEL (label), e_cert_get_issuer_org (cert));
}
else {
gtk_label_set_markup (GTK_LABEL (label), NOT_PART_OF_CERT_MARKUP);
}
-
+
+ label = glade_xml_get_widget (cvm_data->gui, "issued-by-ou");
if (e_cert_get_issuer_org_unit (cert)) {
- label = glade_xml_get_widget (cvm_data->gui, "issued-by-ou");
gtk_label_set_text (GTK_LABEL (label), e_cert_get_issuer_org_unit (cert));
}
else {
@@ -124,16 +124,16 @@ fill_in_general (CertificateViewerData *cvm_data, ECert *cert)
}
/* validity */
+ label = glade_xml_get_widget (cvm_data->gui, "validity-issued-on");
if (e_cert_get_issued_on (cert)) {
- label = glade_xml_get_widget (cvm_data->gui, "validity-issued-on");
gtk_label_set_text (GTK_LABEL (label), e_cert_get_issued_on (cert));
}
else {
gtk_label_set_markup (GTK_LABEL (label), NOT_PART_OF_CERT_MARKUP);
}
+ label = glade_xml_get_widget (cvm_data->gui, "validity-expires-on");
if (e_cert_get_expires_on (cert)) {
- label = glade_xml_get_widget (cvm_data->gui, "validity-expires-on");
gtk_label_set_text (GTK_LABEL (label), e_cert_get_expires_on (cert));
}
else {
@@ -343,9 +343,6 @@ certificate_viewer_show (ECert *cert)
g_object_weak_ref (G_OBJECT (cvm_data->dialog), free_data, cvm_data);
- g_signal_connect (cvm_data->dialog, "response",
- G_CALLBACK (gtk_widget_destroy), NULL);
-
- gtk_widget_show (cvm_data->dialog);
+ /* gtk_widget_show (cvm_data->dialog);*/
return cvm_data->dialog;
}
diff --git a/smime/gui/component.c b/smime/gui/component.c
index 3c86b6e820..e3e5e0f695 100644
--- a/smime/gui/component.c
+++ b/smime/gui/component.c
@@ -25,7 +25,11 @@
#include <config.h>
#endif
+#include <gtk/gtk.h>
+
#include <libgnome/gnome-i18n.h>
+
+#include "ca-trust-dialog.h"
#include "e-cert-db.h"
#include "e-util/e-passwords.h"
#include "pk11func.h"
@@ -77,6 +81,21 @@ smime_pk11_change_passwd (ECertDB *db, char **old_passwd, char **passwd, gpointe
return TRUE;
}
+static gboolean
+smime_confirm_ca_cert_import (ECertDB *db, ECert *cert, gboolean *trust_ssl, gboolean *trust_email, gboolean *trust_objsign, gpointer arg)
+{
+ GtkWidget *dialog = ca_trust_dialog_show (cert, TRUE);
+ int response;
+
+ response = gtk_dialog_run (GTK_DIALOG (dialog));
+
+ ca_trust_dialog_get_trust (dialog, trust_ssl, trust_email, trust_objsign);
+
+ gtk_widget_destroy (dialog);
+
+ return response != GTK_RESPONSE_CANCEL;
+}
+
void
smime_component_init (void)
{
@@ -92,4 +111,8 @@ smime_component_init (void)
g_signal_connect (e_cert_db_peek (),
"pk11_change_passwd",
G_CALLBACK (smime_pk11_change_passwd), NULL);
+
+ g_signal_connect (e_cert_db_peek (),
+ "confirm_ca_cert_import",
+ G_CALLBACK (smime_confirm_ca_cert_import), NULL);
}
diff --git a/smime/gui/smime-ui.glade b/smime/gui/smime-ui.glade
index 3b80c00baa..5682522b8d 100644
--- a/smime/gui/smime-ui.glade
+++ b/smime/gui/smime-ui.glade
@@ -2,6 +2,7 @@
<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
<glade-interface>
+<requires lib="gnome"/>
<widget class="GtkDialog" id="certificate-viewer-dialog">
<property name="title" translatable="yes">dialog1</property>
@@ -1861,7 +1862,7 @@
<property name="spacing">0</property>
<child>
- <widget class="GtkCheckButton" id="checkbutton1">
+ <widget class="GtkCheckButton" id="ssl_trust_checkbutton">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="label" translatable="yes">Trust this CA to identify web sites.</property>
@@ -1879,7 +1880,7 @@
</child>
<child>
- <widget class="GtkCheckButton" id="checkbutton2">
+ <widget class="GtkCheckButton" id="email_trust_checkbutton">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="label" translatable="yes">Trust this CA to identify email users.</property>
@@ -1897,7 +1898,7 @@
</child>
<child>
- <widget class="GtkCheckButton" id="checkbutton3">
+ <widget class="GtkCheckButton" id="objsign_trust_checkbutton">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="label" translatable="yes">Trust this CA to identify software developers.</property>
@@ -1951,7 +1952,7 @@
<property name="yscale">1</property>
<child>
- <widget class="GtkButton" id="button1">
+ <widget class="GtkButton" id="view_certificate_button">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="label" translatable="yes">View Certificate</property>
diff --git a/smime/lib/e-cert-db.c b/smime/lib/e-cert-db.c
index 8de335e04a..7831572097 100644
--- a/smime/lib/e-cert-db.c
+++ b/smime/lib/e-cert-db.c
@@ -95,6 +95,7 @@
enum {
PK11_PASSWD,
PK11_CHANGE_PASSWD,
+ CONFIRM_CA_CERT_IMPORT,
LAST_SIGNAL
};
@@ -282,6 +283,16 @@ e_cert_db_class_init (ECertDBClass *klass)
smime_marshal_BOOLEAN__POINTER_POINTER,
G_TYPE_BOOLEAN, 2,
G_TYPE_POINTER, G_TYPE_POINTER);
+
+ e_cert_db_signals[CONFIRM_CA_CERT_IMPORT] =
+ g_signal_new ("confirm_ca_cert_import",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (ECertDBClass, confirm_ca_cert_import),
+ NULL, NULL,
+ smime_marshal_BOOLEAN__POINTER_POINTER_POINTER_POINTER,
+ G_TYPE_BOOLEAN, 4,
+ G_TYPE_POINTER, G_TYPE_POINTER, G_TYPE_POINTER, G_TYPE_POINTER);
}
static void
@@ -475,16 +486,27 @@ e_cert_db_find_cert_by_email_address (ECertDB *certdb,
}
static gboolean
-_confirm_download_ca_cert (ECert *cert, guint32 *trustBits, gboolean *allow)
+confirm_download_ca_cert (ECertDB *cert_db, ECert *cert, gboolean *trust_ssl, gboolean *trust_email, gboolean *trust_objsign)
{
- /* right now just allow it and set the trustBits to 0 */
- *trustBits = 0;
- *allow = TRUE;
- return TRUE;
+ gboolean rv = FALSE;
+
+ *trust_ssl =
+ *trust_email =
+ *trust_objsign = FALSE;
+
+ g_signal_emit (e_cert_db_peek (),
+ e_cert_db_signals[CONFIRM_CA_CERT_IMPORT], 0,
+ cert,
+ trust_ssl,
+ trust_email,
+ trust_objsign,
+ &rv);
+
+ return rv;
}
static gboolean
-handle_ca_cert_download(GList *certs, GError **error)
+handle_ca_cert_download(ECertDB *cert_db, GList *certs, GError **error)
{
ECert *certToShow;
SECItem der;
@@ -579,23 +601,18 @@ handle_ca_cert_download(GList *certs, GError **error)
#endif
if (tmpCert->isperm) {
+ /* XXX we shouldn't be popping up dialogs in this code. */
e_notice (NULL, GTK_MESSAGE_WARNING, _("Certificate already exists"));
/* XXX gerror */
return FALSE;
}
else {
- guint32 trustBits;
- gboolean allow;
+ gboolean trust_ssl, trust_email, trust_objsign;
char *nickname;
SECStatus srv;
CERTCertTrust trust;
- if (!_confirm_download_ca_cert (certToShow, &trustBits, &allow)) {
- /* XXX gerror */
- return FALSE;
- }
-
- if (!allow) {
+ if (!confirm_download_ca_cert (cert_db, certToShow, &trust_ssl, &trust_email, &trust_objsign)) {
/* XXX gerror */
return FALSE;
}
@@ -609,15 +626,9 @@ handle_ca_cert_download(GList *certs, GError **error)
e_cert_trust_init (&trust);
e_cert_trust_set_valid_ca (&trust);
e_cert_trust_add_ca_trust (&trust,
-#if 1
- /* XXX we need that ui working i guess. */
- 0, 0, 0
-#else
- trustBits & nsIX509CertDB::TRUSTED_SSL,
- trustBits & nsIX509CertDB::TRUSTED_EMAIL,
- trustBits & nsIX509CertDB::TRUSTED_OBJSIGN
-#endif
-);
+ trust_ssl,
+ trust_email,
+ trust_objsign);
srv = CERT_AddTempCertToPerm(tmpCert,
nickname,
@@ -730,7 +741,7 @@ e_cert_db_import_certs (ECertDB *certdb,
}
switch (cert_type) {
case E_CERT_CA:
- rv = handle_ca_cert_download(certs, error);
+ rv = handle_ca_cert_download(certdb, certs, error);
break;
default:
/* We only deal with import CA certs in this method currently.*/
diff --git a/smime/lib/e-cert-db.h b/smime/lib/e-cert-db.h
index 3fb6c62c71..59cd10906a 100644
--- a/smime/lib/e-cert-db.h
+++ b/smime/lib/e-cert-db.h
@@ -49,8 +49,8 @@ struct _ECertDBClass {
/* signals */
gboolean (*pk11_passwd) (ECertDB *db, PK11SlotInfo *slot, gboolean retry, char **passwd);
-
gboolean (*pk11_change_passwd) (ECertDB *db, char **orig_passwd, char **passwd);
+ gboolean (*confirm_ca_cert_import) (ECertDB *db, ECert *cert, gboolean *trust_ssl, gboolean *trust_email, gboolean *trust_objsign);
/* Padding for future expansion */
void (*_ecert_reserved0) (void);
diff --git a/smime/lib/smime-marshal.list b/smime/lib/smime-marshal.list
index dbdd3c3159..6eb2617ec0 100644
--- a/smime/lib/smime-marshal.list
+++ b/smime/lib/smime-marshal.list
@@ -1,2 +1,3 @@
BOOL:POINTER,BOOL,POINTER
BOOL:POINTER,POINTER
+BOOL:POINTER,POINTER,POINTER,POINTER