Skip to content

Commit 5f2405d

Browse files
author
Marius Burkard
committed
Merge branch '5543-changing-tag-method-in-policy-is-not-applied-to-spamfilter-users' into 'develop'
Resolve "Changing tag method in policy is not applied to spamfilter users" Closes #5543 See merge request ispconfig/ispconfig3!1438
2 parents 3ba74fd + 1deb325 commit 5f2405d

File tree

2 files changed

+40
-4
lines changed

2 files changed

+40
-4
lines changed

interface/web/mail/mail_domain_edit.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -446,7 +446,7 @@ function onAfterUpdate() {
446446
//* Update the mailboxes
447447
$mailusers = $app->db->queryAllRecords("SELECT * FROM mail_user WHERE email like ?", '%@' . $this->oldDataRecord['domain']);
448448
$sys_groupid = $app->functions->intval((isset($this->dataRecord['client_group_id']))?$this->dataRecord['client_group_id']:$this->oldDataRecord['sys_groupid']);
449-
$tmp = $app->db->queryOneRecord("SELECT userid FROM sys_user WHERE default_group = ?", $client_group_id);
449+
$tmp = $app->db->queryOneRecord("SELECT userid FROM sys_user WHERE default_group = ?", $sys_groupid);
450450
$client_user_id = $app->functions->intval(($tmp['userid'] > 0)?$tmp['userid']:1);
451451
if(is_array($mailusers)) {
452452
foreach($mailusers as $rec) {

server/plugins-available/rspamd_plugin.inc.php

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ function onLoad() {
139139
$app->plugins->registerEvent('mail_forwarding_delete', $this->plugin_name, 'user_settings_update');
140140
}
141141

142-
function user_settings_update($event_name, $data) {
142+
function user_settings_update($event_name, $data, $internal = false) {
143143
global $app, $conf;
144144

145145
if(!is_dir('/etc/rspamd')) {
@@ -206,6 +206,23 @@ function user_settings_update($event_name, $data) {
206206
return;
207207
}
208208

209+
$entries_to_update = [
210+
'mail_user' => [],
211+
'mail_forwarding' => []
212+
];
213+
if($is_domain === true) {
214+
// get all child records to update / delete
215+
$mailusers = $app->db->queryAllRecords("SELECT mu.* FROM mail_user as mu LEFT JOIN spamfilter_users as su ON (su.email = mu.email) WHERE mu.email LIKE ? AND su.id IS NULL", '%' . $email_address);
216+
if(is_array($mailusers) && !empty($mailusers)) {
217+
$entries_to_update['mail_user'] = $mailusers;
218+
}
219+
220+
$forwardings = $app->db->queryAllRecords("SELECT mf.* FROM mail_forwarding as mf LEFT JOIN spamfilter_users as su ON (su.email = mf.source) WHERE mf.source LIKE ? AND su.id IS NULL", '%' . $email_address);
221+
if(is_array($forwardings) && !empty($forwardings)) {
222+
$entries_to_update['mail_forwarding'] = $forwardings;
223+
}
224+
}
225+
209226
$old_settings_name = $settings_name;
210227
$settings_name = $app->functions->idn_encode($settings_name);
211228

@@ -220,7 +237,17 @@ function user_settings_update($event_name, $data) {
220237
$settings_file = $this->users_config_dir . str_replace('@', '_', $settings_name) . '.conf';
221238
//$app->log('Settings file for rspamd is ' . $settings_file, LOGLEVEL_WARN);
222239
if($mode === 'delete') {
223-
if(is_file($settings_file)) {
240+
$delete_file = true;
241+
if($type === 'spamfilter_user') {
242+
$search_for_policy[] = $email_address;
243+
$search_for_policy[] = substr($email_address, strpos($email_address, '@'));
244+
245+
$policy = $app->db->queryOneRecord("SELECT p.* FROM spamfilter_users as u INNER JOIN spamfilter_policy as p ON (p.id = u.policy_id) WHERE u.server_id = ? AND u.email IN ? ORDER BY u.priority DESC", $conf['server_id'], $search_for_policy);
246+
if($policy) {
247+
$delete_file = false;
248+
}
249+
}
250+
if($delete_file === true && is_file($settings_file)) {
224251
unlink($settings_file);
225252
}
226253
} else {
@@ -318,7 +345,16 @@ function user_settings_update($event_name, $data) {
318345
}
319346
}
320347

321-
if($mail_config['content_filter'] == 'rspamd'){
348+
if($is_domain === true) {
349+
foreach($entries_to_update['mail_user'] as $entry) {
350+
$this->user_settings_update('mail_user_' . $mode, ['old' => $entry, 'new' => $entry], true);
351+
}
352+
foreach($entries_to_update['mail_forwarding'] as $entry) {
353+
$this->user_settings_update('mail_forwarding_' . $mode, ['old' => $entry, 'new' => $entry], true);
354+
}
355+
}
356+
357+
if($internal !== true && $mail_config['content_filter'] == 'rspamd'){
322358
$app->services->restartServiceDelayed('rspamd', 'reload');
323359
}
324360
}

0 commit comments

Comments
 (0)