use C4::Debug;
use C4::Context;
-use C4::Members qw(AddMember changepassword);
+use C4::Members qw(AddMember);
use C4::Members::Attributes;
use C4::Members::AttributeTypes;
use C4::Members::Messaging;
use C4::Auth qw(checkpw_internal);
+use Koha::Patrons;
use Koha::AuthUtils qw(hash_password);
use List::MoreUtils qw( any );
use Net::LDAP;
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";
#$debug and $db->debug(5);
my $userldapentry;
+ # first, LDAP authentication
if ( $ldap->{auth_by_bind} ) {
my $principal_name;
if ( $ldap->{anonymous_bind} ) {
$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.
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
next;
}
if (C4::Members::Attributes::CheckUniqueness($code, $borrower{$code}, $borrowernumber)) {
- C4::Members::Attributes::UpdateBorrowerAttribute($borrowernumber, {code => $code, value => $borrower{$code}});
+ C4::Members::Attributes::UpdateBorrowerAttribute($borrowernumber, {code => $code, attribute => $borrower{$code}});
} else {
warn "ERROR_extended_unique_id_failed $code $borrower{$code}";
}
my $digest = hash_password($password);
$debug and print STDERR "changing local password for borrowernumber=$borrowerid to '$digest'\n";
- changepassword($userid, $borrowerid, $digest);
+ Koha::Patrons->find($borrowerid)->update_password( $userid, $digest );
my ($ok, $cardnum) = checkpw_internal(C4::Context->dbh, $userid, $password);
return $cardnum if $ok;