Lines 19-31
package C4::Auth_with_ldap;
Link Here
|
19 |
|
19 |
|
20 |
use strict; |
20 |
use strict; |
21 |
#use warnings; FIXME - Bug 2505 |
21 |
#use warnings; FIXME - Bug 2505 |
22 |
use Digest::MD5 qw(md5_base64); |
22 |
use Carp; |
23 |
|
23 |
|
24 |
use C4::Debug; |
24 |
use C4::Debug; |
25 |
use C4::Context; |
25 |
use C4::Context; |
26 |
use C4::Members qw(AddMember changepassword); |
26 |
use C4::Members qw(AddMember changepassword); |
27 |
use C4::Members::Attributes; |
27 |
use C4::Members::Attributes; |
28 |
use C4::Members::AttributeTypes; |
28 |
use C4::Members::AttributeTypes; |
|
|
29 |
use C4::Auth qw(hash_password checkpw_internal); |
29 |
use List::MoreUtils qw( any ); |
30 |
use List::MoreUtils qw( any ); |
30 |
use Net::LDAP; |
31 |
use Net::LDAP; |
31 |
use Net::LDAP::Filter; |
32 |
use Net::LDAP::Filter; |
Lines 257-300
sub exists_local {
Link Here
|
257 |
} |
258 |
} |
258 |
|
259 |
|
259 |
sub _do_changepassword { |
260 |
sub _do_changepassword { |
260 |
my ($userid, $borrowerid, $digest) = @_; |
261 |
my ($userid, $borrowerid, $password) = @_; |
|
|
262 |
|
263 |
my $digest = hash_password($password); |
264 |
|
261 |
$debug and print STDERR "changing local password for borrowernumber=$borrowerid to '$digest'\n"; |
265 |
$debug and print STDERR "changing local password for borrowernumber=$borrowerid to '$digest'\n"; |
262 |
changepassword($userid, $borrowerid, $digest); |
266 |
changepassword($userid, $borrowerid, $digest); |
263 |
|
267 |
|
264 |
# Confirm changes |
268 |
my ($ok, $cardnum) = checkpw_internal(C4::Context->dbh, $userid, $password); |
265 |
my $sth = C4::Context->dbh->prepare("SELECT password,cardnumber FROM borrowers WHERE borrowernumber=? "); |
269 |
return $cardnum if $ok; |
266 |
$sth->execute($borrowerid); |
270 |
|
267 |
if ($sth->rows) { |
271 |
warn "Password mismatch after update to borrowernumber=$borrowerid"; |
268 |
my ($md5password, $cardnum) = $sth->fetchrow; |
272 |
return; |
269 |
($digest eq $md5password) and return $cardnum; |
|
|
270 |
warn "Password mismatch after update to cardnumber=$cardnum (borrowernumber=$borrowerid)"; |
271 |
return; |
272 |
} |
273 |
die "Unexpected error after password update to userid/borrowernumber: $userid / $borrowerid."; |
274 |
} |
273 |
} |
275 |
|
274 |
|
276 |
sub update_local { |
275 |
sub update_local { |
277 |
my $userid = shift or return; |
276 |
my $userid = shift or croak "No userid"; |
278 |
my $digest = md5_base64(shift) or return; |
277 |
my $password = shift or croak "No password"; |
279 |
my $borrowerid = shift or return; |
278 |
my $borrowerid = shift or croak "No borrowerid"; |
280 |
my $borrower = shift or return; |
279 |
my $borrower = shift or croak "No borrower record"; |
281 |
my @keys = keys %$borrower; |
280 |
|
282 |
my $dbh = C4::Context->dbh; |
281 |
my @keys = keys %$borrower; |
283 |
my $query = "UPDATE borrowers\nSET " . |
282 |
my $dbh = C4::Context->dbh; |
284 |
join(',', map {"$_=?"} @keys) . |
283 |
my $query = "UPDATE borrowers\nSET " . |
285 |
"\nWHERE borrowernumber=? "; |
284 |
join(',', map {"$_=?"} @keys) . |
286 |
my $sth = $dbh->prepare($query); |
285 |
"\nWHERE borrowernumber=? "; |
287 |
if ($debug) { |
286 |
my $sth = $dbh->prepare($query); |
288 |
print STDERR $query, "\n", |
287 |
if ($debug) { |
289 |
join "\n", map {"$_ = '" . $borrower->{$_} . "'"} @keys; |
288 |
print STDERR $query, "\n", |
290 |
print STDERR "\nuserid = $userid\n"; |
289 |
join "\n", map {"$_ = '" . $borrower->{$_} . "'"} @keys; |
291 |
} |
290 |
print STDERR "\nuserid = $userid\n"; |
292 |
$sth->execute( |
291 |
} |
293 |
((map {$borrower->{$_}} @keys), $borrowerid) |
292 |
$sth->execute( |
294 |
); |
293 |
((map {$borrower->{$_}} @keys), $borrowerid) |
|
|
294 |
); |
295 |
|
295 |
|
296 |
# MODIFY PASSWORD/LOGIN |
296 |
# MODIFY PASSWORD/LOGIN |
297 |
_do_changepassword($userid, $borrowerid, $digest); |
297 |
_do_changepassword($userid, $borrowerid, $password); |
298 |
} |
298 |
} |
299 |
|
299 |
|
300 |
1; |
300 |
1; |
301 |
- |
|
|