File 0001-Add-support-for-delayed-delete-mode-in-sync_apply_un.patch of Package cyrus-imapd-3
From 56cd822d3570c8837c5475a0864192351dc28f8f Mon Sep 17 00:00:00 2001
From: "Jeroen van Meeuwen (Apheleia IT)" <vanmeeuwen@apheleia-it.ch>
Date: Tue, 29 Nov 2022 11:38:25 +0100
Subject: [PATCH] Add support for delayed delete mode in sync_apply_unmailbox()
and sync_apply_unuser()
Signed-off-by: Jeroen van Meeuwen (Apheleia IT) <vanmeeuwen@apheleia-it.ch>
---
imap/sync_support.c | 33 +++++++++++++++++++++++++++++----
1 file changed, 29 insertions(+), 4 deletions(-)
diff --git a/imap/sync_support.c b/imap/sync_support.c
index e6e558d6f..20d84e30f 100644
--- a/imap/sync_support.c
+++ b/imap/sync_support.c
@@ -3630,6 +3630,7 @@ bail:
int sync_apply_unmailbox(struct dlist *kin, struct sync_state *sstate)
{
const char *mboxname = kin->sval;
+ int r;
struct mboxlock *namespacelock = mboxname_usernamespacelock(mboxname);
@@ -3637,9 +3638,20 @@ int sync_apply_unmailbox(struct dlist *kin, struct sync_state *sstate)
int delflags = MBOXLIST_DELETE_FORCE | MBOXLIST_DELETE_SILENT;
if (sstate->flags & SYNC_FLAG_LOCALONLY)
delflags |= MBOXLIST_DELETE_LOCALONLY;
- int r = mboxlist_deletemailbox(mboxname, sstate->userisadmin,
+
+ if (!mboxlist_delayed_delete_isenabled()) {
+ r = mboxlist_deletemailbox(mboxname, sstate->userisadmin,
+ sstate->userid, sstate->authstate,
+ NULL, delflags);
+ } else if (mboxname_isdeletedmailbox(mboxname, NULL)) {
+ r = mboxlist_deletemailbox(mboxname, sstate->userisadmin,
sstate->userid, sstate->authstate,
NULL, delflags);
+ } else {
+ r = mboxlist_delayed_deletemailbox(mboxname, sstate->userisadmin,
+ sstate->userid, sstate->authstate,
+ NULL, delflags);
+ }
mboxname_release(&namespacelock);
@@ -3972,11 +3984,24 @@ int sync_apply_unuser(struct dlist *kin, struct sync_state *sstate)
int delflags = MBOXLIST_DELETE_FORCE;
if (sstate->flags & SYNC_FLAG_LOCALONLY)
delflags |= MBOXLIST_DELETE_LOCALONLY;
+
for (i = list->count; i; i--) {
const char *name = strarray_nth(list, i-1);
- r = mboxlist_deletemailbox(name, sstate->userisadmin,
- sstate->userid, sstate->authstate,
- NULL, delflags);
+
+ if (!mboxlist_delayed_delete_isenabled()) {
+ r = mboxlist_deletemailbox(name, sstate->userisadmin,
+ sstate->userid, sstate->authstate,
+ NULL, delflags);
+ } else if (mboxname_isdeletedmailbox(name, NULL)) {
+ r = mboxlist_deletemailbox(name, sstate->userisadmin,
+ sstate->userid, sstate->authstate,
+ NULL, delflags);
+ } else {
+ r = mboxlist_delayed_deletemailbox(name, sstate->userisadmin,
+ sstate->userid, sstate->authstate,
+ NULL, delflags);
+ }
+
if (r) goto done;
}
--
2.37.3