From 7cf695517efa17b200f31ed4c934af8839153e44 Mon Sep 17 00:00:00 2001
From: "mkanat%bugzilla.org" <>
Date: Fri, 14 Dec 2007 23:40:57 +0000
Subject: Bug 229049: Make LDAP authentication work when there are multiple
 mail= attributes for an account. Patch By Emmanuel Seyman
 <eseyman@linagora.com> r=mkanat, a=mkanat

---
 Bugzilla/Auth/Verify/LDAP.pm | 18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)

(limited to 'Bugzilla/Auth/Verify')

diff --git a/Bugzilla/Auth/Verify/LDAP.pm b/Bugzilla/Auth/Verify/LDAP.pm
index 0176abdcb..b8dff397f 100644
--- a/Bugzilla/Auth/Verify/LDAP.pm
+++ b/Bugzilla/Auth/Verify/LDAP.pm
@@ -37,6 +37,7 @@ use fields qw(
 
 use Bugzilla::Constants;
 use Bugzilla::Error;
+use Bugzilla::User;
 use Bugzilla::Util;
 
 use Net::LDAP;
@@ -90,7 +91,22 @@ sub check_credentials {
                      details => {attr => $mail_attr} };
         }
 
-        $params->{bz_username} = $user_entry->get_value($mail_attr);
+        my @emails = $user_entry->get_value($mail_attr);
+
+        # Default to the first email address returned.
+        $params->{bz_username} = $emails[0];
+
+        if (@emails > 1) {
+            # Cycle through the adresses and check if they're Bugzilla logins.
+            # Use the first one that returns a valid id. 
+            foreach my $email (@emails) {
+                if ( login_to_id($email) ) {
+                    $params->{bz_username} = $email;
+                    last;
+                }
+            }
+        }
+
     } else {
         $params->{bz_username} = $username;
     }
-- 
cgit v1.2.1