use strict;
use warnings;
-use lib (qw(lib));
+
+use FindBin (qw($Bin));
+use lib ("$Bin/lib");
use LiCoM::Config (qw(get_config));
use LiCoM::Person;
-our $Config = get_config ();
+our $Config;
-die unless (defined ($Config->{'uri'}) and defined ($Config->{'bind_dn'})
- and defined ($Config->{'password'}));
+if (-e $ENV{'HOME'} . '/.licomrc')
+{
+ $Config = get_config ($ENV{'HOME'} . '/.licomrc');
+}
+elsif (-e '/etc/licom/licom.conf')
+{
+ $Config = get_config ('/etc/licom/licom.conf');
+}
+else
+{
+ $Config = get_config ();
+}
+
+if ($ENV{'DEBUG'})
+{
+ require Data::Dumper;
+ print STDERR Data::Dumper->Dump ([$Config], ['Config']);
+}
+
+unless (defined ($Config->{'uri'}) and defined ($Config->{'bind_dn'})
+ and defined ($Config->{'password'}))
+{
+ die (<<ERROR);
+The configuration has not been found or is not complete. At least the options
+uri, bind_dn and password are needed.
+ERROR
+}
$Config->{'base_dn'} = $Config->{'bind_dn'} unless (defined ($Config->{'base_dn'}));
die ('No (valid) patterns found.') unless (@Patterns);
+LiCoM::Person->connect
+(
+ uri => $Config->{'uri'},
+ base_dn => $Config->{'base_dn'},
+ bind_dn => $Config->{'bind_dn'},
+ password => $Config->{'password'}
+) or die;
+
our @Matches = LiCoM::Person->search (@Patterns, [[mail => '*']]);
print STDOUT scalar (@Matches), ' ', (scalar (@Matches) == 1 ? 'entry' : 'entries'), " found.\n";
-for (@Matches)
+for (sort { $a->name () cmp $b->name () } (@Matches))
{
my $person = $_;
my $cn = $person->name ();
my @mail = $person->get ('mail');
+ my @groups = $person->get ('group');
+ my $info = join (', ', sort (@groups));
+
+ $info = "($info)" if ($info);
- for (@mail)
+ for (sort (@mail))
{
- print "$_\t$cn\tFound by LiCoM\n";
+ print "$_\t$cn\t$info\n";
}
}