aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--smime/ChangeLog21
-rw-r--r--smime/gui/component.c29
-rw-r--r--smime/lib/e-cert-db.c29
-rw-r--r--smime/lib/e-cert-db.h2
-rw-r--r--smime/lib/smime-marshal.list1
5 files changed, 78 insertions, 4 deletions
diff --git a/smime/ChangeLog b/smime/ChangeLog
index 9627956f49..fd54b722fb 100644
--- a/smime/ChangeLog
+++ b/smime/ChangeLog
@@ -1,3 +1,24 @@
+2004-03-19 Chris Toshok <toshok@ximian.com>
+
+ [ fixes bug #52829 ]
+
+ * lib/smime-marshal.list: add BOOL:POINTER,POINTER for
+ pk11_change_passwd.
+
+ * lib/e-cert-db.c (e_cert_db_class_init): initialize the
+ pk11_change_passwd signal.
+ (e_cert_db_login_to_slot): emit "pk11_change_passwd" with
+ old_passwd == NULL to initialize the database.
+
+ * lib/e-cert-db.h: add pk11_change_passwd signal slot.
+
+ * gui/component.c (smime_pk11_change_passwd): implement the
+ portion of this that gets called with old_passwd == NULL (the only
+ part that needs implementing yet, since we don't have a UI for
+ changing the password.)
+ (smime_component_init): hook up to the pk11_change_passwd signal
+ on ECertDB.
+
2004-03-10 Rodney Dawes <dobey@ximian.com>
* gui/certificate-viewer.c (certificate_viewer_show): Fix the border
diff --git a/smime/gui/component.c b/smime/gui/component.c
index 1b27f2d3d2..3c86b6e820 100644
--- a/smime/gui/component.c
+++ b/smime/gui/component.c
@@ -52,6 +52,31 @@ smime_pk11_passwd (ECertDB *db, PK11SlotInfo* slot, gboolean retry, char **passw
return TRUE;
}
+static gboolean
+smime_pk11_change_passwd (ECertDB *db, char **old_passwd, char **passwd, gpointer arg)
+{
+ char *prompt;
+
+ /* XXX need better strings here, just copy mozilla's? */
+
+ if (!old_passwd) {
+ /* we're setting the password initially */
+ prompt = _("Enter new password for certificate database");
+
+ *passwd = e_passwords_ask_password (_("Enter new password"), NULL, NULL,
+ prompt, TRUE,
+ E_PASSWORDS_DO_NOT_REMEMBER, NULL,
+ NULL);
+ }
+ else {
+ /* we're changing the password */
+ /* XXX implement this... */
+ }
+
+ /* this should return FALSE if they canceled. */
+ return TRUE;
+}
+
void
smime_component_init (void)
{
@@ -63,4 +88,8 @@ smime_component_init (void)
g_signal_connect (e_cert_db_peek (),
"pk11_passwd",
G_CALLBACK (smime_pk11_passwd), NULL);
+
+ g_signal_connect (e_cert_db_peek (),
+ "pk11_change_passwd",
+ G_CALLBACK (smime_pk11_change_passwd), NULL);
}
diff --git a/smime/lib/e-cert-db.c b/smime/lib/e-cert-db.c
index be45f88883..8de335e04a 100644
--- a/smime/lib/e-cert-db.c
+++ b/smime/lib/e-cert-db.c
@@ -94,6 +94,7 @@
enum {
PK11_PASSWD,
+ PK11_CHANGE_PASSWD,
LAST_SIGNAL
};
@@ -271,6 +272,16 @@ e_cert_db_class_init (ECertDBClass *klass)
smime_marshal_BOOLEAN__POINTER_BOOLEAN_POINTER,
G_TYPE_BOOLEAN, 3,
G_TYPE_POINTER, G_TYPE_BOOLEAN, G_TYPE_POINTER);
+
+ e_cert_db_signals[PK11_CHANGE_PASSWD] =
+ g_signal_new ("pk11_change_passwd",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (ECertDBClass, pk11_change_passwd),
+ NULL, NULL,
+ smime_marshal_BOOLEAN__POINTER_POINTER,
+ G_TYPE_BOOLEAN, 2,
+ G_TYPE_POINTER, G_TYPE_POINTER);
}
static void
@@ -1117,12 +1128,22 @@ e_cert_db_login_to_slot (ECertDB *cert_db,
PK11_Logout (slot);
if (PK11_NeedUserInit (slot)) {
+ char *pwd;
+ gboolean rv = FALSE;
+
printf ("initializing slot password\n");
+
+ g_signal_emit (e_cert_db_peek (),
+ e_cert_db_signals[PK11_CHANGE_PASSWD], 0,
+ NULL,
+ &pwd,
+ &rv);
+
+ if (!rv)
+ return FALSE;
+
/* the user needs to specify the initial password */
- /* XXX toshok - this should use a signal to
- pop up a password dialog ala the
- pk11_passwd prompt. for now we do it
- here. */
+ PK11_InitPin (slot, "", pwd);
}
if (PK11_Authenticate (slot, PR_TRUE, NULL) != SECSuccess) {
diff --git a/smime/lib/e-cert-db.h b/smime/lib/e-cert-db.h
index d31fc02186..3fb6c62c71 100644
--- a/smime/lib/e-cert-db.h
+++ b/smime/lib/e-cert-db.h
@@ -50,6 +50,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);
+
/* Padding for future expansion */
void (*_ecert_reserved0) (void);
void (*_ecert_reserved1) (void);
diff --git a/smime/lib/smime-marshal.list b/smime/lib/smime-marshal.list
index 97c7a93233..dbdd3c3159 100644
--- a/smime/lib/smime-marshal.list
+++ b/smime/lib/smime-marshal.list
@@ -1 +1,2 @@
BOOL:POINTER,BOOL,POINTER
+BOOL:POINTER,POINTER