#!--PERL--
# -*- indent-tabs-mode: nil; -*-
# vim:ft=perl:et:sw=4
# $Id$
# Sympa - SYsteme de Multi-Postage Automatique
#
# Copyright (c) 1997, 1998, 1999 Institut Pasteur & Christophe Wolfhugel
# Copyright (c) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
# 2006, 2007, 2008, 2009, 2010, 2011 Comite Reseau des Universites
# Copyright (c) 2011, 2012, 2013, 2014, 2015, 2016, 2017 GIP RENATER
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
use lib split(/:/, $ENV{SYMPALIB} || ''), '--modulesdir--';
use strict;
use warnings;
use English qw(-no_match_vars);
use Getopt::Long;
use Pod::Usage;
use Data::Dumper;
use Sympa::Constants;
use Sympa::Database;
use Sympa::DatabaseDriver::LDAP;
use Sympa::Log; # Show err logs on STDERR.
my %options;
unless (
GetOptions(
\%options,
( map {"$_=s"} @{Sympa::DatabaseDriver::LDAP->required_parameters},
@{Sympa::DatabaseDriver::LDAP->optional_parameters},
qw(use_ssl use_start_tls), # Deprecated as of 6.2.15
qw(filter scope)
),
qw(suffix:s attrs:s),
qw(help version)
)
) {
pod2usage(-exitval => 1, -output => \*STDERR);
}
if ($options{'help'}) {
pod2usage(0);
} elsif ($options{'version'}) {
printf "Sympa %s\n", Sympa::Constants::VERSION;
exit 0;
}
# Parameters deprecated as of 6.2.15.
if ($options{use_start_tls}) {
$options{use_tls} = 'starttls';
} elsif ($options{use_ssl}) {
$options{use_tls} = 'ldaps';
}
delete $options{use_start_tls};
delete $options{use_ssl};
if ($options{'bind_dn'} and not $options{'bind_password'}) {
local $SIG{TERM} = sub { system qw(stty echo) };
system qw(stty -echo);
print 'Bind password:';
my $password = ;
chomp $password;
print "\n";
$SIG{TERM}->();
$options{'bind_password'} = $password;
}
my $db = Sympa::Database->new('LDAP', %options);
unless ($db
and defined $options{'suffix'}
and defined $options{'filter'}) {
pod2usage(-exitval => 1, -output => \*STDERR);
}
print join ' ',
map { sprintf '%s=%s', $_, $options{$_} } qw(host suffix filter);
print "\n";
my ($mesg, $res);
$db->connect or die sprintf "Connect impossible: %s\n", ($db->error || '');
$mesg = $db->do_operation(
'search',
base => $options{'suffix'},
filter => $options{'filter'},
scope => ($options{'scope'} || 'sub'),
attrs =>
($options{'attrs'} ? [split /\s*,\s*/, $options{'attrs'}] : ['']),
) or die sprintf "Search impossible: %s\n", $db->error;
$res = $mesg->as_struct;
my $cpt = 0;
foreach my $dn (keys %$res) {
my $hash = $res->{$dn};
print "#$dn\n";
foreach my $k (keys %$hash) {
my $array = $hash->{$k};
if ((ref($array) eq 'ARRAY') and ($k ne 'jpegphoto')) {
printf "\t%s => %s\n", $k, join(',', @$array);
} else {
printf "\t%s => %s\n", $k, $array;
}
}
$cpt++;
}
print "Total : $cpt\n";
$db->disconnect or printf "disconnect impossible: %s\n", $db->error;
__END__
=encoding utf-8
=head1 NAME
sympa_test_ldap, sympa_test_ldap.pl - Testing LDAP connection for Sympa
=head1 SYNOPSIS
sympa_test_ldap.pl --filter=string --host=string --suffix=string
[ --attrs=[ string,...|* ] ]
[ --bind_dn=string [ --bind_password=string ] ]
[ --port=string ] [ --scope=base|one|sub ]
[ --use_tls=starttls|ldaps|none
[ --ca_file=string ] [ --ca_path=string ]
[ --ca_verify=none|optional|require ]
[ --ssl_cert=string ] [ --ssl_ciphers=string ] [ --ssl_key=string ]
[ --ssl_version=sslv2|sslv3|tlsv1|tlsv1_1|tlsv1_2|tlsv1_3 ] ]
sympa_test_ldap.pl --help
sympa_test_ldap.pl --version
=head1 DESCRIPTION
sympa_test_ldap.pl tests LDAP connection and search operation using LDAP
driver of Sympa.
=head1 SEE ALSO
L.
=head1 HISTORY
testldap.pl was renamed to sympa_test_ldap.pl on Sympa 6.2.
C<--use_ssl> and C<--use_start_tls> options were obsoleted by Sympa 6.2.15.
C<--use_tls> option would be used instead.
=cut