diff options
author | Josh <josh.t.richards@gmail.com> | 2024-07-12 18:59:45 -0400 |
---|---|---|
committer | Ferdinand Thiessen <opensource@fthiessen.de> | 2025-02-12 13:23:11 +0100 |
commit | 431c6d06098dad26919dc74fcbfd923f0b310cee (patch) | |
tree | b2423a21baa37d8785a6e34538724181246dc751 | |
parent | bfa0888217dbd861f53474cad50a2e30204c122c (diff) | |
download | nextcloud-server-431c6d06098dad26919dc74fcbfd923f0b310cee.tar.gz nextcloud-server-431c6d06098dad26919dc74fcbfd923f0b310cee.zip |
fix(Mailer): Fix sendmail binary fallbackbackport/46480/stable30
Signed-off-by: Josh <josh.t.richards@gmail.com>
-rw-r--r-- | apps/settings/lib/Settings/Admin/Mail.php | 5 | ||||
-rw-r--r-- | apps/settings/tests/Settings/Admin/MailTest.php | 31 | ||||
-rw-r--r-- | lib/private/Mail/Mailer.php | 5 | ||||
-rw-r--r-- | tests/lib/Mail/MailerTest.php | 3 |
4 files changed, 33 insertions, 11 deletions
diff --git a/apps/settings/lib/Settings/Admin/Mail.php b/apps/settings/lib/Settings/Admin/Mail.php index e455f0d3bc0..03b24d90854 100644 --- a/apps/settings/lib/Settings/Admin/Mail.php +++ b/apps/settings/lib/Settings/Admin/Mail.php @@ -6,6 +6,7 @@ namespace OCA\Settings\Settings\Admin; use OCP\AppFramework\Http\TemplateResponse; +use OCP\IBinaryFinder; use OCP\IConfig; use OCP\IL10N; use OCP\Settings\IDelegatedSettings; @@ -30,9 +31,11 @@ class Mail implements IDelegatedSettings { * @return TemplateResponse */ public function getForm() { + $finder = \OCP\Server::get(IBinaryFinder::class); + $parameters = [ // Mail - 'sendmail_is_available' => (bool) \OC_Helper::findBinaryPath('sendmail'), + 'sendmail_is_available' => $finder->findBinaryPath('sendmail') !== false, 'mail_domain' => $this->config->getSystemValue('mail_domain', ''), 'mail_from_address' => $this->config->getSystemValue('mail_from_address', ''), 'mail_smtpmode' => $this->config->getSystemValue('mail_smtpmode', ''), diff --git a/apps/settings/tests/Settings/Admin/MailTest.php b/apps/settings/tests/Settings/Admin/MailTest.php index f63952c288c..87e561ba457 100644 --- a/apps/settings/tests/Settings/Admin/MailTest.php +++ b/apps/settings/tests/Settings/Admin/MailTest.php @@ -7,17 +7,17 @@ namespace OCA\Settings\Tests\Settings\Admin; use OCA\Settings\Settings\Admin\Mail; use OCP\AppFramework\Http\TemplateResponse; +use OCP\IBinaryFinder; use OCP\IConfig; use OCP\IL10N; +use PHPUnit\Framework\MockObject\MockObject; use Test\TestCase; class MailTest extends TestCase { - /** @var Mail */ - private $admin; - /** @var IConfig */ - private $config; - /** @var IL10N */ - private $l10n; + + private Mail $admin; + private IConfig&MockObject $config; + private IL10N&MockObject $l10n; protected function setUp(): void { parent::setUp(); @@ -30,7 +30,22 @@ class MailTest extends TestCase { ); } - public function testGetForm() { + public static function dataGetForm(): array { + return [ + [true], + [false], + ]; + } + + /** @dataProvider dataGetForm */ + public function testGetForm(bool $sendmail) { + $finder = $this->createMock(IBinaryFinder::class); + $finder->expects(self::once()) + ->method('findBinaryPath') + ->with('sendmail') + ->willReturn($sendmail ? '/usr/bin/sendmail': false); + $this->overwriteService(IBinaryFinder::class, $finder); + $this->config ->expects($this->any()) ->method('getSystemValue') @@ -51,7 +66,7 @@ class MailTest extends TestCase { 'settings', 'settings/admin/additional-mail', [ - 'sendmail_is_available' => (bool) \OC_Helper::findBinaryPath('sendmail'), + 'sendmail_is_available' => $sendmail, 'mail_domain' => 'mx.nextcloud.com', 'mail_from_address' => 'no-reply@nextcloud.com', 'mail_smtpmode' => 'smtp', diff --git a/lib/private/Mail/Mailer.php b/lib/private/Mail/Mailer.php index 71d9aca9aeb..9fda5bffcac 100644 --- a/lib/private/Mail/Mailer.php +++ b/lib/private/Mail/Mailer.php @@ -334,8 +334,10 @@ class Mailer implements IMailer { break; default: $sendmail = \OCP\Server::get(IBinaryFinder::class)->findBinaryPath('sendmail'); - if ($sendmail === null) { + if ($sendmail === false) { + // fallback (though not sure what good it'll do) $sendmail = '/usr/sbin/sendmail'; + $this->logger->debug('sendmail binary search failed, using fallback ' . $sendmail, ['app' => 'core']); } $binaryPath = $sendmail; break; @@ -346,6 +348,7 @@ class Mailer implements IMailer { default => ' -bs', }; + $this->logger->debug('Using sendmail binary: ' . $binaryPath, ['app' => 'core']); return new SendmailTransport($binaryPath . $binaryParam, null, $this->logger); } } diff --git a/tests/lib/Mail/MailerTest.php b/tests/lib/Mail/MailerTest.php index be95307da6d..b3af888eec7 100644 --- a/tests/lib/Mail/MailerTest.php +++ b/tests/lib/Mail/MailerTest.php @@ -12,6 +12,7 @@ use OC\Mail\Mailer; use OC\Mail\Message; use OCP\Defaults; use OCP\EventDispatcher\IEventDispatcher; +use OCP\IBinaryFinder; use OCP\IConfig; use OCP\IL10N; use OCP\IURLGenerator; @@ -86,7 +87,7 @@ class MailerTest extends TestCase { ['mail_sendmailmode', 'smtp', $sendmailMode], ]); - $path = \OC_Helper::findBinaryPath('sendmail'); + $path = \OCP\Server::get(IBinaryFinder::class)->findBinaryPath('sendmail'); if ($path === false) { $path = '/usr/sbin/sendmail'; } |