/** * (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]; }