/**
  * (non-PHPdoc)
  */
 protected function _getSpecialResultDataFromLdap()
 {
     $filter = "&";
     foreach ($this->_simpleMailConfig['skeleton'] as $attr => $val) {
         if (is_array($val)) {
             foreach ($val as $val_array) {
                 $filter .= '(' . $attr . '=' . $val_array . ')';
             }
         } else {
             $filter .= '(' . $attr . '=' . $val . ')';
         }
     }
     $ldap = $this->_ldap->searchEntries(Zend_Ldap_Filter::string($filter), $this->_simpleMailConfig['base'], $this->_simpleMailConfig['scope'], array());
     /* Make sure, the managed rdn is last in array and properties are
      * ultimately read from this rdn (if entries are doubled)
      *  
      * Order of array matters: 
      *  - all entries anywhere
      *  - entries within the storage path
      *  - the exact managed dn
      */
     $this->_ldapRawData = array();
     $managedPath = Zend_Ldap_Dn::fromString($this->_simpleMailConfig['storage_base'], Zend_Ldap_Dn::ATTR_CASEFOLD_LOWER);
     $managedDn = Zend_Ldap_Dn::fromString($this->_simpleMailConfig['storage_rdn'] . ',' . $this->_simpleMailConfig['storage_base'], Zend_Ldap_Dn::ATTR_CASEFOLD_LOWER);
     $managedDnExisting = false;
     foreach ($ldap as $dn) {
         $dnArr = Zend_Ldap_Dn::fromString($dn['dn'], Zend_Ldap_Dn::ATTR_CASEFOLD_LOWER);
         if ($dnArr->toString() == $managedDn->toString()) {
             array_push($this->_ldapRawData, $dn);
             $managedDnExisting = true;
         } elseif (Zend_Ldap_Dn::isChildOf($dnArr, $managedPath)) {
             $managedDnExisting === true ? array_splice($this->_ldapRawData, -1, 0, array($dn)) : array_push($this->_ldapRawData, $dn);
         } else {
             $dn['simplemail_readonly'] = true;
             array_unshift($this->_ldapRawData, $dn);
         }
     }
     if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) {
         Tinebase_Core::getLogger()->trace(__METHOD__ . '::' . __LINE__ . ' simpleMail - Tinebase_EmailUser combined with ldap: ' . print_r($this->_ldapRawData, true));
     }
 }
 /**
  * get config for type IMAP/SMTP
  * 
  * @param string $_configType
  * @return array
  */
 public static function getConfig($_configType)
 {
     if (!isset(self::$_configs[$_configType])) {
         self::$_configs[$_configType] = Tinebase_Config::getInstance()->get($_configType, new Tinebase_Config_Struct())->toArray();
         /*
          * If LDAP-Url is given (instead of comma separated domains) add secondary domains from LDAP
          * e.g. ldap://localhost/ou=domains,ou=mailConfig,dc=example,dc=com?dc?sub?objectclass=mailDomain
          */
         if ($_configType == Tinebase_Config::SMTP && array_key_exists('secondarydomains', self::$_configs[Tinebase_Config::SMTP]) && preg_match("~^ldaps?://~i", self::$_configs[Tinebase_Config::SMTP]['secondarydomains'])) {
             $ldap_url = parse_url(self::$_configs[Tinebase_Config::SMTP]['secondarydomains']);
             $ldap_url['path'] = substr($ldap_url['path'], 1);
             $query = explode('?', $ldap_url['query']);
             count($query) > 0 ? $ldap_url['attributes'] = explode(',', $query[0]) : ($ldap_url['attributes'] = array());
             $ldap_url['scope'] = Zend_Ldap::SEARCH_SCOPE_BASE;
             if (count($query) > 1) {
                 switch ($query[1]) {
                     case 'subtree':
                     case 'sub':
                         $ldap_url['scope'] = Zend_Ldap::SEARCH_SCOPE_SUB;
                         break;
                     case 'one':
                         $ldap_url['scope'] = Zend_Ldap::SEARCH_SCOPE_ONE;
                         break;
                 }
             }
             count($query) > 2 ? $ldap_url['filter'] = $query[2] : ($ldap_url['filter'] = 'objectClass=*');
             // By now your options are limited to configured server
             $ldap = new Tinebase_Ldap(Tinebase_User::getBackendConfiguration());
             $ldap->connect()->bind();
             $secondarydomains = $ldap->searchEntries($ldap_url['filter'], $ldap_url['path'], $ldap_url['scope'], $ldap_url['attributes']);
             self::$_configs[Tinebase_Config::SMTP]['secondarydomains'] = '';
             foreach ($secondarydomains as $dn) {
                 foreach ($ldap_url['attributes'] as $attr) {
                     if (array_key_exists($attr, $dn)) {
                         foreach ($dn[$attr] as $domain) {
                             self::$_configs[Tinebase_Config::SMTP]['secondarydomains'] != '' ? $domain = ',' . $domain : $domain;
                             self::$_configs[Tinebase_Config::SMTP]['secondarydomains'] .= $domain;
                         }
                     }
                 }
             }
             if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) {
                 Tinebase_Core::getLogger()->trace(__METHOD__ . '::' . __LINE__ . ' Secondarydomains: ' . print_r(self::$_configs[Tinebase_Config::SMTP]['secondarydomains'], true));
             }
         }
     }
     return self::$_configs[$_configType];
 }