Line 0
Link Here
|
0 |
- |
1 |
#!/usr/bin/perl |
|
|
2 |
# Copyright 2012 BibLibre |
3 |
# |
4 |
# This file is part of Koha. |
5 |
# |
6 |
# Koha is free software; you can redistribute it and/or modify it under the |
7 |
# terms of the GNU General Public License as published by the Free Software |
8 |
# Foundation; either version 2 of the License, or (at your option) any later |
9 |
# version. |
10 |
# |
11 |
# Koha is distributed in the hope that it will be useful, but WITHOUT ANY |
12 |
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR |
13 |
# A PARTICULAR PURPOSE. See the GNU General Public License for more details. |
14 |
# |
15 |
# You should have received a copy of the GNU General Public License along |
16 |
# with Koha; if not, write to the Free Software Foundation, Inc., |
17 |
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
18 |
|
19 |
=head1 NAME |
20 |
|
21 |
update_patrons_from_LDAP.pl - cron script to pre-populate borrowers data from LDAP |
22 |
|
23 |
=head1 SYNOPSIS |
24 |
|
25 |
./update_patrons_from_LDAP.pl |
26 |
|
27 |
or, in crontab: |
28 |
0 1 * * * ${PERL5LIB}/misc/cronjobs/update_patrons_from_LDAP.pl |
29 |
|
30 |
=head1 DESCRIPTION |
31 |
|
32 |
This script preload borrowers data from LDAP |
33 |
It therefore uses a user that has read permission on user data. |
34 |
Or performs an anonymous login, and then uses the data to preload users. |
35 |
|
36 |
|
37 |
=cut |
38 |
|
39 |
use Net::LDAP; |
40 |
use Net::LDAP::Filter; |
41 |
use C4::Auth_with_ldap; |
42 |
use C4::Members; |
43 |
use C4::Context; |
44 |
use C4::Debug; |
45 |
use YAML; |
46 |
use strict; |
47 |
|
48 |
my $dbh = C4::Context->dbh; |
49 |
my $ldap = C4::Context->config("ldapserver") or die 'No "ldapserver" in server hash from KOHA_CONF: ' . $ENV{KOHA_CONF}; |
50 |
my $prefhost = $ldap->{hostname} or die ldapserver_error('hostname'); |
51 |
my $base = $ldap->{base} or die ldapserver_error('base'); |
52 |
my $ldapname = $ldap->{user}; |
53 |
my $ldappassword = $ldap->{pass}; |
54 |
our %mapping = %{ $ldap->{mapping} }; |
55 |
$debug && warn Dump($ldap); |
56 |
|
57 |
# Infos to do an anonymous bind |
58 |
|
59 |
my %config = ( |
60 |
anonymous => ( $ldapname and $ldappassword ) ? 0 : 1, |
61 |
replicate => defined( $ldap->{replicate} ) ? $ldap->{replicate} : 1, # add from LDAP to Koha database for new user |
62 |
update => defined( $ldap->{update} ) ? $ldap->{update} : 1, # update from LDAP to Koha database for existing user |
63 |
); |
64 |
|
65 |
my @hosts = split( ',', $prefhost ); |
66 |
my $db = Net::LDAP->new( \@hosts ); |
67 |
unless ($db) { |
68 |
warn " host $ldap doesnot exist !"; |
69 |
return 0; |
70 |
} |
71 |
my $res = ( $config{anonymous} ) ? $db->bind : $db->bind( $ldapname, password => $ldappassword ); |
72 |
warn "LDAP Auth impossible : server not responding" if ( $res->code ); |
73 |
|
74 |
## based on Koha Members |
75 |
my $filter = Net::LDAP::Filter->new("uid=*"); |
76 |
my $userdnsearch = $db->search( base => $base, filter => $filter ); |
77 |
$userdnsearch->code and die $userdnsearch->error; |
78 |
while ( my $userldapentry = $userdnsearch->shift_entry ) { |
79 |
|
80 |
#warn Data::Dumper::Dumper($userldapentry); |
81 |
my $uid_field = $mapping{userid}->{is} or die ldapserver_error("mapping for 'userid'"); |
82 |
my $userid = $userldapentry->{$uid_field}; |
83 |
$debug && warn Dump($userldapentry); |
84 |
|
85 |
my %borrower = C4::Auth_with_ldap::ldap_entry_2_hash( $userldapentry, $userid ); |
86 |
$debug and print "checkpw_ldap received \%borrower w/ " . keys(%borrower), " keys: ", join( ' ', keys %borrower ), "\n"; |
87 |
my ( $borrowernumber, $cardnumber, $savedpw ); |
88 |
( $borrowernumber, $cardnumber, $userid, $savedpw ) = C4::Auth_with_ldap::exists_local( $borrower{'userid'} ); |
89 |
if ($borrowernumber) { |
90 |
( $config{update} ) and my $c2 = C4::Auth_with_ldap::update_local( $userid, "!", $borrowernumber, \%borrower ) || ''; |
91 |
( $cardnumber eq $c2 ) or warn "update_local returned cardnumber '$c2' instead of '$cardnumber'"; |
92 |
} else { |
93 |
if ( $config{replicate} ) { |
94 |
$borrowernumber = eval { AddMember(%borrower) }; |
95 |
if ($@) { |
96 |
warn Dump(%borrower), " $@"; |
97 |
} |
98 |
} |
99 |
} |
100 |
} |
101 |
$db->unbind; |
102 |
#Pb a) Search the whole annuary |
103 |
# b) Adds data that could be useless in Koha. |