diff --git a/data/Dockerfiles/dovecot/imapsync_runner.pl b/data/Dockerfiles/dovecot/imapsync_runner.pl index 5b297abd..f13f9abd 100644 --- a/data/Dockerfiles/dovecot/imapsync_runner.pl +++ b/data/Dockerfiles/dovecot/imapsync_runner.pl @@ -75,7 +75,8 @@ my $sth = $dbh->prepare("SELECT id, custom_params, subscribeall, timeout1, - timeout2 + timeout2, + dry FROM imapsync WHERE active = 1 AND is_running = 0 @@ -111,6 +112,7 @@ while ($row = $sth->fetchrow_arrayref()) { $subscribeall = @$row[18]; $timeout1 = @$row[19]; $timeout2 = @$row[20]; + $dry = @$row[21]; if ($enc1 eq "TLS") { $enc1 = "--tls1"; } elsif ($enc1 eq "SSL") { $enc1 = "--ssl1"; } else { undef $enc1; } @@ -148,6 +150,7 @@ while ($row = $sth->fetchrow_arrayref()) { "--host2", "localhost", "--user2", $user2 . '*' . trim($master_user), "--passfile2", $passfile2->filename, + ($dry eq "1" ? ('--dry') : ()), '--no-modulesversion', '--noreleasecheck']; diff --git a/data/web/inc/functions.mailbox.inc.php b/data/web/inc/functions.mailbox.inc.php index 68cb50f1..298f607d 100644 --- a/data/web/inc/functions.mailbox.inc.php +++ b/data/web/inc/functions.mailbox.inc.php @@ -325,6 +325,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) { $timeout2 = intval($_data['timeout2']); $skipcrossduplicates = intval($_data['skipcrossduplicates']); $automap = intval($_data['automap']); + $dry = intval($_data['dry']); $port1 = $_data['port1']; $host1 = strtolower($_data['host1']); $password1 = $_data['password1']; @@ -435,8 +436,8 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) { ); return false; } - $stmt = $pdo->prepare("INSERT INTO `imapsync` (`user2`, `exclude`, `delete1`, `delete2`, `timeout1`, `timeout2`, `automap`, `skipcrossduplicates`, `maxbytespersecond`, `subscribeall`, `maxage`, `subfolder2`, `host1`, `authmech1`, `user1`, `password1`, `mins_interval`, `port1`, `enc1`, `delete2duplicates`, `custom_params`, `active`) - VALUES (:user2, :exclude, :delete1, :delete2, :timeout1, :timeout2, :automap, :skipcrossduplicates, :maxbytespersecond, :subscribeall, :maxage, :subfolder2, :host1, :authmech1, :user1, :password1, :mins_interval, :port1, :enc1, :delete2duplicates, :custom_params, :active)"); + $stmt = $pdo->prepare("INSERT INTO `imapsync` (`user2`, `exclude`, `delete1`, `delete2`, `timeout1`, `timeout2`, `automap`, `skipcrossduplicates`, `maxbytespersecond`, `subscribeall`, `dry`, `maxage`, `subfolder2`, `host1`, `authmech1`, `user1`, `password1`, `mins_interval`, `port1`, `enc1`, `delete2duplicates`, `custom_params`, `active`) + VALUES (:user2, :exclude, :delete1, :delete2, :timeout1, :timeout2, :automap, :skipcrossduplicates, :maxbytespersecond, :subscribeall, :dry, :maxage, :subfolder2, :host1, :authmech1, :user1, :password1, :mins_interval, :port1, :enc1, :delete2duplicates, :custom_params, :active)"); $stmt->execute(array( ':user2' => $username, ':custom_params' => $custom_params, @@ -450,6 +451,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) { ':skipcrossduplicates' => $skipcrossduplicates, ':maxbytespersecond' => $maxbytespersecond, ':subscribeall' => $subscribeall, + ':dry' => $dry, ':subfolder2' => $subfolder2, ':host1' => $host1, ':authmech1' => 'PLAIN', @@ -2031,6 +2033,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) { $success = (isset($_data['success'])) ? NULL : $is_now['success']; $delete2duplicates = (isset($_data['delete2duplicates'])) ? intval($_data['delete2duplicates']) : $is_now['delete2duplicates']; $subscribeall = (isset($_data['subscribeall'])) ? intval($_data['subscribeall']) : $is_now['subscribeall']; + $dry = (isset($_data['dry'])) ? intval($_data['dry']) : $is_now['dry']; $delete1 = (isset($_data['delete1'])) ? intval($_data['delete1']) : $is_now['delete1']; $delete2 = (isset($_data['delete2'])) ? intval($_data['delete2']) : $is_now['delete2']; $automap = (isset($_data['automap'])) ? intval($_data['automap']) : $is_now['automap']; @@ -2164,6 +2167,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) { `timeout1` = :timeout1, `timeout2` = :timeout2, `subscribeall` = :subscribeall, + `dry` = :dry, `active` = :active WHERE `id` = :id"); $stmt->execute(array( @@ -2189,6 +2193,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) { ':timeout1' => $timeout1, ':timeout2' => $timeout2, ':subscribeall' => $subscribeall, + ':dry' => $dry, ':active' => $active, )); $_SESSION['return'][] = array( diff --git a/data/web/inc/init_db.inc.php b/data/web/inc/init_db.inc.php index e286ab55..2ce6a28c 100644 --- a/data/web/inc/init_db.inc.php +++ b/data/web/inc/init_db.inc.php @@ -3,7 +3,7 @@ function init_db_schema() { try { global $pdo; - $db_version = "14022023_1000"; + $db_version = "15112023_1536"; $stmt = $pdo->query("SHOW TABLES LIKE 'versions'"); $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC)); @@ -704,6 +704,7 @@ function init_db_schema() { "timeout1" => "SMALLINT NOT NULL DEFAULT '600'", "timeout2" => "SMALLINT NOT NULL DEFAULT '600'", "subscribeall" => "TINYINT(1) NOT NULL DEFAULT '1'", + "dry" => "TINYINT(1) NOT NULL DEFAULT '0'", "is_running" => "TINYINT(1) NOT NULL DEFAULT '0'", "returned_text" => "LONGTEXT", "last_run" => "TIMESTAMP NULL DEFAULT NULL", diff --git a/data/web/inc/vars.inc.php b/data/web/inc/vars.inc.php index 392b0d49..5578dfd3 100644 --- a/data/web/inc/vars.inc.php +++ b/data/web/inc/vars.inc.php @@ -236,118 +236,120 @@ $RSPAMD_MAPS = array( $IMAPSYNC_OPTIONS = array( 'whitelist' => array( + 'abort', + 'authmd51', + 'authmd52', 'authmech1', 'authmech2', 'authuser1', 'authuser2', - 'debugcontent', - 'disarmreadreceipts', - 'logdir', - 'debugcrossduplicates', - 'maxsize', - 'minsize', - 'minage', - 'search', - 'noabletosearch', - 'pidfile', - 'pidfilelocking', - 'search1', - 'search2', - 'sslargs1', - 'sslargs2', - 'syncduplicates', - 'usecache', - 'synclabels', - 'truncmess', - 'domino2', - 'expunge1', - 'filterbuggyflags', - 'justconnect', - 'justfolders', - 'maxlinelength', - 'useheader', - 'noabletosearch1', - 'nolog', - 'prefix1', - 'prefix2', - 'sep1', - 'sep2', - 'nofoldersizesatend', - 'justfoldersizes', - 'proxyauth1', - 'skipemptyfolders', - 'include', - 'subfolder1', - 'subscribed', - 'subscribe', 'debug', + 'debugcontent', + 'debugcrossduplicates', + 'debugflags', + 'debugfolders', + 'debugimap', + 'debugimap1', 'debugimap2', + 'debugmemory', + 'debugssl', + 'delete1emptyfolders', + 'delete2folders', + 'disarmreadreceipts', + 'domain1', + 'domain2', 'domino1', + 'domino2', + 'dry', + 'errorsmax', 'exchange1', 'exchange2', + 'exitwhenover', + 'expunge1', + 'f1f2', + 'filterbuggyflags', + 'folder', + 'folderfirst', + 'folderlast', + 'folderrec', + 'gmail1', + 'gmail2', + 'idatefromheader', + 'include', + 'inet4', + 'inet6', + 'justconnect', + 'justfolders', + 'justfoldersizes', 'justlogin', 'keepalive1', 'keepalive2', + 'log', + 'logdir', + 'logfile', + 'maxbytesafter', + 'maxlinelength', + 'maxmessagespersecond', + 'maxsize', + 'maxsleep', + 'minage', + 'minsize', + 'noabletosearch', + 'noabletosearch1', 'noabletosearch2', + 'noexpunge1', 'noexpunge2', + 'nofoldersizesatend', + 'noid', + 'nolog', + 'nomixfolders', 'noresyncflags', 'nossl1', - 'nouidexpunge2', - 'syncinternaldates', - 'idatefromheader', - 'useuid', - 'debugflags', - 'debugimap', - 'delete1emptyfolders', - 'delete2folders', - 'gmail2', - 'office1', - 'testslive6', - 'debugimap1', - 'errorsmax', - 'tests', - 'gmail1', - 'maxmessagespersecond', - 'maxbytesafter', - 'maxsleep', - 'abort', - 'resyncflags', - 'resynclabels', - 'syncacls', + 'nossl2', 'nosyncacls', + 'notls1', + 'notls2', + 'nouidexpunge2', 'nousecache', - 'office2', - 'testslive', - 'debugmemory', - 'exitwhenover', - 'noid', - 'noexpunge1', - 'authmd51', - 'logfile', - 'proxyauth2', - 'domain1', - 'domain2', 'oauthaccesstoken1', 'oauthaccesstoken2', 'oauthdirect1', 'oauthdirect2', - 'folder', - 'folderrec', - 'folderfirst', - 'folderlast', - 'nomixfolders', - 'authmd52', - 'debugfolders', - 'nossl2', + 'office1', + 'office2', + 'pidfile', + 'pidfilelocking', + 'prefix1', + 'prefix2', + 'proxyauth1', + 'proxyauth2', + 'resyncflags', + 'resynclabels', + 'search', + 'search1', + 'search2', + 'sep1', + 'sep2', + 'showpasswords', + 'skipemptyfolders', 'ssl2', + 'sslargs1', + 'sslargs2', + 'subfolder1', + 'subscribe', + 'subscribed', + 'syncacls', + 'syncduplicates', + 'syncinternaldates', + 'synclabels', + 'tests', + 'testslive', + 'testslive6', 'tls2', - 'notls2', - 'debugssl', - 'notls1', - 'inet4', - 'inet6', - 'log', - 'showpasswords' + 'truncmess', + 'usecache', + 'useheader', + 'useuid' ), 'blacklist' => array( 'skipmess', diff --git a/data/web/lang/lang.de-de.json b/data/web/lang/lang.de-de.json index 5d051615..75c66af6 100644 --- a/data/web/lang/lang.de-de.json +++ b/data/web/lang/lang.de-de.json @@ -58,6 +58,7 @@ "domain": "Domain", "domain_matches_hostname": "Domain %s darf nicht dem Hostnamen entsprechen", "domain_quota_m": "Domain-Speicherplatz gesamt (MiB)", + "dry": "Synchronisation simulieren", "enc_method": "Verschlüsselung", "exclude": "Elemente ausschließen (Regex)", "full_name": "Vor- und Nachname", diff --git a/data/web/lang/lang.en-gb.json b/data/web/lang/lang.en-gb.json index 36eb4ab4..da97bebd 100644 --- a/data/web/lang/lang.en-gb.json +++ b/data/web/lang/lang.en-gb.json @@ -58,6 +58,7 @@ "domain": "Domain", "domain_matches_hostname": "Domain %s matches hostname", "domain_quota_m": "Total domain quota (MiB)", + "dry": "Simulate synchronization", "enc_method": "Encryption method", "exclude": "Exclude objects (regex)", "full_name": "Full name", diff --git a/data/web/templates/edit/syncjob.twig b/data/web/templates/edit/syncjob.twig index 6f6cdeda..80100984 100644 --- a/data/web/templates/edit/syncjob.twig +++ b/data/web/templates/edit/syncjob.twig @@ -11,6 +11,7 @@ +