- my ($userid, $borrowerid, $digest) = @_;
- $debug and print STDERR "changing local password for borrowernumber=$borrowerid to '$digest'\n";
- changepassword($userid, $borrowerid, $digest);
-
- # Confirm changes
- my $sth = C4::Context->dbh->prepare("SELECT password,cardnumber FROM borrowers WHERE borrowernumber=? ");
- $sth->execute($borrowerid);
- if ($sth->rows) {
- my ($md5password, $cardnum) = $sth->fetchrow;
- ($digest eq $md5password) and return $cardnum;
- warn "Password mismatch after update to cardnumber=$cardnum (borrowernumber=$borrowerid)";
- return;
- }
- die "Unexpected error after password update to userid/borrowernumber: $userid / $borrowerid.";
+ my ($userid, $borrowerid, $password) = @_;
+
+ if ( exists( $ldap->{update_password} ) && !$ldap->{update_password} ) {
+
+ # We don't store the password in the database
+ my $sth = C4::Context->dbh->prepare(
+ 'SELECT cardnumber FROM borrowers WHERE borrowernumber=?');
+ $sth->execute($borrowerid);
+ die "Unable to access borrowernumber "
+ . "with userid=$userid, "
+ . "borrowernumber=$borrowerid"
+ if !$sth->rows;
+ my ($cardnum) = $sth->fetchrow;
+ $sth = C4::Context->dbh->prepare(
+ 'UPDATE borrowers SET password = null WHERE borrowernumber=?');
+ $sth->execute($borrowerid);
+ return $cardnum;
+ }
+
+ my $digest = hash_password($password);
+ #warn "changing local password for borrowernumber=$borrowerid to '$digest'\n";
+ Koha::Patrons->find($borrowerid)->set_password({ password => $password, skip_validation => 1 });
+
+ my ($ok, $cardnum) = checkpw_internal(C4::Context->dbh, $userid, $password);
+ return $cardnum if $ok;
+
+ warn "Password mismatch after update to borrowernumber=$borrowerid";
+ return;