Commit 22635140 authored by Judah MW's avatar Judah MW
Browse files

functions: Added support for leading dots to _idn_encode_decode()

Amavisd supports wildcards by performing decreasingly specific SQL
lookups:
    9 - lookup for user+foo@sub.example.com
    8 - lookup for user@sub.example.com
    7 - lookup for user+foo
    6 - lookup for user
    5 - lookup for @sub.example.com
    3 - lookup for @.sub.example.com
    2 - lookup for @.example.com
    1 - lookup for @.com
    0 - lookup for @.       (catchall)
    (https://www.ijs.si/software/amavisd/README.lookups.txt)

However idn_to_* returns an empty string if the domain has a leading dot
which means lookups 0-3 cannot be used.  This is fixed by removing the
leading dot before encoding or decoding and adding it back just before
returning the domain.
parent 5bbec2b9
......@@ -334,6 +334,14 @@ class functions {
$domain = substr($domain, strrpos($domain, '@') + 1);
}
// idn_to_* chokes on leading dots, but we need them for amavis, so remove it for later
if(strpos($domain, '.') == 0) {
$leading_dot = true;
$domain = substr($domain, 1);
} else {
$leading_dot = false;
}
if($encode == true) {
if(function_exists('idn_to_ascii')) {
if(defined('IDNA_NONTRANSITIONAL_TO_ASCII') && defined('INTL_IDNA_VARIANT_UTS46') && constant('IDNA_NONTRANSITIONAL_TO_ASCII')) {
......@@ -378,6 +386,10 @@ class functions {
}
}
if($leading_dot == true) {
$domain = '.' . $domain;
}
if($user_part !== false) return $user_part . '@' . $domain;
else return $domain;
}
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment