X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=C4%2FAuth_with_ldap.pm;h=f3c1f7f39dd006298cc25f69e746f5eec8361748;hb=24125d4be39a3b6f19b1b0ae3f51855575a01759;hp=7f56d9c59802a1393ede6b9cbd69a760c8755093;hpb=5c2def51587c4b2636b5f066306b8bd5dc0e7a7a;p=koha_fer diff --git a/C4/Auth_with_ldap.pm b/C4/Auth_with_ldap.pm index 7f56d9c598..f3c1f7f39d 100644 --- a/C4/Auth_with_ldap.pm +++ b/C4/Auth_with_ldap.pm @@ -35,7 +35,7 @@ use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $debug); BEGIN { require Exporter; - $VERSION = 3.10; # set the version for version checking + $VERSION = 3.07.00.049; # set the version for version checking @ISA = qw(Exporter); @EXPORT = qw( checkpw_ldap ); } @@ -47,7 +47,7 @@ BEGIN { # ~ then gets the LDAP entry # ~ and calls the memberadd if necessary -sub ldapserver_error ($) { +sub ldapserver_error { return sprintf('No ldapserver "%s" defined in KOHA_CONF: ' . $ENV{KOHA_CONF}, shift); } @@ -70,8 +70,8 @@ my %config = ( update => defined($ldap->{update} ) ? $ldap->{update} : 1, # update from LDAP to Koha database for existing user ); -sub description ($) { - my $result = shift or return undef; +sub description { + my $result = shift or return; return "LDAP error #" . $result->code . ": " . $result->error_name . "\n" . "# " . $result->error_text . "\n"; @@ -169,11 +169,13 @@ sub checkpw_ldap { return 0; # B2, D2 } if (C4::Context->preference('ExtendedPatronAttributes') && $borrowernumber && ($config{update} ||$config{replicate})) { - my @types = C4::Members::AttributeTypes::GetAttributeTypes(); - my @attributes = grep{my $key=$_; any{$_ eq $key}@types;} keys %borrower; my $extended_patron_attributes; - @{$extended_patron_attributes} = - map { { code => $_, value => $borrower{$_} } } @attributes; + foreach my $attribute_type ( C4::Members::AttributeTypes::GetAttributeTypes() ) { + my $code = $attribute_type->{code}; + if ( exists($borrower{$code}) && $borrower{$code} !~ m/^\s*$/ ) { # skip empty values + push @$extended_patron_attributes, { code => $code, value => $borrower{$code} }; + } + } my @errors; #Check before add for (my $i; $i< scalar(@$extended_patron_attributes)-1;$i++) { @@ -197,7 +199,7 @@ return(1, $cardnumber, $userid); # Edit KOHA_CONF so $memberhash{'xxx'} fits your ldap structure. # Ensure that mandatory fields are correctly filled! # -sub ldap_entry_2_hash ($$) { +sub ldap_entry_2_hash { my $userldapentry = shift; my %borrower = ( cardnumber => shift ); my %memberhash; @@ -209,7 +211,7 @@ sub ldap_entry_2_hash ($$) { hashdump("LDAP key: ",$userldapentry->{$_}); } } - my $x = $userldapentry->{attrs} or return undef; + my $x = $userldapentry->{attrs} or return; foreach (keys %$x) { $memberhash{$_} = join ' ', @{$x->{$_}}; $debug and print STDERR sprintf("building \$memberhash{%s} = ", $_, join(' ', @{$x->{$_}})), "\n"; @@ -228,10 +230,21 @@ sub ldap_entry_2_hash ($$) { ( substr($borrower{'firstname'},0,1) . substr($borrower{ 'surname' },0,1) . " "); + + # check if categorycode exists, if not, fallback to default from koha-conf.xml + my $dbh = C4::Context->dbh; + my $sth = $dbh->prepare("SELECT categorycode FROM categories WHERE categorycode = ?"); + $sth->execute( uc($borrower{'categorycode'}) ); + unless ( my $row = $sth->fetchrow_hashref ) { + my $default = $mapping{'categorycode'}->{content}; + $debug && warn "Can't find ", $borrower{'categorycode'}, " default to: $default for ", $borrower{userid}; + $borrower{'categorycode'} = $default + } + return %borrower; } -sub exists_local($) { +sub exists_local { my $arg = shift; my $dbh = C4::Context->dbh; my $select = "SELECT borrowernumber,cardnumber,userid,password FROM borrowers "; @@ -260,16 +273,16 @@ sub _do_changepassword { my ($md5password, $cardnum) = $sth->fetchrow; ($digest eq $md5password) and return $cardnum; warn "Password mismatch after update to cardnumber=$cardnum (borrowernumber=$borrowerid)"; - return undef; + return; } die "Unexpected error after password update to userid/borrowernumber: $userid / $borrowerid."; } -sub update_local($$$$) { - my $userid = shift or return undef; - my $digest = md5_base64(shift) or return undef; - my $borrowerid = shift or return undef; - my $borrower = shift or return undef; +sub update_local { + my $userid = shift or return; + my $digest = md5_base64(shift) or return; + my $borrowerid = shift or return; + my $borrower = shift or return; my @keys = keys %$borrower; my $dbh = C4::Context->dbh; my $query = "UPDATE borrowers\nSET " . @@ -356,7 +369,8 @@ C4::Auth - Authenticates Koha users | dateexpiry | date | YES | | NULL | | | gonenoaddress | tinyint(1) | YES | | NULL | | | lost | tinyint(1) | YES | | NULL | | - | debarred | tinyint(1) | YES | | NULL | | + | debarred | date | YES | | NULL | | + | debarredcomment | varchar(255) | YES | | NULL | | | contactname | mediumtext | YES | | NULL | | | contactfirstname | text | YES | | NULL | | | contacttitle | text | YES | | NULL | |