source: LATMOS-Accounts/bin/la-web-directory @ 822

Last change on this file since 822 was 822, checked in by nanardon, 14 years ago
  • improve la-web-directory
  • Property svn:executable set to *
File size: 3.0 KB
Line 
1#!/usr/bin/perl
2
3use strict;
4use warnings;
5use LATMOS::Accounts;
6use Getopt::Long;
7use Pod::Usage;
8
9=head1 NAME
10
11    la-query - Tools to query base in LATMOS::Accounts system
12
13=head1 SYNOPSIS
14
15    la-query [options] [obj_id]
16
17=item [obj_id] : If present, all set attributes (rw) will be displayed for that obj_id.
18        If none is given, all obj_ids will be printed.
19
20For the default object_type (user), obj_id = login.
21
22Example : la-query lambda
23
24=cut
25
26GetOptions(
27    'c|config=s' => \my $config,
28    'b|base=s'   => \my $base,
29    'noexp'      => \my $noexp,
30    'exp'        => \my $exp,
31    'filter=s'   => \my @filters,
32    'help'       => sub { pod2usage(0) },
33) or pod2usage();
34
35=head1 OPTIONS
36
37=over 4
38
39=item -c|--config configfile
40
41Use this configuration file instead of the default one.
42
43=item -b|--base basename
44
45Query this specific base instead of the default one.
46
47=item --noexp
48
49Take into account all objects (even non propagated ones, with attribute 'exported'=0)
50(default)
51
52=item --exp
53
54Take into account only propagated objects (attribute 'exported'=1)
55
56=cut
57
58my $LA = LATMOS::Accounts->new($config, noacl => 1);
59my $labase = $base ? $LA->base($base) : $LA->default_base;
60$labase && $labase->load or die "Cannot load base";
61
62$labase->wexported($exp ? 1 : 0);
63my %users;
64
65foreach my $user (sort $labase->search_objects('user',
66            @filters ? @filters : 'sn=*')) {
67    my $ouser = $labase->get_object('user', $user);
68    $ouser->get_attributes('sn') or next;
69    my @oaddress;
70
71    if ($labase->is_supported_object('address')) {
72        @oaddress = 
73            grep { $_ } (
74            map { $labase->get_object('address', $_) }
75                $ouser->get_attributes('otheraddress'),
76            );
77    } else {
78        @oaddress = ($ouser);
79    }
80           
81    my $line = join(':', map { $_ || '' } (
82            $ouser->get_attributes('sn'),
83            $ouser->get_attributes('givenName'),
84            $ouser->get_attributes('department'),
85            ($oaddress[0] ? join(' ', map { $_ || '' }
86                    $oaddress[0]->get_attributes('l'), grep { $_ }
87                    $oaddress[0]->get_attributes('physicalDeliveryOfficeName'),
88                ) : ''),
89            ($oaddress[1] ? join(' ', map { $_ || '' } grep { $_ }
90                    $oaddress[1]->get_attributes('l'),
91                    $oaddress[1]->get_attributes('physicalDeliveryOfficeName'),
92                ) : ''),
93            ($oaddress[0] ? $oaddress[0]->get_attributes('telephoneNumber') : ''),
94            ($oaddress[1] ? $oaddress[1]->get_attributes('telephoneNumber') : ''),
95            $ouser->get_attributes('mail'),
96            $ouser->get_attributes('nickname'),
97            $ouser->get_attributes('expireText'),
98            $ouser->get_attributes('contratType'),
99        ));
100    $users{$ouser->get_attributes('sn')}{$ouser->get_attributes('givenName')} = $line;
101}
102
103foreach my $sn (sort keys %users) {
104    foreach my $givenName (sort keys %{$users{$sn}}) {
105        print "$users{$sn}{$givenName}\n";
106    }
107}
Note: See TracBrowser for help on using the repository browser.