|
@@ -1073,6 +1073,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
|
|
$quarantine_notification = (isset($_data['quarantine_notification'])) ? strval($_data['quarantine_notification']) : strval($MAILBOX_DEFAULT_ATTRIBUTES['quarantine_notification']);
|
|
|
$quarantine_category = (isset($_data['quarantine_category'])) ? strval($_data['quarantine_category']) : strval($MAILBOX_DEFAULT_ATTRIBUTES['quarantine_category']);
|
|
|
$quota_b = ($quota_m * 1048576);
|
|
|
+ $attribute_hash = (!empty($_data['attribute_hash'])) ? $_data['attribute_hash'] : '';
|
|
|
$mailbox_attrs = json_encode(
|
|
|
array(
|
|
|
'force_pw_update' => strval($force_pw_update),
|
|
@@ -1087,7 +1088,8 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
|
|
'passwd_update' => time(),
|
|
|
'mailbox_format' => strval($MAILBOX_DEFAULT_ATTRIBUTES['mailbox_format']),
|
|
|
'quarantine_notification' => strval($quarantine_notification),
|
|
|
- 'quarantine_category' => strval($quarantine_category)
|
|
|
+ 'quarantine_category' => strval($quarantine_category),
|
|
|
+ 'attribute_hash' => $attribute_hash
|
|
|
)
|
|
|
);
|
|
|
if (!is_valid_domain_name($domain)) {
|
|
@@ -1223,11 +1225,14 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
|
|
);
|
|
|
break;
|
|
|
}
|
|
|
- $stmt = $pdo->prepare("INSERT INTO `tags_mailbox` (`username`, `tag_name`) VALUES (:username, :tag_name)");
|
|
|
- $stmt->execute(array(
|
|
|
- ':username' => $username,
|
|
|
- ':tag_name' => $tag,
|
|
|
- ));
|
|
|
+ try {
|
|
|
+ $stmt = $pdo->prepare("INSERT INTO `tags_mailbox` (`username`, `tag_name`) VALUES (:username, :tag_name)");
|
|
|
+ $stmt->execute(array(
|
|
|
+ ':username' => $username,
|
|
|
+ ':tag_name' => $tag,
|
|
|
+ ));
|
|
|
+ } catch (Exception $e) {
|
|
|
+ }
|
|
|
}
|
|
|
$stmt = $pdo->prepare("INSERT INTO `quota2` (`username`, `bytes`, `messages`)
|
|
|
VALUES (:username, '0', '0') ON DUPLICATE KEY UPDATE `bytes` = '0', `messages` = '0';");
|
|
@@ -1344,10 +1349,12 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
+ $attribute_hash = sha1(json_encode($mbox_template_data["attributes"]));
|
|
|
$mbox_template_data = json_decode($mbox_template_data["attributes"], true);
|
|
|
$mbox_template_data['domain'] = $_data['domain'];
|
|
|
$mbox_template_data['local_part'] = $_data['local_part'];
|
|
|
$mbox_template_data['authsource'] = $_data['authsource'];
|
|
|
+ $mbox_template_data['attribute_hash'] = $attribute_hash;
|
|
|
$mbox_template_data['quota'] = intval($mbox_template_data['quota'] / 1048576);
|
|
|
|
|
|
$mailbox_attributes = array('acl' => array());
|
|
@@ -2921,12 +2928,17 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
|
|
(int)$sieve_access = (isset($_data['sieve_access']) && isset($_SESSION['acl']['protocol_access']) && $_SESSION['acl']['protocol_access'] == "1") ? intval($_data['sieve_access']) : intval($is_now['attributes']['sieve_access']);
|
|
|
(int)$relayhost = (isset($_data['relayhost']) && isset($_SESSION['acl']['mailbox_relayhost']) && $_SESSION['acl']['mailbox_relayhost'] == "1") ? intval($_data['relayhost']) : intval($is_now['attributes']['relayhost']);
|
|
|
(int)$quota_m = (isset_has_content($_data['quota'])) ? intval($_data['quota']) : ($is_now['quota'] / 1048576);
|
|
|
- $name = (!empty($_data['name'])) ? ltrim(rtrim($_data['name'], '>'), '<') : $is_now['name'];
|
|
|
- $domain = $is_now['domain'];
|
|
|
- $quota_b = $quota_m * 1048576;
|
|
|
- $password = (!empty($_data['password'])) ? $_data['password'] : null;
|
|
|
- $password2 = (!empty($_data['password2'])) ? $_data['password2'] : null;
|
|
|
- $tags = (is_array($_data['tags']) ? $_data['tags'] : array());
|
|
|
+ $name = (!empty($_data['name'])) ? ltrim(rtrim($_data['name'], '>'), '<') : $is_now['name'];
|
|
|
+ $domain = $is_now['domain'];
|
|
|
+ $quota_b = $quota_m * 1048576;
|
|
|
+ $password = (!empty($_data['password'])) ? $_data['password'] : null;
|
|
|
+ $password2 = (!empty($_data['password2'])) ? $_data['password2'] : null;
|
|
|
+ $tags = (is_array($_data['tags']) ? $_data['tags'] : array());
|
|
|
+ $attribute_hash = (!empty($_data['attribute_hash'])) ? $_data['attribute_hash'] : '';
|
|
|
+ $authsource = $is_now['authsource'];
|
|
|
+ if (in_array($_data['authsource'], array('mailcow', 'keycloak', 'generic-oidc'))){
|
|
|
+ $authsource = $_data['authsource'];
|
|
|
+ }
|
|
|
}
|
|
|
else {
|
|
|
$_SESSION['return'][] = array(
|
|
@@ -3183,18 +3195,21 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
|
|
`active` = :active,
|
|
|
`name`= :name,
|
|
|
`quota` = :quota_b,
|
|
|
+ `authsource` = :authsource,
|
|
|
`attributes` = JSON_SET(`attributes`, '$.force_pw_update', :force_pw_update),
|
|
|
`attributes` = JSON_SET(`attributes`, '$.sogo_access', :sogo_access),
|
|
|
`attributes` = JSON_SET(`attributes`, '$.imap_access', :imap_access),
|
|
|
`attributes` = JSON_SET(`attributes`, '$.sieve_access', :sieve_access),
|
|
|
`attributes` = JSON_SET(`attributes`, '$.pop3_access', :pop3_access),
|
|
|
`attributes` = JSON_SET(`attributes`, '$.relayhost', :relayhost),
|
|
|
- `attributes` = JSON_SET(`attributes`, '$.smtp_access', :smtp_access)
|
|
|
+ `attributes` = JSON_SET(`attributes`, '$.smtp_access', :smtp_access),
|
|
|
+ `attributes` = JSON_SET(`attributes`, '$.attribute_hash', :attribute_hash)
|
|
|
WHERE `username` = :username");
|
|
|
$stmt->execute(array(
|
|
|
':active' => $active,
|
|
|
':name' => $name,
|
|
|
':quota_b' => $quota_b,
|
|
|
+ ':attribute_hash' => $attribute_hash,
|
|
|
':force_pw_update' => $force_pw_update,
|
|
|
':sogo_access' => $sogo_access,
|
|
|
':imap_access' => $imap_access,
|
|
@@ -3202,7 +3217,8 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
|
|
':sieve_access' => $sieve_access,
|
|
|
':smtp_access' => $smtp_access,
|
|
|
':relayhost' => $relayhost,
|
|
|
- ':username' => $username
|
|
|
+ ':username' => $username,
|
|
|
+ ':authsource' => $authsource
|
|
|
));
|
|
|
// save tags
|
|
|
foreach($tags as $index => $tag){
|
|
@@ -3215,11 +3231,14 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
|
|
);
|
|
|
break;
|
|
|
}
|
|
|
- $stmt = $pdo->prepare("INSERT INTO `tags_mailbox` (`username`, `tag_name`) VALUES (:username, :tag_name)");
|
|
|
- $stmt->execute(array(
|
|
|
- ':username' => $username,
|
|
|
- ':tag_name' => $tag,
|
|
|
- ));
|
|
|
+ try {
|
|
|
+ $stmt = $pdo->prepare("INSERT INTO `tags_mailbox` (`username`, `tag_name`) VALUES (:username, :tag_name)");
|
|
|
+ $stmt->execute(array(
|
|
|
+ ':username' => $username,
|
|
|
+ ':tag_name' => $tag,
|
|
|
+ ));
|
|
|
+ } catch (Exception $e) {
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
$_SESSION['return'][] = array(
|
|
@@ -3248,7 +3267,13 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
- $mbox_template_data = json_decode($mbox_template_data["attributes"], true);
|
|
|
+ $attribute_hash = sha1(json_encode($mbox_template_data["attributes"]));
|
|
|
+ $is_now = mailbox('get', 'mailbox_details', $_data['username']);
|
|
|
+ if ($is_now['attributes']['attribute_hash'] == $attribute_hash)
|
|
|
+ return true;
|
|
|
+
|
|
|
+ $mbox_template_data = json_decode($mbox_template_data["attributes"], true);
|
|
|
+ $mbox_template_data['attribute_hash'] = $attribute_hash;
|
|
|
$quarantine_attributes = array('username' => $_data['username']);
|
|
|
$tls_attributes = array('username' => $_data['username']);
|
|
|
$ratelimit_attributes = array('object' => $_data['username']);
|