/**
  * Returns registry data of admin.
  * @see Tinebase_Application_Json_Abstract
  * 
  * @return mixed array 'variable name' => 'data'
  */
 public function getRegistryData()
 {
     $appConfigDefaults = Admin_Controller::getInstance()->getConfigSettings();
     $smtpConfig = $this->_manageSmtpEmailUser ? Tinebase_EmailUser::getConfig(Tinebase_Config::SMTP) : ($smtpConfig = array());
     $registryData = array('manageSAM' => $this->_manageSAM, 'manageImapEmailUser' => $this->_manageImapEmailUser, 'manageSmtpEmailUser' => $this->_manageSmtpEmailUser, 'primarydomain' => isset($smtpConfig['primarydomain']) ? $smtpConfig['primarydomain'] : '', 'secondarydomains' => isset($smtpConfig['secondarydomains']) ? $smtpConfig['secondarydomains'] : '', 'defaultPrimaryGroup' => Tinebase_Group::getInstance()->getDefaultGroup()->toArray(), 'defaultInternalAddressbook' => $appConfigDefaults[Admin_Model_Config::DEFAULTINTERNALADDRESSBOOK] !== NULL ? Tinebase_Container::getInstance()->get($appConfigDefaults[Admin_Model_Config::DEFAULTINTERNALADDRESSBOOK])->toArray() : NULL);
     return $registryData;
 }
 /**
  * set database connection shared with Tinebase_EmailUser::DOVECOT_IMAP_COMBINED backend
  */
 protected function _getDb()
 {
     $dovecotCombined = Tinebase_EmailUser::getInstance(Tinebase_Config::IMAP);
     if (!$dovecotCombined instanceof Tinebase_EmailUser_Imap_DovecotCombined) {
         throw new Tinebase_Exception_UnexpectedValue('IMAP backend must be instance of Tinebase_EmailUser_Imap_DovecotCombined');
     }
     $this->_db = $dovecotCombined->getDb();
 }
예제 #3
0
 /**
  * Sets up the fixture.
  * This method is called before a test is executed.
  *
  * @access protected
  */
 protected function setUp()
 {
     $this->_config = Tinebase_Config::getInstance()->getConfigAsArray(Tinebase_Config::IMAP);
     if (!isset($this->_config['backend']) || !(ucfirst($this->_config['backend']) == Tinebase_EmailUser::DOVECOT_IMAP) || $this->_config['active'] != true) {
         $this->markTestSkipped('Dovecot MySQL backend not configured or not enabled');
     }
     $this->_backend = Tinebase_EmailUser::getInstance(Tinebase_Config::IMAP);
     $personas = Zend_Registry::get('personas');
     $this->_objects['user'] = clone $personas['jsmith'];
     $this->_objects['addedUsers'] = array();
 }
 /**
  * Sets up the fixture.
  * This method is called before a test is executed.
  *
  * @access protected
  */
 protected function setUp()
 {
     $this->_config = Tinebase_Config::getInstance()->get(Tinebase_Config::IMAP, new Tinebase_Config_Struct())->toArray();
     if (!isset($this->_config['backend']) || !('Imap_' . ucfirst($this->_config['backend']) == Tinebase_EmailUser::IMAP_DOVECOT) || $this->_config['active'] != true) {
         $this->markTestSkipped('Dovecot MySQL backend not configured or not enabled');
     }
     $this->_backend = Tinebase_EmailUser::getInstance(Tinebase_Config::IMAP);
     $personas = Zend_Registry::get('personas');
     $this->_objects['user'] = clone $personas['jsmith'];
     //$this->_objects['user']->setId(Tinebase_Record_Abstract::generateUID());
     $this->_objects['addedUsers'] = array();
     $this->_objects['fullUsers'] = array();
 }
예제 #5
0
 /**
  * constructs Admin_Frontend_Json
  */
 public function __construct()
 {
     // manage samba sam?
     if (isset(Tinebase_Core::getConfig()->samba)) {
         $this->_manageSAM = Tinebase_Core::getConfig()->samba->get('manageSAM', false);
     }
     // manage email user settings
     if (Tinebase_EmailUser::manages(Tinebase_Config::IMAP)) {
         $this->_manageImapEmailUser = TRUE;
     }
     if (Tinebase_EmailUser::manages(Tinebase_Config::SMTP)) {
         $this->_manageSmtpEmailUser = TRUE;
     }
 }
 /**
  * Sets up the fixture.
  * This method is called before a test is executed.
  *
  * @access protected
  */
 protected function setUp()
 {
     $this->_config = Tinebase_Config::getInstance()->get(Tinebase_Config::IMAP, new Tinebase_Config_Struct())->toArray();
     if (!isset($this->_config['backend']) || !('Imap_' . ucfirst($this->_config['backend']) == Tinebase_EmailUser::IMAP_DOVECOT) || $this->_config['active'] != true) {
         $this->markTestSkipped('Dovecot MySQL backend not configured or not enabled');
     }
     if (Tinebase_User::getConfiguredBackend() === Tinebase_User::ACTIVEDIRECTORY) {
         // error: Zend_Ldap_Exception: 0x44 (Already exists; 00002071: samldb: Account name (sAMAccountName)
         // 'tine20phpunituser' already in use!): adding: cn=PHPUnit User Tine 2.0,cn=Users,dc=example,dc=org
         $this->markTestSkipped('skipped for ad backends as it does not allow duplicate CNs');
     }
     $this->_backend = Tinebase_EmailUser::getInstance(Tinebase_Config::IMAP);
     $personas = Zend_Registry::get('personas');
     $this->_objects['user'] = clone $personas['jsmith'];
     //$this->_objects['user']->setId(Tinebase_Record_Abstract::generateUID());
     $this->_objects['addedUsers'] = array();
     $this->_objects['fullUsers'] = array();
 }
 /**
  * inspect get user by property
  * 
  * @param Tinebase_Model_User  $_user  the user object
  */
 public function inspectGetUserByProperty(Tinebase_Model_User $_user)
 {
     if (!$_user instanceof Tinebase_Model_FullUser) {
         return;
     }
     // convert data to Tinebase_Model_EmailUser
     $emailUser = $this->_rawDataToRecord(array());
     if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) {
         Tinebase_Core::getLogger()->trace(__METHOD__ . '::' . __LINE__ . ' ' . print_r($emailUser->toArray(), TRUE));
     }
     $emailUser->emailUsername = $this->_getEmailUserName($_user);
     if ($this instanceof Tinebase_EmailUser_Smtp_Interface) {
         $_user->smtpUser = $emailUser;
         $_user->emailUser = Tinebase_EmailUser::merge($_user->emailUser, clone $_user->smtpUser);
     } else {
         $_user->imapUser = $emailUser;
         $_user->emailUser = Tinebase_EmailUser::merge(clone $_user->imapUser, $_user->emailUser);
     }
 }
 /**
  * Returns a user object with raw data from ldap
  *
  * @param Tinebase_Model_User $_user
  * @param array $_ldapEntry
  * @return Tinebase_Record_Abstract
  */
 protected function _ldap2User(Tinebase_Model_User $_user, array &$_ldapEntry)
 {
     $smtpUser = parent::_ldap2User($_user, $_ldapEntry);
     $emailAliases = array();
     $allowedDomains = explode(',', Tinebase_EmailUser::getConfig(Tinebase_Config::SMTP)['secondarydomains']);
     if (isset($_ldapEntry['mail'])) {
         foreach ($_ldapEntry['mail'] as $mail) {
             if (isset($_user['accountEmailAddress']) && $_user['accountEmailAddress'] != $mail) {
                 in_array(substr(strrchr($mail, "@"), 1), $allowedDomains) ? $emailAliases[] = $mail : ($this->_unmanagedMailAdresses[] = $mail);
             }
         }
     }
     $smtpUser['emailAliases'] = $emailAliases;
     $smtpUser['emailForwardOnly'] = null;
     $smtpUser['emailForwards'] = array();
     if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) {
         Tinebase_Core::getLogger()->trace(__METHOD__ . '::' . __LINE__ . ' ' . print_r($smtpUser, true));
     }
     return $smtpUser;
 }
 /**
  * inspect get user by property
  * 
  * @param  Tinebase_Model_User  $_user  the user object
  */
 public function inspectGetUserByProperty(Tinebase_Model_User $_user)
 {
     if (!$_user instanceof Tinebase_Model_FullUser) {
         return;
     }
     $userId = $_user->getId();
     $select = $this->_getSelect();
     if ($this->_hasTine20Userid === true) {
         $select->where($this->_db->quoteIdentifier($this->_propertyMapping['emailUserId']) . ' = ?', $userId);
     } else {
         $select->where($this->_db->quoteIdentifier($this->_propertyMapping['emailUserId']) . ' = ?', $this->_convertToInt($userId));
     }
     if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) {
         Tinebase_Core::getLogger()->trace(__METHOD__ . '::' . __LINE__ . ' ' . $select->__toString());
     }
     // Perferom query - retrieve user from database
     $stmt = $this->_db->query($select);
     $queryResult = $stmt->fetch();
     $stmt->closeCursor();
     if (!$queryResult) {
         if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) {
             Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . 'Dbmail config for user ' . $userId . ' not found!');
         }
         return;
     }
     #if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' ' . print_r($queryResult, TRUE));
     // convert data to Tinebase_Model_EmailUser
     $emailUser = $this->_rawDataToRecord($queryResult);
     #if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' ' . print_r($emailUser->toArray(), TRUE));
     // modify/correct user name
     // set emailUsername to Tine accout login name and append domain for login purposes if set
     $emailUser->emailUsername = $this->_appendDomain($_user->accountLoginName);
     $_user->imapUser = $emailUser;
     $_user->emailUser = Tinebase_EmailUser::merge(clone $_user->imapUser, isset($_user->emailUser) ? $_user->emailUser : null);
 }
 /**
  * Check for smtp domains in registry
  *
  * @see 0010305: Undefined value in user edit dialog
  */
 public function testRegistryForSMTP()
 {
     $smtpConfig = Tinebase_EmailUser::getConfig(Tinebase_Config::SMTP);
     $primaryDomainConfig = Tinebase_EmailUser::manages(Tinebase_Config::SMTP) && isset($smtpConfig['primarydomain']) ? $smtpConfig['primarydomain'] : '';
     $secondaryDomainConfig = Tinebase_EmailUser::manages(Tinebase_Config::SMTP) && isset($smtpConfig['secondarydomains']) ? $smtpConfig['secondarydomains'] : '';
     $registryData = $this->_json->getRegistryData();
     $this->assertEquals($registryData['primarydomain'], $primaryDomainConfig);
     $this->assertEquals($registryData['secondarydomains'], $secondaryDomainConfig);
 }
예제 #11
0
 /**
  * inspect get user by property
  * 
  * @param Tinebase_Model_User  $_user  the user object
  */
 public function inspectGetUserByProperty(Tinebase_Model_User $_user)
 {
     if (!$_user instanceof Tinebase_Model_FullUser) {
         return;
     }
     $imap = $this->_getImapConnection();
     $mailboxString = $this->_getUserMailbox($_user->accountLoginName);
     $quota = $imap->getQuotaRoot($mailboxString);
     $emailUser = new Tinebase_Model_EmailUser(array('emailUsername' => $this->_appendDomain($_user->accountLoginName), 'emailUserId' => $this->_appendDomain($_user->accountLoginName), 'emailMailQuota' => isset($quota['STORAGE']) ? round($quota['STORAGE']['limit'] / 1024) : null, 'emailMailSize' => isset($quota['STORAGE']) ? round($quota['STORAGE']['usage'] / 1024) : null));
     if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) {
         Tinebase_Core::getLogger()->trace(__METHOD__ . '::' . __LINE__ . ' ' . print_r($emailUser->toArray(), TRUE));
     }
     $_user->imapUser = $emailUser;
     $_user->emailUser = Tinebase_EmailUser::merge(clone $_user->imapUser, isset($_user->emailUser) ? $_user->emailUser : null);
 }
 /**
  * (non-PHPdoc)
  * @see Tinebase_User_Plugin_LdapAbstract::inspectGetUserByProperty()
  */
 public function inspectGetUserByProperty(Tinebase_Model_User $_user, array &$_ldapEntry)
 {
     if (!$_user instanceof Tinebase_Model_FullUser) {
         return;
     }
     $user = $this->_ldap2User($_user, $_ldapEntry);
     if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) {
         Tinebase_Core::getLogger()->trace(__METHOD__ . '::' . __LINE__ . ' ' . print_r($user->toArray(), TRUE));
     }
     if ($this instanceof Tinebase_EmailUser_Ldap) {
         // TODO this should be moved to Tinebase_EmailUser_Ldap
         // modify/correct user name
         // set emailUsername to Tine 2.0 account login name and append domain for login purposes if set
         if (is_object($user) && empty($user->emailUsername)) {
             $user->emailUsername = $this->_getEmailUserName($_user);
         }
         if ($this instanceof Tinebase_EmailUser_Smtp_Interface) {
             $_user->smtpUser = $user;
             $_user->emailUser = Tinebase_EmailUser::merge($_user->emailUser, clone $_user->smtpUser);
         } else {
             $_user->imapUser = $user;
             $_user->emailUser = Tinebase_EmailUser::merge(clone $_user->imapUser, $_user->emailUser);
         }
     }
 }
 /**
  * testForwardedAlias
  * 
  * @see 0007066: postfix email user: allow wildcard alias forwarding
  */
 public function testForwardedAlias()
 {
     $user = $this->testAddUser();
     // check destinations
     $db = Tinebase_EmailUser::getInstance(Tinebase_Config::SMTP)->getDb();
     $select = $db->select()->from(array('smtp_destinations'))->where($db->quoteIdentifier('userid') . ' = ?', $user->getId());
     $stmt = $db->query($select);
     $queryResult = $stmt->fetchAll();
     $stmt->closeCursor();
     $this->assertEquals(6, count($queryResult), print_r($queryResult, TRUE));
     $expectedDestinations = array('bla@' . $this->_mailDomain => array('unittest@' . $this->_mailDomain, 'test@' . $this->_mailDomain), 'blubb@' . $this->_mailDomain => array('unittest@' . $this->_mailDomain, 'test@' . $this->_mailDomain), 'phpunit@' . $this->_mailDomain => array('unittest@' . $this->_mailDomain, 'test@' . $this->_mailDomain));
     foreach ($expectedDestinations as $source => $destinations) {
         $foundDestinations = array();
         foreach ($queryResult as $row) {
             if ($row['source'] === $source) {
                 $foundDestinations[] = $row['destination'];
             }
         }
         $this->assertEquals(2, count($foundDestinations));
         $this->assertTrue($foundDestinations == $destinations, print_r($destinations, TRUE));
     }
 }
 /**
  * the constructor 
  *
  */
 public function __construct(array $_options = array())
 {
     $config = Tinebase_EmailUser::getConfig(Tinebase_Config::SMTP);
     if ($this->_simpleMailConfig === null && isset($config['simplemail']) && isset($config['simplemail']['base'])) {
         // load default values = simplemail scheme
         $this->_issetOrDefault($config['simplemail']['storage_base'], $config['simplemail']['base']);
         $this->_issetOrDefault($config['simplemail']['storage_rdn'], "cn=%u{tine20}");
         $this->_issetOrDefault($config['simplemail']['property_mapping'], array('emailAliases' => "mailalternateaddress", 'emailForwards' => "mailforwardingaddress", 'emailForwardOnly' => "maildiscard:boolean"));
         $this->_issetOrDefault($config['simplemail']['skeleton'], array('objectclass' => array("simplemail", "mailrouting"), 'mailUserDN' => "%s"));
         $this->_issetOrDefault($config['simplemail']['readonly'], false);
         $this->_issetOrDefault($config['simplemail']['scope'], Zend_Ldap::SEARCH_SCOPE_SUB);
         $this->_simpleMailConfig = $config['simplemail'];
         $this->_propertyMapping = $config['simplemail']['property_mapping'];
         $this->_ldap = new Tinebase_Ldap(Tinebase_User::getBackendConfiguration());
         #$this->_ldap->connect()->bind();
     } else {
         $this->_simpleMailConfig = NULL;
         if (Tinebase_Core::isLogLevel(Zend_Log::ERR)) {
             Tinebase_Core::getLogger()->err(__METHOD__ . '::' . __LINE__ . '  SMTP config: simpleMail is missing ldap base!');
         }
     }
 }
예제 #15
0
 /**
  * Returns a user object with raw data from ldap
  *
  * @param array $_userData
  * @param string $_accountClass
  * @return Tinebase_Record_Abstract
  * 
  * @todo add generic function for this in Tinebase_User_Ldap or Tinebase_Ldap?
  */
 protected function _ldap2User(Tinebase_Model_User $_user, array &$_ldapEntry)
 {
     #if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' ' . print_r($_ldapEntry, true));
     if ($this->_backendType == Tinebase_Config::SMTP) {
         $accountArray = array('emailForwardOnly' => false, 'emailAliases' => array(), 'emailForwards' => array());
     } else {
         $accountArray = array();
     }
     foreach ($_ldapEntry as $key => $value) {
         if (is_int($key)) {
             continue;
         }
         $keyMapping = array_search($key, $this->_propertyMapping);
         if ($keyMapping !== FALSE) {
             switch ($keyMapping) {
                 case 'emailMailQuota':
                     // convert to megabytes
                     $accountArray[$keyMapping] = convertToMegabytes($value[0]);
                     break;
                 case 'emailAliases':
                 case 'emailForwards':
                     $accountArray[$keyMapping] = $value;
                     break;
                 case 'emailForwardOnly':
                     $accountArray[$keyMapping] = $value[0] == 'forwardonly' ? true : false;
                     break;
                 default:
                     $accountArray[$keyMapping] = $value[0];
                     break;
             }
         }
     }
     if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) {
         Tinebase_Core::getLogger()->trace(__METHOD__ . '::' . __LINE__ . ' ' . print_r($accountArray, true));
     }
     if ($this->_backendType == Tinebase_Config::SMTP) {
         $_user->smtpUser = new Tinebase_Model_EmailUser($accountArray);
         $_user->emailUser = Tinebase_EmailUser::merge(isset($_user->emailUser) ? $_user->emailUser : null, $_user->smtpUser);
     } else {
         $_user->imapUser = new Tinebase_Model_EmailUser($accountArray);
         $_user->emailUser = Tinebase_EmailUser::merge(clone $_user->imapUser, isset($_user->emailUser) ? $_user->emailUser : null);
     }
 }
 /**
  * return an instance of the current user backend
  *
  * @param   string $backendType name of the user backend
  * @return  Tinebase_User_Abstract
  * @throws  Tinebase_Exception_InvalidArgument
  */
 public static function factory($backendType)
 {
     $options = self::getBackendConfiguration();
     // this is a dangerous TRACE as there might be passwords in here!
     //if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) Tinebase_Core::getLogger()->trace(__METHOD__ . '::' . __LINE__ . ' '
     //    . print_r($options, TRUE));
     $options['plugins'] = array();
     // manage email user settings
     if (Tinebase_EmailUser::manages(Tinebase_Config::IMAP)) {
         try {
             $options['plugins'][] = Tinebase_EmailUser::getInstance(Tinebase_Config::IMAP);
         } catch (Exception $e) {
             if (Tinebase_Core::isLogLevel(Zend_Log::ERR)) {
                 Tinebase_Core::getLogger()->err(__METHOD__ . '::' . __LINE__ . ' Could not add IMAP EmailUser plugin: ' . $e);
             }
         }
     }
     if (Tinebase_EmailUser::manages(Tinebase_Config::SMTP)) {
         try {
             $options['plugins'][] = Tinebase_EmailUser::getInstance(Tinebase_Config::SMTP);
         } catch (Exception $e) {
             if (Tinebase_Core::isLogLevel(Zend_Log::ERR)) {
                 Tinebase_Core::getLogger()->err(__METHOD__ . '::' . __LINE__ . ' Could not add SMTP EmailUser plugin: ' . $e);
             }
         }
     }
     switch ($backendType) {
         case self::ACTIVEDIRECTORY:
             $result = new Tinebase_User_ActiveDirectory($options);
             break;
         case self::LDAP:
             // manage samba sam?
             if (isset(Tinebase_Core::getConfig()->samba) && Tinebase_Core::getConfig()->samba->get('manageSAM', FALSE) == true) {
                 $options['plugins'][] = new Tinebase_User_Plugin_Samba(Tinebase_Core::getConfig()->samba->toArray());
             }
             $result = new Tinebase_User_Ldap($options);
             break;
         case self::SQL:
             $result = new Tinebase_User_Sql($options);
             break;
         case self::TYPO3:
             $result = new Tinebase_User_Typo3($options);
             break;
         default:
             throw new Tinebase_Exception_InvalidArgument("User backend type {$backendType} not implemented.");
     }
     if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) {
         Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' Created user backend of type ' . $backendType);
     }
     return $result;
 }
 /**
  * inspect get user by property
  * 
  * @param Tinebase_Model_User  $_user  the user object
  */
 public function inspectGetUserByProperty(Tinebase_Model_User $_user)
 {
     if (!$_user instanceof Tinebase_Model_FullUser) {
         return;
     }
     $userId = $_user->getId();
     $select = $this->_getSelect()->where($this->_db->quoteIdentifier($this->_userTable . '.' . $this->_propertyMapping['emailUserId']) . ' = ?', $userId);
     // Perform query - retrieve user from database
     $stmt = $this->_db->query($select);
     $queryResult = $stmt->fetch();
     $stmt->closeCursor();
     if (!$queryResult) {
         if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) {
             Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' ' . $this->_subconfigKey . ' config for user ' . $userId . ' not found!');
         }
     }
     if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) {
         Tinebase_Core::getLogger()->trace(__METHOD__ . '::' . __LINE__ . ' ' . print_r($queryResult, TRUE));
     }
     // convert data to Tinebase_Model_EmailUser
     $emailUser = $this->_rawDataToRecord((array) $queryResult);
     if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) {
         Tinebase_Core::getLogger()->trace(__METHOD__ . '::' . __LINE__ . ' ' . print_r($emailUser->toArray(), TRUE));
     }
     // modify/correct user name
     // set emailUsername to Tine 2.0 account login name and append domain for login purposes if set
     if (empty($emailUser->emailUsername)) {
         $emailUser->emailUsername = $this->_getEmailUserName($_user);
     }
     if ($this instanceof Tinebase_EmailUser_Smtp_Interface) {
         $_user->smtpUser = $emailUser;
         $_user->emailUser = Tinebase_EmailUser::merge($_user->emailUser, clone $_user->smtpUser);
     } else {
         $_user->imapUser = $emailUser;
         $_user->emailUser = Tinebase_EmailUser::merge(clone $_user->imapUser, $_user->emailUser);
     }
 }
예제 #18
0
 /**
  * return an instance of the current user backend
  *
  * @param   string $backendType name of the user backend
  * @return  Tinebase_User_Abstract
  * @throws  Tinebase_Exception_InvalidArgument
  */
 public static function factory($backendType)
 {
     $options = self::getBackendConfiguration();
     if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) {
         Tinebase_Core::getLogger()->trace(__METHOD__ . '::' . __LINE__ . ' ' . print_r($options, TRUE));
     }
     $options['plugins'] = array();
     // manage email user settings
     if (Tinebase_EmailUser::manages(Tinebase_Config::IMAP)) {
         $options['plugins'][] = Tinebase_EmailUser::getInstance(Tinebase_Config::IMAP);
     }
     if (Tinebase_EmailUser::manages(Tinebase_Config::SMTP)) {
         $options['plugins'][] = Tinebase_EmailUser::getInstance(Tinebase_Config::SMTP);
     }
     switch ($backendType) {
         case self::LDAP:
             // manage samba sam?
             if (isset(Tinebase_Core::getConfig()->samba) && Tinebase_Core::getConfig()->samba->get('manageSAM', FALSE) == true) {
                 $options['plugins'][] = new Tinebase_User_Plugin_Samba(Tinebase_Core::getConfig()->samba->toArray());
             }
             $result = new Tinebase_User_Ldap($options);
             break;
         case self::SQL:
             $result = new Tinebase_User_Sql($options);
             break;
         case self::TYPO3:
             $result = new Tinebase_User_Typo3($options);
             break;
         default:
             throw new Tinebase_Exception_InvalidArgument("User backend type {$backendType} not implemented.");
     }
     if (Tinebase_Core::isLogLevel(Zend_Log::INFO)) {
         Tinebase_Core::getLogger()->info(__METHOD__ . '::' . __LINE__ . ' Created user backend of type ' . $backendType);
     }
     return $result;
 }