public
nobgit
read
NobMail
Based on mailcow: dockerized
Languages
Repository composition by tracked source files.
PHP
49%
JavaScript
35%
HTML
9%
CSS
4%
Shell
2%
Python
1%
Lua
0%
Perl
0%
Ruby
0%
SCSS
0%
Create file
Wiki Documentation
Clone
https://nobgit.com/orgs/nobgit/nobmail.git
ssh://[email protected]:2222/orgs/nobgit/nobmail.git
Commit
readd imapsync fix
bee76273
data/web/inc/functions.mailbox.inc.php | 4 +-
data/web/inc/init_db.inc.php | 16 ++-
data/web/inc/vars.inc.php | 244 ++++++++++++++++-----------------
3 files changed, 134 insertions(+), 130 deletions(-)
Diff
diff --git a/data/web/inc/functions.mailbox.inc.php b/data/web/inc/functions.mailbox.inc.php
index 788b207f..3b8531bd 100644
--- a/data/web/inc/functions.mailbox.inc.php
+++ b/data/web/inc/functions.mailbox.inc.php
@@ -341,7 +341,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
foreach (explode(' -', $custom_params) as $param){
if(empty($param)) continue;
- if (str_contains($param, ' ')) {
+ if (str_contains(explode('=', $param)[0], ' ')) {
// bad char
$_SESSION['return'][] = array(
'type' => 'danger',
@@ -1796,7 +1796,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
foreach (explode(' -', $custom_params) as $param){
if(empty($param)) continue;
- if (str_contains($param, ' ')) {
+ if (str_contains(explode('=', $param)[0], ' ')) {
// bad char
$_SESSION['return'][] = array(
'type' => 'danger',
diff --git a/data/web/inc/init_db.inc.php b/data/web/inc/init_db.inc.php
index e7d13379..c80c398b 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 = "04072022_1642";
+ $db_version = "13072022_1700";
$stmt = $pdo->query("SHOW TABLES LIKE 'versions'");
$num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
@@ -440,7 +440,7 @@ function init_db_schema() {
"spam_score" => "TINYINT(1) NOT NULL DEFAULT '1'",
"spam_policy" => "TINYINT(1) NOT NULL DEFAULT '1'",
"delimiter_action" => "TINYINT(1) NOT NULL DEFAULT '1'",
- "syncjobs" => "TINYINT(1) NOT NULL DEFAULT '1'",
+ "syncjobs" => "TINYINT(1) NOT NULL DEFAULT '0'",
"eas_reset" => "TINYINT(1) NOT NULL DEFAULT '1'",
"sogo_profile_reset" => "TINYINT(1) NOT NULL DEFAULT '0'",
"pushover" => "TINYINT(1) NOT NULL DEFAULT '1'",
@@ -1227,8 +1227,16 @@ function init_db_schema() {
$pdo->query($create);
}
- // Mitigate imapsync pipemess issue
- $pdo->query("UPDATE `imapsync` SET `custom_params` = '' WHERE `custom_params` LIKE '%pipemess%';");
+ // Mitigate imapsync argument injection issue
+ $pdo->query("UPDATE `imapsync` SET `custom_params` = ''
+ WHERE `custom_params` LIKE '%pipemess%'
+ OR custom_params LIKE '%skipmess%'
+ OR custom_params LIKE '%delete2foldersonly%'
+ OR custom_params LIKE '%delete2foldersbutnot%'
+ OR custom_params LIKE '%regexflag%'
+ OR custom_params LIKE '%pipemess%'
+ OR custom_params LIKE '%regextrans2%'
+ OR custom_params LIKE '%maxlinelengthcmd%';");
// Migrate webauthn tfa
$stmt = $pdo->query("ALTER TABLE `tfa` MODIFY COLUMN `authmech` ENUM('yubi_otp', 'u2f', 'hotp', 'totp', 'webauthn')");
diff --git a/data/web/inc/vars.inc.php b/data/web/inc/vars.inc.php
index 6e08be13..02366c75 100644
--- a/data/web/inc/vars.inc.php
+++ b/data/web/inc/vars.inc.php
@@ -232,131 +232,127 @@ $RSPAMD_MAPS = array(
$IMAPSYNC_OPTIONS = array(
'whitelist' => array(
- 'log',
- 'showpasswords',
- 'nossl1',
- 'nossl2',
- 'ssl2',
- 'notls1',
- 'notls2',
- 'tls2',
- 'debugssl',
- 'sslargs1',
- 'sslargs2',
- 'authmech1',
- 'authmech2',
- 'authuser1',
- 'authuser2',
- 'proxyauth1',
- 'proxyauth2',
- 'authmd51',
- 'authmd52',
- 'domain1',
- 'domain2',
- 'oauthaccesstoken1',
- 'oauthaccesstoken2',
- 'oauthdirect1',
- 'oauthdirect2',
- 'folder',
- 'folder',
- 'folderrec',
- 'folderrec',
- 'folderfirst',
- 'folderfirst',
- 'folderlast',
- 'folderlast',
- 'nomixfolders',
- 'skipemptyfolders',
- 'include',
- 'include',
- 'subfolder1',
- 'subscribed',
- 'subscribe',
- 'prefix1',
- 'prefix2',
- 'sep1',
- 'sep2',
- 'nofoldersizesatend',
- 'justfoldersizes',
- 'pidfile',
- 'pidfilelocking',
- 'nolog',
- 'logfile',
- 'logdir',
- 'debugcrossduplicates',
- 'disarmreadreceipts',
- 'truncmess',
- 'synclabels',
- 'resynclabels',
- 'resyncflags',
- 'noresyncflags',
- 'filterbuggyflags',
- 'expunge1',
- 'noexpunge1',
- 'delete1emptyfolders',
- 'delete2folders',
- 'noexpunge2',
- 'nouidexpunge2',
- 'syncinternaldates',
- 'idatefromheader',
- 'maxsize',
- 'minsize',
- 'minage',
- 'search',
- 'search1',
- 'search2',
- 'noabletosearch',
- 'noabletosearch1',
- 'noabletosearch2',
- 'maxlinelength',
- 'useheader',
- 'useheader',
- 'syncduplicates',
- 'usecache',
- 'nousecache',
- 'useuid',
- 'syncacls',
- 'nosyncacls',
- 'debug',
- 'debugfolders',
- 'debugcontent',
- 'debugflags',
- 'debugimap1',
- 'debugimap2',
- 'debugimap',
- 'debugmemory',
- 'errorsmax',
- 'tests',
- 'testslive',
- 'testslive6',
- 'gmail1',
- 'gmail2',
- 'office1',
- 'office2',
- 'exchange1',
- 'exchange2',
- 'domino1',
- 'domino2',
- 'keepalive1',
- 'keepalive2',
- 'maxmessagespersecond',
- 'maxbytesafter',
- 'maxsleep',
- 'abort',
- 'exitwhenover',
- 'noid',
- 'justconnect',
- 'justlogin',
- 'justfolders'
+ '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',
+ 'debugimap2',
+ 'domino1',
+ 'exchange1',
+ 'exchange2',
+ 'justlogin',
+ 'keepalive1',
+ 'keepalive2',
+ 'noabletosearch2',
+ 'noexpunge2',
+ 'noresyncflags',
+ 'nossl1',
+ 'nouidexpunge2',
+ 'syncinternaldates',
+ 'idatefromheader',
+ 'useuid',
+ 'debugflags',
+ 'debugimap',
+ 'delete1emptyfolders',
+ 'delete2folders',
+ 'gmail2',
+ 'office1',
+ 'testslive6',
+ 'debugimap1',
+ 'errorsmax',
+ 'tests',
+ 'gmail1',
+ 'maxmessagespersecond',
+ 'maxbytesafter',
+ 'maxsleep',
+ 'abort',
+ 'resyncflags',
+ 'resynclabels',
+ 'syncacls',
+ 'nosyncacls',
+ 'nousecache',
+ 'office2',
+ 'testslive',
+ 'debugmemory',
+ 'exitwhenover',
+ 'noid',
+ 'noexpunge1',
+ 'authmd51',
+ 'logfile',
+ 'proxyauth2',
+ 'domain1',
+ 'domain2',
+ 'oauthaccesstoken1',
+ 'oauthaccesstoken2',
+ 'oauthdirect1',
+ 'oauthdirect2',
+ 'folder',
+ 'folderrec',
+ 'folderfirst',
+ 'folderlast',
+ 'nomixfolders',
+ 'authmd52',
+ 'debugfolders',
+ 'nossl2',
+ 'ssl2',
+ 'tls2',
+ 'notls2',
+ 'debugssl',
+ 'notls1',
+ 'inet4',
+ 'inet6',
+ 'log',
+ 'showpasswords'
),
'blacklist' => array(
- 'skipmess',
- 'delete2foldersonly',
- 'delete2foldersbutnot',
- 'regexflag',
- 'regexmess',
- 'pipemess',
- 'regextrans2',
- 'maxlinelengthcmd'
+ 'skipmess',
+ 'delete2foldersonly',
+ 'delete2foldersbutnot',
+ 'regexflag',
+ 'regexmess',
+ 'pipemess',
+ 'regextrans2',
+ 'maxlinelengthcmd'
)
);