Bug 6979 - Update tests
[koha_ffzg] / C4 / Auth_with_ldap.pm
index a58f4e6..8b75330 100644 (file)
@@ -60,6 +60,7 @@ my $prefhost  = $ldap->{hostname}     or die ldapserver_error('hostname');
 my $base      = $ldap->{base}          or die ldapserver_error('base');
 $ldapname     = $ldap->{user}          ;
 $ldappassword = $ldap->{pass}          ;
+$ldap->{anonymous_bind} = 1 unless $ldapname && $ldappassword;
 our %mapping  = %{$ldap->{mapping}}; # FIXME dpavlin -- don't die because of || (); from 6eaf8511c70eb82d797c941ef528f4310a15e9f9
 my @mapkeys = keys %mapping;
 $debug and print STDERR "Got ", scalar(@mapkeys), " ldap mapkeys (  total  ): ", join ' ', @mapkeys, "\n";
@@ -124,6 +125,7 @@ sub checkpw_ldap {
        #$debug and $db->debug(5);
     my $userldapentry;
 
+    # first, LDAP authentication
     if ( $ldap->{auth_by_bind} ) {
         my $principal_name;
         if ( $ldap->{anonymous_bind} ) {
@@ -175,18 +177,20 @@ sub checkpw_ldap {
             $userldapentry = $search->shift_entry;
         }
     } else {
-               my $res = ($config{anonymous}) ? $db->bind : $db->bind($ldapname, password=>$ldappassword);
+               my $res = ($ldap->{anonymous_bind}) ? $db->bind : $db->bind($ldapname, password=>$ldappassword);
                if ($res->code) {               # connection refused
                        warn "LDAP bind failed as ldapuser " . ($ldapname || '[ANONYMOUS]') . ": " . description($res);
                        return 0;
                }
         my $search = search_method($db, $userid) or return 0;   # warnings are in the sub
         $userldapentry = $search->shift_entry;
-               my $cmpmesg = $db->compare( $userldapentry, attr=>'userpassword', value => $password );
-               if ($cmpmesg->code != 6) {
-                       warn "LDAP Auth rejected : invalid password for user '$userid'. " . description($cmpmesg);
-                       return -1;
-               }
+        my $dn = $userldapentry->dn;
+        my $user_ldap_bind_ret = $db->bind($dn, password => $password);
+        if ($user_ldap_bind_ret->code) {
+            warn "LDAP Auth rejected : invalid password for user '$userid'. " . description($user_ldap_bind_ret);
+            return -1;
+        }
+
        }
 
     # To get here, LDAP has accepted our user's login attempt.
@@ -210,7 +214,7 @@ sub checkpw_ldap {
                return(1, $cardnumber, $local_userid);
         }
     } elsif ($config{replicate}) { # A2, C2
-        $borrowernumber = AddMember(%borrower) or die "AddMember failed";
+        $borrowernumber = C4::Members::AddMember(%borrower) or die "AddMember failed";
         C4::Members::Messaging::SetMessagingPreferencesFromDefaults( { borrowernumber => $borrowernumber, categorycode => $borrower{'categorycode'} } );
    } else {
         return 0;   # B2, D2