Support opensmtpd format in virtuser_file (#9900)

This commit is contained in:
Philip Weir 2025-06-19 16:00:26 +01:00 committed by GitHub
parent 6390ad1466
commit 655c1521d0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 45 additions and 3 deletions

View File

@ -17,4 +17,38 @@ class VirtuserFileTest extends TestCase
$this->assertInstanceOf('virtuser_file', $plugin);
$this->assertInstanceOf('rcube_plugin', $plugin);
}
/**
* Test email lookup
*/
public function test_virtuals()
{
$rcube = \rcube::get_instance();
$rcube->config->set('virtuser_file', realpath(__DIR__ . '/src/virtuals'));
$plugin = new \virtuser_file($rcube->plugins);
$plugin->init();
$email = $plugin->user2email(['user' => 'alias-2']);
$user = $plugin->email2user(['email' => 'email2@domain.com']);
$this->assertSame('email2@domain.com', $email['email'][0]);
$this->assertSame('alias-2', $user['user']);
}
/**
* Test opensmtpd format
*/
public function test_opensmtpd()
{
$rcube = \rcube::get_instance();
$rcube->config->set('virtuser_file', realpath(__DIR__ . '/src/opensmtpd'));
$plugin = new \virtuser_file($rcube->plugins);
$plugin->init();
$email = $plugin->user2email(['user' => 'alias-2']);
$user = $plugin->email2user(['email' => 'email2@domain.com']);
$this->assertSame('email2@domain.com', $email['email'][0]);
$this->assertSame('alias-2', $user['user']);
}
}

View File

@ -0,0 +1,3 @@
email3@domain.com: alias-1
email2@domain.com: alias-2
email3@domain.com: alias-3

View File

@ -0,0 +1,3 @@
email1@domain.com alias-1
email2@domain.com alias-2
email3@domain.com alias-3

View File

@ -6,7 +6,7 @@
* Add it to the plugins list in config.inc.php and set
* path to a virtuser table file to resolve user names and e-mail
* addresses
* $rcmail['virtuser_file'] = '';
* $config['virtuser_file'] = '';
*
* @license GNU GPLv3+
* @author Aleksander Machniak
@ -43,7 +43,9 @@ class virtuser_file extends rcube_plugin
$arr = preg_split('/\s+/', $r[$i]);
if (count($arr) > 0 && strpos($arr[0], '@')) {
$result[] = rcube_utils::idn_to_ascii(trim(str_replace('\@', '@', $arr[0])));
$email = rcube_utils::idn_to_ascii(trim(str_replace('\@', '@', $arr[0])));
// support opensmtpd file format #9898
$result[] = rtrim($email, ':');
if (!empty($p['first'])) {
$p['email'] = $result[0];
@ -62,7 +64,7 @@ class virtuser_file extends rcube_plugin
*/
public function email2user($p)
{
$r = $this->findinvirtual('/^' . preg_quote($p['email'], '/') . '\s/');
$r = $this->findinvirtual('/^' . preg_quote($p['email'], '/') . ':?\s/');
for ($i = 0; $i < count($r); $i++) {
$arr = preg_split('/\s+/', trim($r[$i]));