summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMilan Crha <mcrha@redhat.com>2023-03-20 10:03:36 +0100
committerMilan Crha <mcrha@redhat.com>2023-03-20 10:05:39 +0100
commitd2cc0aa22cf9218f0a90089bc7e0c0755b2d1e5a (patch)
tree1685ef5d1d5f210fb370a4aa9606ce124ff1f5fd
parentab7eb5031fef8d88c00567d19714d5cf1c5d5b01 (diff)
downloadevolution-d2cc0aa22cf9218f0a90089bc7e0c0755b2d1e5a.tar.gz
I#2293 - Cannot import pkcs12 with empty password
Closes https://gitlab.gnome.org/GNOME/evolution/-/issues/2293
-rw-r--r--src/smime/lib/e-pkcs12.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/smime/lib/e-pkcs12.c b/src/smime/lib/e-pkcs12.c
index 3fce513ebe..3209a8659a 100644
--- a/src/smime/lib/e-pkcs12.c
+++ b/src/smime/lib/e-pkcs12.c
@@ -169,7 +169,7 @@ prompt_for_password (gchar *title,
#endif
if (PORT_UCS2_ASCIIConversion (toUnicode, (unsigned char *) passwd, len, pwd->data, pwd->len, &pwd->len, swapUnicode) == PR_FALSE) {
res = FALSE;
- } else if ((pwd->len >= 2) && (pwd->data[pwd->len - 1] || pwd->data[pwd->len - 2])) {
+ } else if ((!pwd->len) || ((pwd->len >= 2) && (pwd->data[pwd->len - 1] || pwd->data[pwd->len - 2]))) {
if (pwd->len + 2 > 3 * len)
pwd->data = (unsigned char *) PORT_Realloc (pwd->data, pwd->len + 2);
if (!pwd->data) {
@@ -270,6 +270,17 @@ import_from_file_helper (EPKCS12 *pkcs12,
/* First try without password */
dcx = read_with_password (slot, path, &passwd, &srv, &rv, NULL);
+ if (!dcx) {
+ /* Second with an empty password */
+ passwd.data = (unsigned char *) "\0\0";
+ passwd.len = 2;
+
+ dcx = read_with_password (slot, path, &passwd, &srv, &rv, NULL);
+
+ passwd.data = NULL;
+ passwd.len = 0;
+ }
+
/* if failed, ask for password */
if (!dcx) {
passwd.data = NULL;