Use global filters and bind username/ for Ldap searches (#1484159)

release-0.6
thomascube 17 years ago
parent 02342ffdd1
commit e3caaf59c2

@ -3,9 +3,11 @@ CHANGELOG RoundCube Webmail
2007/05/17 (thomasb)
----------
- Updated Catalan, Russian, and Chinese translations
- Updated Catalan, Russian, Portuguese and Chinese translations
- Renamed localization folder for Chinese (Big5)
- Chanegd Slovenian language code from 'si' to 'sl'
- Added Sinhala (Sri-Lanka) localization
- Use global filters and bind username/ for Ldap searches (#1484159)
2007/05/13 (thomasb)

@ -197,10 +197,13 @@ $rcmail_config['mail_header_delimiter'] = NULL;
* 'hosts' => array('directory.verisign.com'),
* 'port' => 389,
* 'base_dn' => '',
* 'bind_dn' => '',
* 'bind_pass' => '',
* 'search_fields' => array('mail', 'cn'), // fields to search in
* 'name_field' => 'cn', // this field represents the contact's name
* 'email_field' => 'mail', // this field represents the contact's e-mail
* 'scope' => 'sub', // search mode: sub|base|list
* 'filter' => '', // will be &'d with search field ex: (status=act)
* 'fuzzy_search' => true); // server allows wildcard search
*/

@ -93,45 +93,37 @@ class rcube_ldap
}
if (is_resource($this->conn))
{
$this->ready = true;
if (!empty($this->prop['bind_dn']) && !empty($this->prop['bind_pass']))
$this->ready = $this->bind($this->prop['bind_dn'], $this->prop['bind_pass']);
}
else
raise_error(array('type' => 'ldap', 'message' => "Could not connect to any LDAP server, tried $host:{$this->prop[port]} last"), true);
}
/**
* Merge with connect()?
* Bind connection with DN and password
*/
function bind($dn=null, $pass=null)
function bind($dn, $pass)
{
if ($this->conn)
if (!$this->conn)
return false;
if (@ldap_bind($this->conn, $dn, $pass))
return true;
else
{
if ($dn)
{
if (@ldap_bind($this->conn, $dn, $pass))
return true;
else
raise_error(array('code' => ldap_errno($this->conn),
'type' => 'ldap',
'message' => "Bind failed for dn=$dn: ".ldap_error($this->conn)),
true);
}
else
{
if (@ldap_bind($this->conn))
return true;
else
raise_error(array('code' => ldap_errno($this->conn),
'type' => 'ldap',
'message' => "Anonymous bind failed: ".ldap_error($this->conn)),
true);
}
raise_error(array(
'code' => ldap_errno($this->conn),
'type' => 'ldap',
'message' => "Bind failed for dn=$dn: ".ldap_error($this->conn)),
true);
}
else
raise_error(array('type' => 'ldap', 'message' => "Attempted bind on nonexistent connection"), true);
return false;
}
}
/**
@ -270,6 +262,10 @@ class rcube_ldap
$filter .= "($f=$wc" . rcube_ldap::quote_string($value) . "$wc)";
}
$filter .= ')';
// add general filter to query
if (!empty($this->prop['filter']))
$filter = '(&'.$this->prop['filter'] . $filter . ')';
// set filter string and execute search
$this->set_search_set($filter);
@ -385,7 +381,7 @@ class rcube_ldap
if ($this->conn && $this->filter)
{
$function = $this->prop['scope'] == 'sub' ? 'ldap_search' : ($this->prop['scope'] == 'base' ? 'ldap_read' : 'ldap_list');
$this->ldap_result = @$function($this->conn, $this->prop['base_dn'], $this->filter, array_values($this->fieldmap), 0, 0);
$this->ldap_result = $function($this->conn, $this->prop['base_dn'], $this->filter, array_values($this->fieldmap), 0, 0);
return true;
}
else

Loading…
Cancel
Save