diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php index a73b9d0922f82f3e29d4192f176aadd730f163fe..71753a6b3317276d0c936954d346cfb53783b736 100644 --- a/install/lib/installer_base.lib.php +++ b/install/lib/installer_base.lib.php @@ -3847,6 +3847,10 @@ class installer_base { $root_cron_jobs[] = "0 0 * * * ".$install_dir."/server/scripts/create_daily_nginx_access_logs.sh &> /dev/null"; } + if ($conf['services']['mail'] == 1) { + $root_cron_jobs[] = "30 23 * * * ".$install_dir."/server/scripts/handle_mailbox_soft_deleted.sh &> /dev/null"; + } + foreach($root_cron_jobs as $cron_job) { if(!in_array($cron_job."\n", $existing_root_cron_jobs)) { $existing_root_cron_jobs[] = $cron_job."\n"; diff --git a/install/tpl/server.ini.master b/install/tpl/server.ini.master index 8799e1f34c7efec3ec6e375659ea31b1ef31f833..30bce91c00e7fc0ab9c45b46cb78db25e25ece7e 100644 --- a/install/tpl/server.ini.master +++ b/install/tpl/server.ini.master @@ -56,6 +56,7 @@ relayhost_user= relayhost_password= mailbox_size_limit=0 message_size_limit=0 +mailbox_soft_delete=n mailbox_quota_stats=y realtime_blackhole_list=zen.spamhaus.org overquota_notify_threshold=90 diff --git a/interface/web/admin/form/server_config.tform.php b/interface/web/admin/form/server_config.tform.php index 185fa892c86a62f9d531a4e7d983ace5ff068185..abf9ab72d837b64a4ed04f7bfb194153bc21f090 100644 --- a/interface/web/admin/form/server_config.tform.php +++ b/interface/web/admin/form/server_config.tform.php @@ -734,6 +734,12 @@ $form["tabs"]['mail'] = array( 'default' => 'y', 'value' => array(0 => 'n', 1 => 'y') ), + 'mailbox_soft_delete' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'CHECKBOX', + 'default' => 'n', + 'value' => array(0 => 'n', 1 => 'y') + ), 'mailbox_quota_stats' => array ( 'datatype' => 'VARCHAR', 'formtype' => 'CHECKBOX', diff --git a/interface/web/admin/lib/lang/ar_server_config.lng b/interface/web/admin/lib/lang/ar_server_config.lng index 58e7833fd6ef457ecb796e7099df3dc8db778497..01b35d3e58d979e982bc3260a4b3d7484c3cd8d1 100644 --- a/interface/web/admin/lib/lang/ar_server_config.lng +++ b/interface/web/admin/lib/lang/ar_server_config.lng @@ -339,3 +339,5 @@ $wb['tooltip_jailkit_hardlinks_txt'] = 'Using hardlinks is insecure, but saves d $wb['jailkit_hardlinks_allow_txt'] = 'Allow hardlinks within the jail'; $wb['jailkit_hardlinks_no_txt'] = 'No, remove hardlinked files'; $wb['jailkit_hardlinks_yes_txt'] = 'Yes, use hardlinks if possible'; +$wb['mailbox_soft_delete_txt'] = 'Mailbox soft delete'; +$wb['mailbox_soft_delete_info_txt'] = 'by default cleaned up after 7 days.'; diff --git a/interface/web/admin/lib/lang/bg_server_config.lng b/interface/web/admin/lib/lang/bg_server_config.lng index 0d87a4daa0fbd6d6416e187a5501422d89d54035..485e17e9f8404c9c04b2dcaad5a90ca6ac7edb74 100644 --- a/interface/web/admin/lib/lang/bg_server_config.lng +++ b/interface/web/admin/lib/lang/bg_server_config.lng @@ -339,3 +339,5 @@ $wb['tooltip_jailkit_hardlinks_txt'] = 'Using hardlinks is insecure, but saves d $wb['jailkit_hardlinks_allow_txt'] = 'Allow hardlinks within the jail'; $wb['jailkit_hardlinks_no_txt'] = 'No, remove hardlinked files'; $wb['jailkit_hardlinks_yes_txt'] = 'Yes, use hardlinks if possible'; +$wb['mailbox_soft_delete_txt'] = 'Mailbox soft delete'; +$wb['mailbox_soft_delete_info_txt'] = 'by default cleaned up after 7 days.'; diff --git a/interface/web/admin/lib/lang/br_server_config.lng b/interface/web/admin/lib/lang/br_server_config.lng index e749dcc0235250e07f77b135dc19302b7cdd8554..66ad1e73b388a3feac9f15c61be30d5ec037312d 100644 --- a/interface/web/admin/lib/lang/br_server_config.lng +++ b/interface/web/admin/lib/lang/br_server_config.lng @@ -339,3 +339,5 @@ $wb['tooltip_jailkit_hardlinks_txt'] = 'Usar links físicos é inseguro, mas eco $wb['jailkit_hardlinks_allow_txt'] = 'Permitir links físicos enjaulados'; $wb['jailkit_hardlinks_no_txt'] = 'Não, remover arquivos de links físicos'; $wb['jailkit_hardlinks_yes_txt'] = 'Sim, usar links físicos quando possível'; +$wb['mailbox_soft_delete_txt'] = 'Mailbox soft delete'; +$wb['mailbox_soft_delete_info_txt'] = 'by default cleaned up after 7 days.'; diff --git a/interface/web/admin/lib/lang/ca_server_config.lng b/interface/web/admin/lib/lang/ca_server_config.lng index 50125cf334c1024a86b57e38c3c4adc38b5e39dd..bc1ee89883a7754a02d2a04dd7ffdb1976ccd21a 100644 --- a/interface/web/admin/lib/lang/ca_server_config.lng +++ b/interface/web/admin/lib/lang/ca_server_config.lng @@ -339,3 +339,5 @@ $wb['tooltip_jailkit_hardlinks_txt'] = 'Using hardlinks is insecure, but saves d $wb['jailkit_hardlinks_allow_txt'] = 'Allow hardlinks within the jail'; $wb['jailkit_hardlinks_no_txt'] = 'No, remove hardlinked files'; $wb['jailkit_hardlinks_yes_txt'] = 'Yes, use hardlinks if possible'; +$wb['mailbox_soft_delete_txt'] = 'Mailbox soft delete'; +$wb['mailbox_soft_delete_info_txt'] = 'by default cleaned up after 7 days.'; diff --git a/interface/web/admin/lib/lang/cz_server_config.lng b/interface/web/admin/lib/lang/cz_server_config.lng index 36d009dbcee76290d6fdd8ada60e252d2a0b0668..5ac09bff4f9d30b5cf7ee0977d7e365db49acc67 100644 --- a/interface/web/admin/lib/lang/cz_server_config.lng +++ b/interface/web/admin/lib/lang/cz_server_config.lng @@ -339,3 +339,5 @@ $wb['tooltip_jailkit_hardlinks_txt'] = 'Using hardlinks is insecure, but saves d $wb['jailkit_hardlinks_allow_txt'] = 'Allow hardlinks within the jail'; $wb['jailkit_hardlinks_no_txt'] = 'Ne, odstranit soubory s pevným odkazem'; $wb['jailkit_hardlinks_yes_txt'] = 'Ano, pokud je to možné, použijte pevné odkazy'; +$wb['mailbox_soft_delete_txt'] = 'Mailbox soft delete'; +$wb['mailbox_soft_delete_info_txt'] = 'by default cleaned up after 7 days.'; diff --git a/interface/web/admin/lib/lang/de_server_config.lng b/interface/web/admin/lib/lang/de_server_config.lng index 2536731433f5154af62ddcf3b4bb1246fd3f476c..9c8f1cb3dc77b6cc4f0d2bd64b073d3be70c1361 100644 --- a/interface/web/admin/lib/lang/de_server_config.lng +++ b/interface/web/admin/lib/lang/de_server_config.lng @@ -339,3 +339,5 @@ $wb['tooltip_jailkit_hardlinks_txt'] = 'Using hardlinks is insecure, but saves d $wb['jailkit_hardlinks_allow_txt'] = 'Allow hardlinks within the jail'; $wb['jailkit_hardlinks_no_txt'] = 'No, remove hardlinked files'; $wb['jailkit_hardlinks_yes_txt'] = 'Yes, use hardlinks if possible'; +$wb['mailbox_soft_delete_txt'] = 'Mailbox soft delete'; +$wb['mailbox_soft_delete_info_txt'] = 'by default cleaned up after 7 days.'; diff --git a/interface/web/admin/lib/lang/dk_server_config.lng b/interface/web/admin/lib/lang/dk_server_config.lng index e83fa0e09e6811556aa7a3c78093897b28523c1c..33863a1d764d45b3aebe7ca03a04348522239d3d 100644 --- a/interface/web/admin/lib/lang/dk_server_config.lng +++ b/interface/web/admin/lib/lang/dk_server_config.lng @@ -339,3 +339,5 @@ $wb['tooltip_jailkit_hardlinks_txt'] = 'Using hardlinks is insecure, but saves d $wb['jailkit_hardlinks_allow_txt'] = 'Allow hardlinks within the jail'; $wb['jailkit_hardlinks_no_txt'] = 'No, remove hardlinked files'; $wb['jailkit_hardlinks_yes_txt'] = 'Yes, use hardlinks if possible'; +$wb['mailbox_soft_delete_txt'] = 'Mailbox soft delete'; +$wb['mailbox_soft_delete_info_txt'] = 'by default cleaned up after 7 days.'; diff --git a/interface/web/admin/lib/lang/el_server_config.lng b/interface/web/admin/lib/lang/el_server_config.lng index c87c151f8cdfc05d65b237a0ae44a50e764bf325..db0eabd0d18103d6831a8aa0e71cc19aea91a61f 100644 --- a/interface/web/admin/lib/lang/el_server_config.lng +++ b/interface/web/admin/lib/lang/el_server_config.lng @@ -339,3 +339,5 @@ $wb['tooltip_jailkit_hardlinks_txt'] = 'Using hardlinks is insecure, but saves d $wb['jailkit_hardlinks_allow_txt'] = 'Allow hardlinks within the jail'; $wb['jailkit_hardlinks_no_txt'] = 'No, remove hardlinked files'; $wb['jailkit_hardlinks_yes_txt'] = 'Yes, use hardlinks if possible'; +$wb['mailbox_soft_delete_txt'] = 'Mailbox soft delete'; +$wb['mailbox_soft_delete_info_txt'] = 'by default cleaned up after 7 days.'; diff --git a/interface/web/admin/lib/lang/en_server_config.lng b/interface/web/admin/lib/lang/en_server_config.lng index 452f698fd7a53fdfc8d1d00d79d042b365f7b07b..b0c9ba3673a0895275d052794ae05d5b06ace2c8 100644 --- a/interface/web/admin/lib/lang/en_server_config.lng +++ b/interface/web/admin/lib/lang/en_server_config.lng @@ -345,3 +345,5 @@ $wb['tooltip_jailkit_hardlinks_txt'] = 'Using hardlinks is insecure, but saves d $wb['jailkit_hardlinks_allow_txt'] = 'Allow hardlinks within the jail'; $wb['jailkit_hardlinks_no_txt'] = 'No, remove hardlinked files'; $wb['jailkit_hardlinks_yes_txt'] = 'Yes, use hardlinks if possible'; +$wb['mailbox_soft_delete_txt'] = 'Mailbox soft delete'; +$wb['mailbox_soft_delete_info_txt'] = 'by default cleaned up after 7 days.'; diff --git a/interface/web/admin/lib/lang/es_server_config.lng b/interface/web/admin/lib/lang/es_server_config.lng index 83b03af94cf53b1462f47cb667d2d4324094e42e..2a48a99a72f0f84878ad9a8867ceada7595905e6 100644 --- a/interface/web/admin/lib/lang/es_server_config.lng +++ b/interface/web/admin/lib/lang/es_server_config.lng @@ -339,3 +339,5 @@ $wb['tooltip_jailkit_hardlinks_txt'] = 'Using hardlinks is insecure, but saves d $wb['jailkit_hardlinks_allow_txt'] = 'Allow hardlinks within the jail'; $wb['jailkit_hardlinks_no_txt'] = 'No, remove hardlinked files'; $wb['jailkit_hardlinks_yes_txt'] = 'Yes, use hardlinks if possible'; +$wb['mailbox_soft_delete_txt'] = 'Mailbox soft delete'; +$wb['mailbox_soft_delete_info_txt'] = 'by default cleaned up after 7 days.'; diff --git a/interface/web/admin/lib/lang/fi_server_config.lng b/interface/web/admin/lib/lang/fi_server_config.lng index 6bd628411b1145ef45f0d290a60cdd47b0ed89ed..f377aff00271ad5d54aed994e5418566a5e9f216 100644 --- a/interface/web/admin/lib/lang/fi_server_config.lng +++ b/interface/web/admin/lib/lang/fi_server_config.lng @@ -339,3 +339,5 @@ $wb['tooltip_jailkit_hardlinks_txt'] = 'Using hardlinks is insecure, but saves d $wb['jailkit_hardlinks_allow_txt'] = 'Allow hardlinks within the jail'; $wb['jailkit_hardlinks_no_txt'] = 'No, remove hardlinked files'; $wb['jailkit_hardlinks_yes_txt'] = 'Yes, use hardlinks if possible'; +$wb['mailbox_soft_delete_txt'] = 'Mailbox soft delete'; +$wb['mailbox_soft_delete_info_txt'] = 'by default cleaned up after 7 days.'; diff --git a/interface/web/admin/lib/lang/fr_server_config.lng b/interface/web/admin/lib/lang/fr_server_config.lng index 3d4bfb14cde4780f11b41292d891f5d23295118a..ebe43617bff1f785708a3f6c844ddd3aacbd272b 100644 --- a/interface/web/admin/lib/lang/fr_server_config.lng +++ b/interface/web/admin/lib/lang/fr_server_config.lng @@ -339,3 +339,5 @@ $wb['tooltip_jailkit_hardlinks_txt'] = 'Using hardlinks is insecure, but saves d $wb['jailkit_hardlinks_allow_txt'] = 'Allow hardlinks within the jail'; $wb['jailkit_hardlinks_no_txt'] = 'No, remove hardlinked files'; $wb['jailkit_hardlinks_yes_txt'] = 'Yes, use hardlinks if possible'; +$wb['mailbox_soft_delete_txt'] = 'Mailbox soft delete'; +$wb['mailbox_soft_delete_info_txt'] = 'by default cleaned up after 7 days.'; diff --git a/interface/web/admin/lib/lang/hr_server_config.lng b/interface/web/admin/lib/lang/hr_server_config.lng index 1f970f8638b0c7e545f5e93f6c6c5fab4e9e6f14..f20f29ed4525319f3e6a3d352027bbd1dab2637e 100644 --- a/interface/web/admin/lib/lang/hr_server_config.lng +++ b/interface/web/admin/lib/lang/hr_server_config.lng @@ -339,3 +339,5 @@ $wb['tooltip_jailkit_hardlinks_txt'] = 'Using hardlinks is insecure, but saves d $wb['jailkit_hardlinks_allow_txt'] = 'Allow hardlinks within the jail'; $wb['jailkit_hardlinks_no_txt'] = 'No, remove hardlinked files'; $wb['jailkit_hardlinks_yes_txt'] = 'Yes, use hardlinks if possible'; +$wb['mailbox_soft_delete_txt'] = 'Mailbox soft delete'; +$wb['mailbox_soft_delete_info_txt'] = 'by default cleaned up after 7 days.'; diff --git a/interface/web/admin/lib/lang/hu_server_config.lng b/interface/web/admin/lib/lang/hu_server_config.lng index 25d30c24515a24a0010ec852083a2b82e43299f7..ac1b485cf33b9ffad1febe658e87fbffa2e0926c 100644 --- a/interface/web/admin/lib/lang/hu_server_config.lng +++ b/interface/web/admin/lib/lang/hu_server_config.lng @@ -339,3 +339,5 @@ $wb['tooltip_jailkit_hardlinks_txt'] = 'Using hardlinks is insecure, but saves d $wb['jailkit_hardlinks_allow_txt'] = 'Allow hardlinks within the jail'; $wb['jailkit_hardlinks_no_txt'] = 'No, remove hardlinked files'; $wb['jailkit_hardlinks_yes_txt'] = 'Yes, use hardlinks if possible'; +$wb['mailbox_soft_delete_txt'] = 'Mailbox soft delete'; +$wb['mailbox_soft_delete_info_txt'] = 'by default cleaned up after 7 days.'; diff --git a/interface/web/admin/lib/lang/id_server_config.lng b/interface/web/admin/lib/lang/id_server_config.lng index f6a54151f30aa69629b02bcde54503f6fe93c263..ae645317479dd99414216a7906bf633f977dbb3a 100644 --- a/interface/web/admin/lib/lang/id_server_config.lng +++ b/interface/web/admin/lib/lang/id_server_config.lng @@ -339,3 +339,5 @@ $wb['tooltip_jailkit_hardlinks_txt'] = 'Using hardlinks is insecure, but saves d $wb['jailkit_hardlinks_allow_txt'] = 'Allow hardlinks within the jail'; $wb['jailkit_hardlinks_no_txt'] = 'No, remove hardlinked files'; $wb['jailkit_hardlinks_yes_txt'] = 'Yes, use hardlinks if possible'; +$wb['mailbox_soft_delete_txt'] = 'Mailbox soft delete'; +$wb['mailbox_soft_delete_info_txt'] = 'by default cleaned up after 7 days.'; diff --git a/interface/web/admin/lib/lang/it_server_config.lng b/interface/web/admin/lib/lang/it_server_config.lng index 7d67123662c722bfd20962d11914acf4cc48a581..c8fab9c188593a52da90495973abb8dc27eb3d31 100644 --- a/interface/web/admin/lib/lang/it_server_config.lng +++ b/interface/web/admin/lib/lang/it_server_config.lng @@ -338,3 +338,5 @@ $wb['tooltip_jailkit_hardlinks_txt'] = 'L\'uso di hardlinks è meno sicuro però $wb['jailkit_hardlinks_allow_txt'] = 'Consenti hardlinks all\'interno di jail'; $wb['jailkit_hardlinks_no_txt'] = 'No, rimuovi i file con hardlink'; $wb['jailkit_hardlinks_yes_txt'] = 'Si, usa hardlinks se possibile'; +$wb['mailbox_soft_delete_txt'] = 'Mailbox soft delete'; +$wb['mailbox_soft_delete_info_txt'] = 'by default cleaned up after 7 days.'; diff --git a/interface/web/admin/lib/lang/ja_server_config.lng b/interface/web/admin/lib/lang/ja_server_config.lng index a78f0900d81481bd6a55a9e5db99becaae380af1..4e9e216010c4dd46923e272a42a2d43f5f0b145c 100644 --- a/interface/web/admin/lib/lang/ja_server_config.lng +++ b/interface/web/admin/lib/lang/ja_server_config.lng @@ -339,3 +339,5 @@ $wb['tooltip_jailkit_hardlinks_txt'] = 'Using hardlinks is insecure, but saves d $wb['jailkit_hardlinks_allow_txt'] = 'Allow hardlinks within the jail'; $wb['jailkit_hardlinks_no_txt'] = 'No, remove hardlinked files'; $wb['jailkit_hardlinks_yes_txt'] = 'Yes, use hardlinks if possible'; +$wb['mailbox_soft_delete_txt'] = 'Mailbox soft delete'; +$wb['mailbox_soft_delete_info_txt'] = 'by default cleaned up after 7 days.'; diff --git a/interface/web/admin/lib/lang/nl_server_config.lng b/interface/web/admin/lib/lang/nl_server_config.lng index fc39a2a25683542b2a2b7504996775bacbb05ae4..e0ce415853d18a9dd12b688e828f71feca2280d9 100644 --- a/interface/web/admin/lib/lang/nl_server_config.lng +++ b/interface/web/admin/lib/lang/nl_server_config.lng @@ -339,3 +339,5 @@ $wb['tooltip_jailkit_hardlinks_txt'] = 'Using hardlinks is insecure, but saves d $wb['jailkit_hardlinks_allow_txt'] = 'Allow hardlinks within the jail'; $wb['jailkit_hardlinks_no_txt'] = 'No, remove hardlinked files'; $wb['jailkit_hardlinks_yes_txt'] = 'Yes, use hardlinks if possible'; +$wb['mailbox_soft_delete_txt'] = 'Mailbox soft delete'; +$wb['mailbox_soft_delete_info_txt'] = 'by default cleaned up after 7 days.'; diff --git a/interface/web/admin/lib/lang/pl_server_config.lng b/interface/web/admin/lib/lang/pl_server_config.lng index 4b838bd3ea3efbd9c9d247f0f2845cb3b83eff3a..f3d3b0235a75cef480b96d3797304f640f077ae7 100644 --- a/interface/web/admin/lib/lang/pl_server_config.lng +++ b/interface/web/admin/lib/lang/pl_server_config.lng @@ -339,3 +339,5 @@ $wb['tooltip_jailkit_hardlinks_txt'] = 'Using hardlinks is insecure, but saves d $wb['jailkit_hardlinks_allow_txt'] = 'Allow hardlinks within the jail'; $wb['jailkit_hardlinks_no_txt'] = 'No, remove hardlinked files'; $wb['jailkit_hardlinks_yes_txt'] = 'Yes, use hardlinks if possible'; +$wb['mailbox_soft_delete_txt'] = 'Mailbox soft delete'; +$wb['mailbox_soft_delete_info_txt'] = 'by default cleaned up after 7 days.'; diff --git a/interface/web/admin/lib/lang/pt_server_config.lng b/interface/web/admin/lib/lang/pt_server_config.lng index d42a415958513eeb320e5cc77a8fcd4871e06f58..e6fd1d4540944ab860a458af11d0bb26e79a2665 100644 --- a/interface/web/admin/lib/lang/pt_server_config.lng +++ b/interface/web/admin/lib/lang/pt_server_config.lng @@ -339,3 +339,5 @@ $wb['tooltip_jailkit_hardlinks_txt'] = 'Using hardlinks is insecure, but saves d $wb['jailkit_hardlinks_allow_txt'] = 'Allow hardlinks within the jail'; $wb['jailkit_hardlinks_no_txt'] = 'No, remove hardlinked files'; $wb['jailkit_hardlinks_yes_txt'] = 'Yes, use hardlinks if possible'; +$wb['mailbox_soft_delete_txt'] = 'Mailbox soft delete'; +$wb['mailbox_soft_delete_info_txt'] = 'by default cleaned up after 7 days.'; diff --git a/interface/web/admin/lib/lang/ro_server_config.lng b/interface/web/admin/lib/lang/ro_server_config.lng index 81488177c015041ca0bca2488f99e4c98973c5ad..17322c189733da0846ce9e2ecbafdf05ebeafbdf 100644 --- a/interface/web/admin/lib/lang/ro_server_config.lng +++ b/interface/web/admin/lib/lang/ro_server_config.lng @@ -339,3 +339,5 @@ $wb['tooltip_jailkit_hardlinks_txt'] = 'Using hardlinks is insecure, but saves d $wb['jailkit_hardlinks_allow_txt'] = 'Allow hardlinks within the jail'; $wb['jailkit_hardlinks_no_txt'] = 'No, remove hardlinked files'; $wb['jailkit_hardlinks_yes_txt'] = 'Yes, use hardlinks if possible'; +$wb['mailbox_soft_delete_txt'] = 'Mailbox soft delete'; +$wb['mailbox_soft_delete_info_txt'] = 'by default cleaned up after 7 days.'; diff --git a/interface/web/admin/lib/lang/ru_server_config.lng b/interface/web/admin/lib/lang/ru_server_config.lng index bce96e9339a72100c11e5c6c13fcd04a18c4fd2e..e971ac94ec3f4f2fe0d6cb5a2e0a48566c30c010 100644 --- a/interface/web/admin/lib/lang/ru_server_config.lng +++ b/interface/web/admin/lib/lang/ru_server_config.lng @@ -339,3 +339,5 @@ $wb['tooltip_jailkit_hardlinks_txt'] = 'Using hardlinks is insecure, but saves d $wb['jailkit_hardlinks_allow_txt'] = 'Allow hardlinks within the jail'; $wb['jailkit_hardlinks_no_txt'] = 'No, remove hardlinked files'; $wb['jailkit_hardlinks_yes_txt'] = 'Yes, use hardlinks if possible'; +$wb['mailbox_soft_delete_txt'] = 'Mailbox soft delete'; +$wb['mailbox_soft_delete_info_txt'] = 'by default cleaned up after 7 days.'; diff --git a/interface/web/admin/lib/lang/se_server_config.lng b/interface/web/admin/lib/lang/se_server_config.lng index 4f8d24411785d3b608c600a4e8e6995eba60cd6a..9e52893f41531408d511331fbab77a2bbdc1d4ea 100644 --- a/interface/web/admin/lib/lang/se_server_config.lng +++ b/interface/web/admin/lib/lang/se_server_config.lng @@ -339,3 +339,5 @@ $wb['tooltip_jailkit_hardlinks_txt'] = 'Using hardlinks is insecure, but saves d $wb['jailkit_hardlinks_allow_txt'] = 'Allow hardlinks within the jail'; $wb['jailkit_hardlinks_no_txt'] = 'No, remove hardlinked files'; $wb['jailkit_hardlinks_yes_txt'] = 'Yes, use hardlinks if possible'; +$wb['mailbox_soft_delete_txt'] = 'Mailbox soft delete'; +$wb['mailbox_soft_delete_info_txt'] = 'by default cleaned up after 7 days.'; diff --git a/interface/web/admin/lib/lang/sk_server_config.lng b/interface/web/admin/lib/lang/sk_server_config.lng index b13462584ea441f8bc34d002070a4ed00b749346..dbe11188af74189abda5741f235bdb5f0572a11b 100644 --- a/interface/web/admin/lib/lang/sk_server_config.lng +++ b/interface/web/admin/lib/lang/sk_server_config.lng @@ -339,3 +339,5 @@ $wb['tooltip_jailkit_hardlinks_txt'] = 'Using hardlinks is insecure, but saves d $wb['jailkit_hardlinks_allow_txt'] = 'Allow hardlinks within the jail'; $wb['jailkit_hardlinks_no_txt'] = 'No, remove hardlinked files'; $wb['jailkit_hardlinks_yes_txt'] = 'Yes, use hardlinks if possible'; +$wb['mailbox_soft_delete_txt'] = 'Mailbox soft delete'; +$wb['mailbox_soft_delete_info_txt'] = 'by default cleaned up after 7 days.'; diff --git a/interface/web/admin/lib/lang/tr_server_config.lng b/interface/web/admin/lib/lang/tr_server_config.lng index e15677aa3d5ac8d274f1a4fbd4202deddc4dca64..1f0cf1383f836adb86b70a100a92ce5bd69b740f 100644 --- a/interface/web/admin/lib/lang/tr_server_config.lng +++ b/interface/web/admin/lib/lang/tr_server_config.lng @@ -336,3 +336,5 @@ $wb['tooltip_jailkit_hardlinks_txt'] = 'Using hardlinks is insecure, but saves d $wb['jailkit_hardlinks_allow_txt'] = 'Allow hardlinks within the jail'; $wb['jailkit_hardlinks_no_txt'] = 'No, remove hardlinked files'; $wb['jailkit_hardlinks_yes_txt'] = 'Yes, use hardlinks if possible'; +$wb['mailbox_soft_delete_txt'] = 'Mailbox soft delete'; +$wb['mailbox_soft_delete_info_txt'] = 'by default cleaned up after 7 days.'; diff --git a/interface/web/admin/templates/server_config_mail_edit.htm b/interface/web/admin/templates/server_config_mail_edit.htm index d23a23a59cd998984660055106df4d92327bdb56..53ef330cc639cd754c086cb1b59314aa3a687f9d 100644 --- a/interface/web/admin/templates/server_config_mail_edit.htm +++ b/interface/web/admin/templates/server_config_mail_edit.htm @@ -140,6 +140,12 @@ {tmpl_var name="stress_adaptive"} +
+ +
+ {tmpl_var name='mailbox_soft_delete'} {tmpl_var name='mailbox_soft_delete_info_txt'} +
+
diff --git a/server/plugins-available/mail_plugin.inc.php b/server/plugins-available/mail_plugin.inc.php index 2baf07ec7dd07ad69f7203b77924bb166cf1f8f9..53836a1392f50d4dda9268f83f464fa6ec78d149 100644 --- a/server/plugins-available/mail_plugin.inc.php +++ b/server/plugins-available/mail_plugin.inc.php @@ -429,8 +429,19 @@ class mail_plugin { $maildir_path_deleted = false; $old_maildir_path = $data['old']['maildir']; if($old_maildir_path != $mail_config['homedir_path'] && strlen($old_maildir_path) > strlen($mail_config['homedir_path']) && !stristr($old_maildir_path, '//') && !stristr($old_maildir_path, '..') && !stristr($old_maildir_path, '*') && strlen($old_maildir_path) >= 10) { - $app->system->exec_safe('rm -rf ?', $old_maildir_path); - $app->log('Deleted the Maildir: '.$data['old']['maildir'], LOGLEVEL_DEBUG); + if ($mail_config['mailbox_soft_delete'] == 'y') { + // Move it, adding a date based suffix. A cronjob should purge or archive. + $thrash_maildir_path = $old_maildir_path . '-deleted-' . date("YmdHis"); + $app->system->exec_safe('mv ? ?', $old_maildir_path, $thrash_maildir_path); + + // Update the dir's timestamp to make filtering on age easier in any cleanup cronjob. + $app->system->exec_safe('touch ?', $thrash_maildir_path); + + $app->log('Renamed the Maildir: ' . $data['old']['maildir'] . ' to ' . $thrash_maildir_path, LOGLEVEL_DEBUG); + } else { + $app->system->exec_safe('rm -rf ?', $old_maildir_path); + $app->log('Deleted the Maildir: '.$data['old']['maildir'], LOGLEVEL_DEBUG); + } $maildir_path_deleted = true; } else { $app->log('Possible security violation when deleting the maildir: '.$data['old']['maildir'], LOGLEVEL_ERROR); @@ -473,8 +484,19 @@ class mail_plugin { //* Delete maildomain path $old_maildomain_path = $mail_config['homedir_path'].'/'.$data['old']['domain']; if($old_maildomain_path != $mail_config['homedir_path'] && !stristr($old_maildomain_path, '//') && !stristr($old_maildomain_path, '..') && !stristr($old_maildomain_path, '*') && !stristr($old_maildomain_path, '&') && strlen($old_maildomain_path) >= 10 && !empty($data['old']['domain'])) { - $app->system->exec_safe('rm -rf ?', $old_maildomain_path); - $app->log('Deleted the mail domain directory: '.$old_maildomain_path, LOGLEVEL_DEBUG); + if ($mail_config['mailbox_soft_delete'] == 'y') { + // Move it, adding a date based suffix. A cronjob should purge or archive. + $thrash_maildomain_path = $old_maildomain_path . '-deleted-' . date("YmdHis"); + $app->system->exec_safe('mv ? ?', $old_maildomain_path, $thrash_maildomain_path); + + // Update the dir's timestamp to make filtering on age easier in any cleanup cronjob. + $app->system->exec_safe('touch ?', $thrash_maildomain_path); + + $app->log('Renamed the mail domain directory: ' . $old_maildomain_path . ' to ' . $thrash_maildomain_path, LOGLEVEL_DEBUG); + } else { + $app->system->exec_safe('rm -rf ?', $old_maildomain_path); + $app->log('Deleted the mail domain directory: '.$old_maildomain_path, LOGLEVEL_DEBUG); + } $maildomain_path_deleted = true; } else { $app->log('Possible security violation when deleting the mail domain directory: '.$old_maildomain_path, LOGLEVEL_ERROR); diff --git a/server/scripts/handle_mailbox_soft_deleted.sh b/server/scripts/handle_mailbox_soft_deleted.sh new file mode 100644 index 0000000000000000000000000000000000000000..7c7f280839d31233adabfd39832ed089e5fc66d3 --- /dev/null +++ b/server/scripts/handle_mailbox_soft_deleted.sh @@ -0,0 +1,49 @@ +#!/bin/bash + +# Archive directories for deleted mailboxes. +delay_days=7 + +# Test if there is something to do... to avoid 'No such file or directory' from find later. +ls /var/vmail/*/[a-z0-9.-]*-deleted-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] >/dev/null 2>&1 +if [ $? != 0 ]; then + exit 0; +fi + +function remove_soft_deleted_mailbox { + dir=$1 + + echo "Purging $dir" + rm -r "$dir" +} + +function compress_soft_deleted_mailbox { + dir=$1 + + backupfile="${dir}.tar.bz2" + + # Test if backup file already exists + if [ -f $backupfile ]; then + # Skip + echo "ERROR: Backupfile($backupfile) exists!" >&2 + continue + fi + + echo "Compressing for $dir" + tar cvfj "$backupfile" --remove-files "$dir" 2> >( grep -v "tar: Removing leading" >&2) +} + +# List deleted mailboxs to archive +# -mtime +7 ===> Only mailboxes deleted more then 7 days ago +# Test that the last dir component matches e.g. xxx-deleted-20220101094242 (14 digits) +# command: xxx-`date "+%Y%m%d%H%M%S"` +find /var/vmail/*/[a-z0-9.-]*-deleted-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] -maxdepth 0 -type d -mtime +$delay_days | while read line; do + # example $line: "/var/vmail/example.com/info-20220101094242" + + dir=$line + + # Uncomment the desired cleanup method below, or be creative and create your own. + + remove_soft_deleted_mailbox $dir + #compress_soft_deleted_mailbox $dir + +done