summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG4
-rw-r--r--config/main.inc.php.dist3
-rw-r--r--program/include/rcube_ldap.inc52
3 files changed, 30 insertions, 29 deletions
diff --git a/CHANGELOG b/CHANGELOG
index a42c2a62c..0275606cf 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -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)
diff --git a/config/main.inc.php.dist b/config/main.inc.php.dist
index 894dfa4d8..d11888dc3 100644
--- a/config/main.inc.php.dist
+++ b/config/main.inc.php.dist
@@ -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
*/
diff --git a/program/include/rcube_ldap.inc b/program/include/rcube_ldap.inc
index 06a99ad0b..055c346e1 100644
--- a/program/include/rcube_ldap.inc
+++ b/program/include/rcube_ldap.inc
@@ -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