source: trunk/LATMOS-Accounts/bin/la-query @ 1044

Last change on this file since 1044 was 1044, checked in by nanardon, 12 years ago

Kill redundant LATMOS::Account::default_base()

Use $LA->base(undef) to get default base instead

  • Property svn:executable set to *
  • Property svn:keywords set to Id Rev
File size: 3.7 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=head1 DESCRIPTION
18
19[obj_id] : If present, all set attributes (rw) will be displayed for that obj_id.
20        If none is given, all obj_ids will be printed.
21
22For the default object_type (user), obj_id = login.
23
24Example : la-query lambda
25
26=cut
27
28GetOptions(
29    'c|config=s'        => \my $config,
30    'b|base=s'          => \my $base,
31    'o|object=s'        => \my $otype,
32    'e|empty'           => \my $empty_attr,
33    'fmt=s'             => \my $fmt,
34    'filefmt=s'         => \my $filefmt,
35    'ro'                => \my $with_ro,
36    'no-unexp|wo-unexp' => \my $nounexp,
37    'with-unexp'        => \my $unexp,
38    'help'              => sub { pod2usage(0) },
39) or pod2usage();
40
41$otype ||= 'user';
42
43=head1 OPTIONS
44
45=over 4
46
47=item -c|--config configdir
48
49Use this configuration directory instead of the default one.
50
51=item -b|--base basename
52
53Query this specific base instead of the default one.
54
55=item -o|object object_type
56
57Query will be performed on this object. Default is the 'User' object.
58
59=item --with-unexp
60
61Take into account all objects (even non propagated ones, with attribute
62'exported'=0) (default)
63
64=item --wo-unexp
65
66Take into account only propagated objects (attribute 'exported'=1)
67
68=item -e|--empty
69
70(Only if obj_id is specified) Include also unset attributes.
71
72=item --ro
73
74(Only if obj_id is specified) Include also read-only attributes as comments.
75
76=item --fmt format
77
78Specify a format of output.
79
80If NOT present and "obj_id" is specified, all non-empty writable attributes will be printed (modified by -e and -ro).
81If NOT present and "obj_id" is NOT specified, only the list of "obj_id" will be printed.
82
83The "format" string may query tags in form:
84
85    %{ATTRIBUTE:printflike}
86
87Where ATTRIBUTE is the name of an attribute and the optional
88C<:printflike> is a printf like string to print the attribute content (without
89the C<%>).
90
91Examples for users:
92
93    --fmt "Name %{sn}, First Name %{givenName}\n"
94
95    --fmt "Name %{sn:20s}, First Name %{givenName}\n"
96
97=item --filefmt format-file
98
99"format-file" is a text file with the same strings as "--fmt" option, WITHOUT quotes (").
100
101It can be on more than one line, but all lines will be concatenated as one.
102Don't forget the "\n" if you really want seperate lines.
103
104Example of format-file:
105
106Name: %{sn}, First Name: %{givenName}\n
107     Department : %{department}\n
108
109Note : --fmt and --filefmt can be used together, and will be concatenated (the "fmt" string first, then what is in the "format-file").
110
111=back
112
113=cut
114
115my $LA = LATMOS::Accounts->new($config, noacl => 1);
116my $labase = $LA->base($base);
117$labase && $labase->load or die "Cannot load base";
118
119$labase->unexported($nounexp ? 0 : 1);
120
121if ($filefmt){
122        open(my $hfmt, '<', $filefmt) or die "Cannot open $filefmt\n";
123        $fmt ||= ''; # avoid undef warning
124        while (<$hfmt>) {
125                chomp($fmt .= $_);
126        }
127        close $hfmt;
128}
129
130if (@ARGV) {
131    foreach my $ouid (@ARGV) {
132        my $obj = $labase->get_object($otype, $ouid) or do {
133            die "Object $otype $ouid not found\n";
134        };
135        if ($fmt) {
136            print $obj->queryformat($fmt);
137        } else {
138            $obj->text_dump(*STDOUT,
139                {
140                    empty_attr => $empty_attr,
141                    only_rw => !$with_ro,
142                }
143            );
144        }
145    }
146} else {
147    foreach (sort $labase->list_objects($otype)) {
148        if ($fmt) {
149            my $o = $labase->get_object($otype, $_) or next;
150            print $o->queryformat($fmt);
151        } else {
152            print "$_\n";
153        }
154    }
155}
Note: See TracBrowser for help on using the repository browser.