1a67748f0c9da0244f8c576555c8bb1c7757e0f0
[koha-equinox.git] / t / db_dependent / LDAP / test_ldap_add.pl
1 #!/usr/bin/perl
2 #
3 # To start out, try something like this against your LDAP:
4 # ldapadd    -w metavore -D'cn=Manager,dc=metavore,dc=com' -c -f example3.ldif 
5 # ldapmodify -w metavore -D'cn=Manager,dc=metavore,dc=com' -c -f example3.ldif 
6
7 # Then run this script to test perl interaction w/ LDAP.
8 #
9
10 use warnings;
11 use strict;
12
13 use Net::LDAP;
14 use Net::LDAP::Filter;
15
16 my $host = (@ARGV) ? shift : 'localhost';
17 my $filter = Net::LDAP::Filter->new((@ARGV) ? shift : 'objectClass=inetOrgPerson');
18 my %params = (
19         base   => (@ARGV) ? shift : 'dc=metavore,dc=com',
20         filter => $filter,
21 );
22
23 my $ldap = Net::LDAP->new($host)        or die "Cannot connect to ldap on $host";
24 $ldap->bind("cn=Manager," . $params{'base'}, password=>'metavore') or die "Cannot bind to ldap on $host";
25 &ldap_dse;
26 &ldap_search;
27 &ldap_add;
28 &ldap_search;
29
30 sub hashup {
31         my $query = shift or die "Bad hashup call";
32         my %memberhash = ();
33         my $key;
34         foreach my $user ($query->shift_entry){
35                 foreach my $k (@$user) {
36                         foreach my $k2 ( keys %$k ) {
37                                 if ($k2 eq 'type') {
38                                         $key = $$k{$k2};
39                                 } else {
40                                         $memberhash{$key} .= map {$_ . " "} @$k{$k2};
41                                 }
42                         }
43                 }
44         }
45         return %memberhash;
46 }
47
48 sub recursive_breakdown {
49         my $dse = shift or return undef;
50         if (ref($dse) =~ /HASH/) {
51                 return join "\n", map {"$_\t=> " . recursive_breakdown($dse->{$_})} keys %$dse;
52         } elsif (ref($dse) =~ /ARRAY/) {
53                 return " (\n" . join("\n", map {recursive_breakdown($_)} @$dse) . "\n)\n";
54         } else {
55                 return $dse;
56         }
57 }
58
59 sub ldap_dse {
60         print "my root DSE: \n";
61         print recursive_breakdown $ldap->root_dse();
62 }
63
64 sub ldap_search {
65         my $query = $ldap->search(%params)      or print "Search failed\n";
66         $query->code and die sprintf 'error (code:%s) - %s', $query->code , $query->error;
67         my $size = scalar($query->entries);
68         my $i=5;
69         print "\nNumber of records returned from search: $size.\n";
70         ($size > $i) and print "Displaying the last $i records.\n\n";
71         foreach ($query->entries) {
72                 ($size-- > $i) and next;
73                 $_->dump;
74         }
75 }
76
77 sub ldap_add {
78         my $cn = shift or return 0;
79         my $mail = lc $cn;
80         $mail =~ s/\s+/./;
81         print "Adding user $cn\n";
82         my $add;
83         $add = $ldap->add(
84                 "cn=$cn," . $params{'base'},
85                 attr => [
86                         cn => $cn,
87                         sn => 'atz',
88                         mail => $mail . '@liblime.com',
89                         telephoneNumber => '1 614 266 9798',
90                         description => 'Implementer and Destroyer',
91                         objectclass => ['person','inetOrgPerson'],
92                 ])
93                 or printf "Add failed (code %s): %s\n", ($add->code||'unknown'), ($add->error||'unknown');
94 }
95
96 END {
97         ($ldap) and $ldap->unbind;
98         print "\ndone.\n";
99 }