View | Details | Raw Unified | Return to bug 9611
Collapse All | Expand All

(-)a/C4/Auth_with_ldap.pm (-33 / +32 lines)
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
- 

Return to bug 9611