exit(1);
}
-require_once INSTALLDIR.'/plugins/Authorization/AuthorizationPlugin.php';
require_once 'Net/LDAP2.php';
class LdapAuthorizationPlugin extends AuthorizationPlugin
public $scope=null;
public $provider_name = null;
public $uniqueMember_attribute = null;
- public $roles_to_groups = null;
+ public $roles_to_groups = array();
public $login_group = null;
public $attributes = array();
function onInitializePlugin(){
- parent::onInitializePlugin();
if(!isset($this->host)){
throw new Exception("must specify a host");
}
if(!isset($this->uniqueMember_attribute)){
throw new Exception("uniqueMember_attribute must be set.");
}
- if(!isset($this->roles_to_groups)){
- throw new Exception("roles_to_groups must be set.");
- }
if(!isset($this->attributes['username'])){
throw new Exception("username attribute must be set.");
}
if(isset($this->login_group)){
if(is_array($this->login_group)){
foreach($this->login_group as $group){
- if($this->isMemberOfGroup($entry->dn(),$group)){
+ if($this->ldap_is_dn_member_of_group($entry->dn(),$group)){
return true;
}
}
}else{
- if($this->isMemberOfGroup($entry->dn(),$this->login_group)){
+ if($this->ldap_is_dn_member_of_group($entry->dn(),$this->login_group)){
return true;
}
}
if(isset($this->roles_to_groups[$name])){
if(is_array($this->roles_to_groups[$name])){
foreach($this->roles_to_groups[$name] as $group){
- if($this->isMemberOfGroup($entry->dn(),$group)){
+ if($this->ldap_is_dn_member_of_group($entry->dn(),$group)){
return true;
}
}
}else{
- if($this->isMemberOfGroup($entry->dn(),$this->roles_to_groups[$name])){
+ if($this->ldap_is_dn_member_of_group($entry->dn(),$this->roles_to_groups[$name])){
return true;
}
}
return false;
}
- function isMemberOfGroup($userDn, $groupDn)
+ function ldap_is_dn_member_of_group($userDn, $groupDn)
{
- $ldap = ldap_get_connection();
+ $ldap = $this->ldap_get_connection();
$link = $ldap->getLink();
$r = ldap_compare($link, $groupDn, $this->uniqueMember_attribute, $userDn);
if ($r === true){
//-----the below function were copied from LDAPAuthenticationPlugin. They will be moved to a utility class soon.----\\
function ldap_get_connection($config = null){
- if($config == null){
- $config = $this->ldap_get_config();
+ if($config == null && isset($this->default_ldap)){
+ return $this->default_ldap;
}
//cannot use Net_LDAP2::connect() as StatusNet uses
//PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, 'handleError');
//PEAR handling can be overridden on instance objects, so we do that.
- $ldap = new Net_LDAP2($config);
+ $ldap = new Net_LDAP2(isset($config)?$config:$this->ldap_get_config());
$ldap->setErrorHandling(PEAR_ERROR_RETURN);
$err=$ldap->bind();
if (Net_LDAP2::isError($err)) {
- common_log(LOG_WARNING, 'Could not connect to LDAP server: '.$err->getMessage());
+ throw new Exception('Could not connect to LDAP server: '.$err->getMessage());
return false;
}
+ if($config == null) $this->default_ldap=$ldap;
return $ldap;
}
if($ldap==null) {
$ldap = $this->ldap_get_connection();
}
+ if(! $ldap) {
+ throw new Exception("Could not connect to LDAP");
+ }
$filter = Net_LDAP2_Filter::create($this->attributes['username'], 'equals', $username);
$options = array(
'attributes' => $attributes
return false;
}
}
+
+ function onPluginVersion(&$versions)
+ {
+ $versions[] = array('name' => 'LDAP Authorization',
+ 'version' => STATUSNET_VERSION,
+ 'author' => 'Craig Andrews',
+ 'homepage' => 'http://status.net/wiki/Plugin:LdapAuthorization',
+ 'rawdescription' =>
+ _m('The LDAP Authorization plugin allows for StatusNet to handle authorization through LDAP.'));
+ return true;
+ }
}