From a9766f6c821fba7c3201d2047754011689a67035 Mon Sep 17 00:00:00 2001 From: Ralf Becker Date: Fri, 23 Nov 2012 09:18:00 +0000 Subject: [PATCH] migrate mailbox name (mailMessageStore) when migrating mail accounts, otherwise default get created, which might differ --- emailadmin/inc/class.emailadmin_smtp.inc.php | 4 +++- emailadmin/inc/class.emailadmin_smtp_ldap.inc.php | 12 ++++++++++-- emailadmin/inc/class.emailadmin_smtp_sql.inc.php | 12 +++++++++--- setup/inc/class.setup_cmd_ldap.inc.php | 2 +- 4 files changed, 23 insertions(+), 7 deletions(-) diff --git a/emailadmin/inc/class.emailadmin_smtp.inc.php b/emailadmin/inc/class.emailadmin_smtp.inc.php index 244720d776..a80a49b80a 100644 --- a/emailadmin/inc/class.emailadmin_smtp.inc.php +++ b/emailadmin/inc/class.emailadmin_smtp.inc.php @@ -171,9 +171,11 @@ class emailadmin_smtp * @param string $_mailLocalAddress * @param int $_quota in MB * @param boolean $_forwarding_only=false true: store only forwarding info, used internally by saveSMTPForwarding + * @param string $_setMailbox=null used only for account migration * @return boolean true on success, false on error writing to ldap */ - function setUserData($_uidnumber, array $_mailAlternateAddress, array $_mailForwardingAddress, $_deliveryMode, $_accountStatus, $_mailLocalAddress, $_quota, $_forwarding_only=false) + function setUserData($_uidnumber, array $_mailAlternateAddress, array $_mailForwardingAddress, $_deliveryMode, + $_accountStatus, $_mailLocalAddress, $_quota, $_forwarding_only=false, $_setMailbox=null) { return true; } diff --git a/emailadmin/inc/class.emailadmin_smtp_ldap.inc.php b/emailadmin/inc/class.emailadmin_smtp_ldap.inc.php index 63bd81fcbd..c78ba8f532 100644 --- a/emailadmin/inc/class.emailadmin_smtp_ldap.inc.php +++ b/emailadmin/inc/class.emailadmin_smtp_ldap.inc.php @@ -364,7 +364,7 @@ class emailadmin_smtp_ldap extends emailadmin_smtp $userData['mailForwardingAddress'] = $this->config['forward_attr'] ? $values[$this->config['forward_attr']] : array(); unset($userData['mailForwardingAddress']['count']); - if ($this->config['mailbox_attr']) $userData[$this->config['mailbox_attr']] = $values[$this->config['mailbox_attr']][0]; + if ($this->config['mailbox_attr']) $userData['mailMessageStore'] = $values[$this->config['mailbox_attr']][0]; if ($this->config['forward_only_attr']) { @@ -404,9 +404,12 @@ class emailadmin_smtp_ldap extends emailadmin_smtp * @param string $_accountStatus * @param string $_mailLocalAddress * @param int $_quota in MB + * @param boolean $_forwarding_only=false not used as we have our own addAccount method + * @param string $_setMailbox=null used only for account migration * @return boolean true on success, false on error writing to ldap */ - function setUserData($_uidnumber, array $_mailAlternateAddress, array $_mailForwardingAddress, $_deliveryMode, $_accountStatus, $_mailLocalAddress, $_quota) + function setUserData($_uidnumber, array $_mailAlternateAddress, array $_mailForwardingAddress, $_deliveryMode, + $_accountStatus, $_mailLocalAddress, $_quota, $_forwarding_only=false, $_setMailbox=null) { $filter = 'uidnumber='.(int)$_uidnumber; @@ -478,6 +481,11 @@ class emailadmin_smtp_ldap extends emailadmin_smtp { $newData[$this->config['quota_attr']] = (int)$_quota >= 0 ? (int)$_quota*1048576 : array(); } + // does schema support an explicit mailbox name --> set it, $_setMailbox is given + if ($this->config['mailbox_attr'] && $_setMailbox) + { + $newData[$this->config['mailbox_attr']] = $_setMailbox; + } if ($this->debug) error_log(__METHOD__.'('.array2string(func_get_args()).") --> ldap_mod_replace(,'$accountDN',".array2string($newData).')'); return ldap_mod_replace($ldap, $accountDN, $newData); diff --git a/emailadmin/inc/class.emailadmin_smtp_sql.inc.php b/emailadmin/inc/class.emailadmin_smtp_sql.inc.php index d01de8f3b5..45257a7432 100644 --- a/emailadmin/inc/class.emailadmin_smtp_sql.inc.php +++ b/emailadmin/inc/class.emailadmin_smtp_sql.inc.php @@ -178,7 +178,7 @@ class emailadmin_smtp_sql extends emailadmin_smtp break; case self::TYPE_MAILBOX: - $userData['mailmessagestore'] = $row['mail_value']; + $userData['mailMessageStore'] = $row['mail_value']; //error_log(__METHOD__."('$user') row=".array2string($row).', enabled[$row[account_id]]='.array2string($enabled[$row['account_id']]).', forwardOnly[$row[account_id]]='.array2string($forwardOnly[$row['account_id']])); if ($row['account_id'] > 0 && $enabled[$row['account_id']] && !$forwardOnly[$row['account_id']]) { @@ -223,10 +223,11 @@ class emailadmin_smtp_sql extends emailadmin_smtp * @param string $_mailLocalAddress * @param int $_quota in MB * @param boolean $_forwarding_only=false true: store only forwarding info, used internally by saveSMTPForwarding + * @param string $_setMailbox=null used only for account migration * @return boolean true on success, false on error writing to ldap */ function setUserData($_uidnumber, array $_mailAlternateAddress, array $_mailForwardingAddress, $_deliveryMode, - $_accountStatus, $_mailLocalAddress, $_quota, $_forwarding_only=false) + $_accountStatus, $_mailLocalAddress, $_quota, $_forwarding_only=false, $_setMailbox=null) { if ($this->debug) error_log(__METHOD__."($_uidnumber, ".array2string($_mailAlternateAddress).', '.array2string($_mailForwardingAddress).", '$_deliveryMode', '$_accountStatus', '$_mailLocalAddress', $_quota, forwarding_only=".array2string($_forwarding_only).') '.function_backtrace()); @@ -295,8 +296,13 @@ class emailadmin_smtp_sql extends emailadmin_smtp { $this->db->delete(self::TABLE, array('mail_id' => $delete_ids), __LINE__, __FILE__, self::APP); } + // set mailbox address, if explicitly requested by $_setMailbox parameter + if ($_setMailbox) + { + $flags[self::TYPE_MAILBOX] = $_setMailbox; + } // set mailbox address, if not yet set - if (!$_forwarding_only && empty($mailbox)) + elseif (!$_forwarding_only && empty($mailbox)) { $flags[self::TYPE_MAILBOX] = $this->mailbox_addr(array( 'account_id' => $_uidnumber, diff --git a/setup/inc/class.setup_cmd_ldap.inc.php b/setup/inc/class.setup_cmd_ldap.inc.php index 1d1aa977a6..653f0927ea 100644 --- a/setup/inc/class.setup_cmd_ldap.inc.php +++ b/setup/inc/class.setup_cmd_ldap.inc.php @@ -242,7 +242,7 @@ class setup_cmd_ldap extends setup_cmd $emailadmin_dst->setUserData($account_id, (array)$mailaccount['mailAlternateAddress'], (array)$mailaccount['mailForwardingAddress'], $mailaccount['deliveryMode'], $mailaccount['accountStatus'], $mailaccount['mailLocalAddress'], - $mailaccount['quotaLimit']); + $mailaccount['quotaLimit'], false, $mailaccount['mailMessageStore']); $msg[] = lang("Mail account of %1 migraged", $account['account_lid']); }