egroupware_official/emailadmin/inc/class.emailadmin_smtp_ads.inc.php
Ralf Becker 3e40eaf0cb * API/Addressbook/EMailAdmin: full support for active directory as account storage, tested with Samba4 and win2008r2
Trunk commits r42507, r42545, r42556, r42557, r42612, r42630
plugin to support Active Directory to store email configuration (in proxyAddresses attribute, no Exchange schema and support!), also fully autodetecting plugins now in emailadmin/inc directory
2013-06-06 07:21:42 +00:00

167 lines
4.1 KiB
PHP

<?php
/**
* EGroupware EMailAdmin: Postfix using Active Directorys Exchange attributes
*
* @link http://www.egroupware.org
* @package emailadmin
* @author Ralf Becker <RalfBecker-AT-outdoor-training.de>
* @copyright (c) 2013 by Ralf Becker <RalfBecker-AT-outdoor-training.de>
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
* @version $Id$
*/
/**
* Postfix using Active Directorys proxyAddresses attribute
* (available without installing Exchange schemas).
*
* This plugin is NOT meant to administrate an Exchange Server using AD!
*
* Aliases, forwards, forward only and quota is stored in
* multivalued attribute proxyAddresses with different prefixes.
*
* Primary mail address is additionally stored in proxyAddresses.
* Disabling mail removes proxyAddresses completly.
*
* @link http://msdn.microsoft.com/en-us/library/ms679424(v=vs.85).aspx
* @link http://www.dovecot.org/list/dovecot/2010-February/046763.html
*/
class emailadmin_smtp_ads extends emailadmin_smtp_ldap
{
/**
* Label shown in EMailAdmin
*/
const DESCRIPTION = 'Active Directory';
/**
* Capabilities of this class (pipe-separated): default, forward
*/
const CAPABILITIES = 'default|forward';
/**
* Name of schema, has to be in the right case!
*/
const SCHEMA = 'top';
/**
* Filter for users
*
* objectCategory is indexed, while objectclass is not!
*/
const USER_FILTER = '(objectCategory=person)';
/**
* Name of schema for groups, has to be in the right case!
*/
const GROUP_SCHEMA = 'group';
/**
* Attribute to enable mail for an account, OR false if existence of ALIAS_ATTR is enough for mail delivery
*/
const MAIL_ENABLE_ATTR = false;
/**
* Attribute for aliases OR false to use mail
*/
const ALIAS_ATTR = 'proxyaddresses';
/**
* Caseinsensitive prefix for aliases (eg. "smtp:"), aliases get added with it and only aliases with it are reported
*/
const ALIAS_PREFIX = 'smtp:';
/**
* Primary mail address required as an alias too: true or false
*/
const REQUIRE_MAIL_AS_ALIAS = true;
/**
* Attribute for forwards OR false if not possible
*/
const FORWARD_ATTR = 'proxyaddresses';
/**
* Caseinsensitive prefix for forwards (eg. "forward:"), forwards get added with it and only forwards with it are reported
*/
const FORWARD_PREFIX = 'forward:';
/**
* Attribute to only forward mail, OR false if not available
*/
const FORWARD_ONLY_ATTR = 'proxyaddresses';
/**
* Value of forward-only attribute, if not set any value will switch forward only on (checked with =*)
*/
const FORWARD_ONLY_VALUE = 'forwardOnly';
/**
* Attribute for mailbox, to which mail gets delivered OR false if not supported
*/
const MAILBOX_ATTR = false;
/**
* Attribute for quota limit of user in MB
*/
const QUOTA_ATTR = 'proxyaddresses';
/**
* Caseinsensitive prefix for quota (eg. "quota:"), quota get added with it and only quota with it are reported
*/
const QUOTA_PREFIX = 'quota:';
/**
* Internal quota in MB is multiplicated with this factor before stored in LDAP
*/
const QUOTA_FACTOR = 1048576;
/**
* Attribute for user name
*/
const USER_ATTR = 'samaccountname';
/**
* Attribute for numeric user id (optional)
*
* No single uidNumber attribute, as we use RID (last part of objectSid attribute) for it.
*/
const USERID_ATTR = false;
/**
* Return LDAP connection
*/
protected function getLdapConnection()
{
static $ldap;
if (is_null($ldap))
{
if (!is_a($GLOBALS['egw']->accounts->backend, 'accounts_ads'))
{
throw new egw_exception_wrong_userinput('Postfix with Active Directory requires accounts stored in ADS!');
}
$ldap = $GLOBALS['egw']->accounts->backend->ldap_connection();
}
return $ldap;
}
/**
* Constructor
*
* @param string $defaultDomain=null
*/
function __construct($defaultDomain=null)
{
parent::__construct($defaultDomain);
$this->setBase($GLOBALS['egw']->accounts->backend->ads_context());
}
/**
* Return description for EMailAdmin
*
* @return string
*/
public static function description()
{
return static::DESCRIPTION;
}
}