|
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 |
- |
|
|