示例#1
0
 /**
  * Replaces hostname variables.
  *
  * @param string $name Hostname
  * @param string $host Optional IMAP hostname
  *
  * @return string Hostname
  */
 public static function parse_host($name, $host = '')
 {
     // %n - host
     $n = preg_replace('/:\\d+$/', '', $_SERVER['SERVER_NAME']);
     // %t - host name without first part, e.g. %n=mail.domain.tld, %t=domain.tld
     $t = preg_replace('/^[^\\.]+\\./', '', $n);
     // %d - domain name without first part
     $d = preg_replace('/^[^\\.]+\\./', '', $_SERVER['HTTP_HOST']);
     // %h - IMAP host
     $h = $_SESSION['storage_host'] ? $_SESSION['storage_host'] : $host;
     // %z - IMAP domain without first part, e.g. %h=imap.domain.tld, %z=domain.tld
     $z = preg_replace('/^[^\\.]+\\./', '', $h);
     // %s - domain name after the '@' from e-mail address provided at login screen. Returns FALSE if an invalid email is provided
     if (strpos($name, '%s') !== false) {
         $user_email = self::get_input_value('_user', self::INPUT_POST);
         $user_email = rcube_utils::idn_convert($user_email, true);
         $matches = preg_match('/(.*)@([a-z0-9\\.\\-\\[\\]\\:]+)/i', $user_email, $s);
         if ($matches < 1 || filter_var($s[1] . "@" . $s[2], FILTER_VALIDATE_EMAIL) === false) {
             return false;
         }
     }
     $name = str_replace(array('%n', '%t', '%d', '%h', '%z', '%s'), array($n, $t, $d, $h, $z, $s[2]), $name);
     return $name;
 }