Common subdirectories: ldap_integration/includes and ldap_new/includes
diff -up ldap_integration/ldapauth.admin.inc ldap_new/ldapauth.admin.inc
--- ldap_integration/ldapauth.admin.inc	2009-10-27 10:29:16.000000000 -0400
+++ ldap_new/ldapauth.admin.inc	2009-10-29 11:18:44.000000000 -0400
@@ -325,6 +325,22 @@ function ldapauth_admin_form(&$form_stat
     '#collapsible' => TRUE,
     '#collapsed' => FALSE,
   );
+
+  if ($edit['binddn'] == 'user') {
+    $userbind = TRUE;
+    $binddn = '';
+  }
+  else {
+    $userbind = FALSE;
+    $binddn = $edit['binddn'];
+  }
+
+  $form['advanced']['userbind'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Use credentials of user logging in for non-anonymous search'),
+    '#default_value' => $userbind,
+  );
+
   if (!$edit['bindpw']) {
     $form['advanced']['binddn'] =  array(
       '#type' => 'textfield',
@@ -389,6 +405,10 @@ function ldapauth_admin_form_validate($f
 function ldapauth_admin_form_submit($form, &$form_state) {
   $op = $form_state['clicked_button']['#value'];
   $values = $form_state['values'];
+  /* If user credentials will be used to bind, set binddn to 'user' */
+  if ($values['userbind']) {
+    $values['binddn'] = 'user';
+  }
   switch ($op) {
     case t('Save configuration'):
       if (!isset($values['sid'])) {
diff -up ldap_integration/ldapauth.module ldap_new/ldapauth.module
--- ldap_integration/ldapauth.module	2009-10-27 10:29:16.000000000 -0400
+++ ldap_new/ldapauth.module	2009-10-29 11:13:57.000000000 -0400
@@ -401,7 +401,7 @@ function _ldapauth_auth($name, $pass) {
       return FALSE;
 
     // Look up the user in LDAP.
-    if (!($ldap = _ldapauth_user_lookup($name)) || !isset($ldap['dn']))
+    if (!($ldap = _ldapauth_user_lookup($name, $pass)) || !isset($ldap['dn']))
       continue;
 
     // Filter users based on their LDAP data.
@@ -426,7 +426,7 @@ function _ldapauth_auth($name, $pass) {
  * @return
  *   An array with user's LDAP data or NULL if not found.
  */
-function _ldapauth_user_lookup($name) {
+function _ldapauth_user_lookup($name, $pass) {
   global $_ldapauth_ldap;
 
   if (!$_ldapauth_ldap)
@@ -436,7 +436,14 @@ function _ldapauth_user_lookup($name) {
   $login_name = ($code = _ldapauth_ldap_info($_ldapauth_ldap->getOption('sid'), 'login_php')) ? eval($code) : $name;
 
   // If there is no bindn and bindpw - the connect will be an anonymous connect.
-  $_ldapauth_ldap->connect($_ldapauth_ldap->getOption('binddn'), $_ldapauth_ldap->getOption('bindpw'));
+  // If binddn is set to user, we'll use the user credentials to bind
+  $binddn = $_ldapauth_ldap->getOption('binddn');
+  if ($binddn == 'user') {
+    $_ldapauth_ldap->connect($name, $pass);
+  } else {
+    $_ldapauth_ldap->connect($binddn, $_ldapauth_ldap->getOption('bindpw'));
+  }
+
   foreach (explode("\r\n", $_ldapauth_ldap->getOption('basedn')) as $base_dn) {
     if (empty($base_dn))
       continue;
Common subdirectories: ldap_integration/translations and ldap_new/translations
