From 728a6d56f48175c9b847f1e2e0fbe00104695126 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philipp=20Sch=C3=BCle?= Date: Mon, 17 Feb 2025 13:52:57 +0100 Subject: [PATCH] fix(Tinebase/EmailUser): allow user email update if not managed ... by checking the config in Tinebase_EmailUser::checkDomain -> we now require that imap with system users is configured to reject invalid domains --- tests/tine20/Admin/Frontend/Json/UserTest.php | 3 ++- tine20/Tinebase/EmailUser.php | 9 ++++++++- tine20/Tinebase/User/Sql.php | 12 +++++++++--- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/tests/tine20/Admin/Frontend/Json/UserTest.php b/tests/tine20/Admin/Frontend/Json/UserTest.php index eb945ea14ae..3be2d50625c 100644 --- a/tests/tine20/Admin/Frontend/Json/UserTest.php +++ b/tests/tine20/Admin/Frontend/Json/UserTest.php @@ -583,7 +583,8 @@ public function testExternalDomainInUserAccountCreate() $userArray = $user->toArray(); $updatedUser = $this->_json->saveUser($userArray); self::assertEquals($userArray['accountEmailAddress'], $updatedUser['accountEmailAddress']); - self::assertFalse(isset($updatedUser['xprops']['emailUserIdImap']), print_r($updatedUser['xprops'], true)); + self::assertFalse(isset($updatedUser['xprops']['emailUserIdImap']), + 'user should no longer have email xprops:' . print_r($updatedUser['xprops'], true)); } /** diff --git a/tine20/Tinebase/EmailUser.php b/tine20/Tinebase/EmailUser.php index f661cd20e6f..eadb148745d 100644 --- a/tine20/Tinebase/EmailUser.php +++ b/tine20/Tinebase/EmailUser.php @@ -494,7 +494,14 @@ public static function checkDomain( $_throwException = false, $_allowedDomains = null, $_includeAdditional = false - ) { + ): bool + { + if (!Tinebase_EmailUser::manages(Tinebase_Config::IMAP) || + !Tinebase_Config::getInstance()->{Tinebase_Config::IMAP}->{Tinebase_Config::IMAP_USE_SYSTEM_ACCOUNT} + ) { + return true; + } + $result = true; $allowedDomains = $_allowedDomains ?: self::getAllowedDomains(null, $_includeAdditional); diff --git a/tine20/Tinebase/User/Sql.php b/tine20/Tinebase/User/Sql.php index 790a54421b1..81924f6defd 100644 --- a/tine20/Tinebase/User/Sql.php +++ b/tine20/Tinebase/User/Sql.php @@ -1079,7 +1079,8 @@ public function updateUserInSqlBackend(Tinebase_Model_FullUser $_user, bool $_ge } if (Tinebase_EmailUser::manages(Tinebase_Config::IMAP) - && ! Tinebase_Config::getInstance()->get(Tinebase_Config::IMAP)->allowExternalEmail) { + && ! Tinebase_Config::getInstance()->get(Tinebase_Config::IMAP)->allowExternalEmail + ) { Tinebase_EmailUser::checkDomain($_user->accountEmailAddress, true, null, @@ -1202,8 +1203,13 @@ public function addPluginUser($addedUser, $newUserProperties) */ public function addUserInSqlBackend(Tinebase_Model_FullUser $_user) { - Tinebase_Config::getInstance()->get(Tinebase_Config::IMAP)->allowExternalEmail - || Tinebase_EmailUser::checkDomain($_user->accountEmailAddress, true, null, true); + if (Tinebase_EmailUser::manages(Tinebase_Config::IMAP) + && ! Tinebase_Config::getInstance()->get(Tinebase_Config::IMAP)->allowExternalEmail) { + Tinebase_EmailUser::checkDomain($_user->accountEmailAddress, + true, + null, + true); + } $_user->isValid(TRUE);