]>
Commit | Line | Data |
---|---|---|
aedd63db AM |
1 | From 98f709deac9381721b93d896c27576dbff1f711c Mon Sep 17 00:00:00 2001 |
2 | From: Stephan Bosch <stephan.bosch@open-xchange.com> | |
3 | Date: Fri, 12 Nov 2021 10:43:16 +0100 | |
4 | Subject: [PATCH 1/2] lib-storage: mail-duplicate - Fix panic occurring when | |
5 | user has no configured home directory. | |
6 | ||
7 | Panic was: | |
8 | ||
9 | Panic: file imem.c: line 65 (i_strconcat): assertion failed: (str1 != NULL) | |
10 | --- | |
11 | src/lib-storage/mail-duplicate.c | 9 ++++++--- | |
12 | 1 file changed, 6 insertions(+), 3 deletions(-) | |
13 | ||
14 | diff --git a/src/lib-storage/mail-duplicate.c b/src/lib-storage/mail-duplicate.c | |
15 | index ff4fa5630b..407fe4aec9 100644 | |
16 | --- a/src/lib-storage/mail-duplicate.c | |
17 | +++ b/src/lib-storage/mail-duplicate.c | |
18 | @@ -722,14 +722,17 @@ mail_duplicate_db_init(struct mail_user *user, const char *name) | |
19 | ||
20 | e_debug(db->event, "Initialize"); | |
21 | ||
22 | + db->user = user; | |
23 | + | |
24 | if (mail_user_get_home(user, &home) <= 0) { | |
25 | e_error(db->event, "User %s doesn't have home dir set, " | |
26 | "disabling duplicate database", user->username); | |
27 | + return db; | |
28 | } | |
29 | ||
30 | - db->user = user; | |
31 | - db->path = home == NULL ? NULL : | |
32 | - i_strconcat(home, "/.dovecot.", name, NULL); | |
33 | + i_assert(home != NULL); | |
34 | + | |
35 | + db->path = i_strconcat(home, "/.dovecot.", name, NULL); | |
36 | db->dotlock_set = default_mail_duplicate_dotlock_set; | |
37 | ||
38 | lock_dir = mail_user_get_volatile_dir(user); | |
39 | ||
40 | From d36d2c595a12378b597f1fc82cd7b47cbbadb2e1 Mon Sep 17 00:00:00 2001 | |
41 | From: Stephan Bosch <stephan.bosch@open-xchange.com> | |
42 | Date: Fri, 12 Nov 2021 11:16:47 +0100 | |
43 | Subject: [PATCH 2/2] lib-storage: mail-duplicate - Fix segfault occurring when | |
44 | user has no configured home directory | |
45 | ||
46 | Occurred only when a duplicate DB transaction was created. | |
47 | --- | |
48 | src/lib-storage/mail-duplicate.c | 12 +++++++----- | |
49 | 1 file changed, 7 insertions(+), 5 deletions(-) | |
50 | ||
51 | diff --git a/src/lib-storage/mail-duplicate.c b/src/lib-storage/mail-duplicate.c | |
52 | index 407fe4aec9..7a78caa7c7 100644 | |
53 | --- a/src/lib-storage/mail-duplicate.c | |
54 | +++ b/src/lib-storage/mail-duplicate.c | |
55 | @@ -491,13 +491,15 @@ mail_duplicate_transaction_free(struct mail_duplicate_transaction **_trans) | |
56 | i_assert(trans->db->transaction_count > 0); | |
57 | trans->db->transaction_count--; | |
58 | ||
59 | - iter = hash_table_iterate_init(trans->hash); | |
60 | - while (hash_table_iterate(iter, trans->hash, &d, &d)) | |
61 | - mail_duplicate_unlock(trans, d); | |
62 | - hash_table_iterate_deinit(&iter); | |
63 | + if (hash_table_is_created(trans->hash)) { | |
64 | + iter = hash_table_iterate_init(trans->hash); | |
65 | + while (hash_table_iterate(iter, trans->hash, &d, &d)) | |
66 | + mail_duplicate_unlock(trans, d); | |
67 | + hash_table_iterate_deinit(&iter); | |
68 | + hash_table_destroy(&trans->hash); | |
69 | + } | |
70 | i_assert(trans->id_lock_count == 0); | |
71 | ||
72 | - hash_table_destroy(&trans->hash); | |
73 | event_unref(&trans->event); | |
74 | pool_unref(&trans->pool); | |
75 | } |