source: trunk/LATMOS-Accounts/lib/LATMOS/Accounts/Bases/Unix/Group.pm

Last change on this file was 1975, checked in by nanardon, 7 years ago

Fix internal attribute name discovery for Unix db

  • Property svn:keywords set to Id
File size: 3.2 KB
Line 
1package LATMOS::Accounts::Bases::Unix::Group;
2
3use 5.010000;
4use strict;
5use warnings;
6
7use base qw(LATMOS::Accounts::Bases::Objects);
8use LATMOS::Accounts::Log;
9
10our $VERSION = (q$Rev: 205 $ =~ /^Rev: (\d+) /)[0];
11
12=head1 NAME
13
14LATMOS::Accounts::Bases::Unix::Group - Group management in Unix Base
15
16=head1 SYNOPSIS
17
18  use LATMOS::Accounts::Bases;
19  my $base = LATMOS::Accounts::Bases->new('unix');
20  ...
21
22=head1 DESCRIPTION
23
24Access and modify group informations in Unix base.
25
26=head1 FUNCTIONS
27
28=cut
29
30sub _get_attr_schema {
31    my ($class, $base) = @_;
32    {
33        sAMAccountName => {
34            iname => 'group_name',
35            ro => 1,
36        },
37        gidNumber => {
38            iname => 'gid',
39        },
40        memberUID => {
41            iname => 'user_list',
42            multiple => 1,
43            delayed => 1,
44        },
45    };
46}
47
48=head2 new(%config)
49
50Create a new LATMOS::Ad object for windows AD $domain.
51
52domain / server: either the Ad domain or directly the server
53
54ldap_args is an optionnal list of arguments to pass to L<Net::LDAP>.
55
56=cut
57
58sub new {
59    my ($class, $base, $id, @args) = @_;
60
61    if (exists($base->{groups}{$id})) {
62        if ($base->{groups}{$id}{gid} < ($base->{min_gid} || 0)) {
63            $base->log(LA_DEBUG, "gid %d less than minimal %d", $base->{groups}{$id}{gid}, ($base->{min_gid} || 0));
64            return;
65        }
66        return bless($base->{groups}{$id}, $class);
67    } else {
68        $base->log(LA_ERR, "Cannot find group $id");
69        return
70    }
71}
72
73sub get_field {
74    my ($self, $field) = @_;
75    if ($field eq 'user_list') {
76        return [ keys %{ $self->{'users'} || {} } ];
77    } elsif ($field eq 'group_name') {
78        return $self->id;
79    }
80
81    $self->{$field}
82}
83
84sub set_fields {
85    my ($self, %gdata) = @_;
86
87    my %data;
88
89    foreach my $attr (keys %gdata) {
90        if (my $oattr = $self->attribute($attr)) {
91            $data{ $oattr->iname } = $gdata{$attr};
92        } else {
93            $data{$attr} = $gdata{$attr};
94        }   
95    }
96
97    foreach my $field (keys %data) {
98        $field eq 'gid' and do {
99            if (!(defined($data{$field}) && $data{$field} =~ /^\d+$/)) {
100                $self->base->log(LA_ERR,
101                    "Invalid Group data for $field: " . (defined($data{$field}) ? $data{$field} : ''));
102                return;
103            }
104        };
105    }
106    foreach my $field (keys %data) {
107        # TODO check fields exists !
108        if ($field eq 'user_list') {
109            $self->{'users'} = {};
110            foreach (ref $data{$field} ? (@{ $data{$field} || [] }) : ($data{$field})) {
111                defined($_) or next;
112                $self->{'users'}{$_} = 1;
113            }
114        } else {
115            $self->{$field} = $data{$field};
116        }
117    }
118    1;
119}
120
1211;
122
123__END__
124
125=head1 SEE ALSO
126
127L<LATMOS::Accounts::Bases::Objects>
128L<LATMOS::Accounts::Bases::Unix>
129
130=head1 AUTHOR
131
132Olivier Thauvin, E<lt>olivier.thauvin@latmos.ipsl.frE<gt>
133
134=head1 COPYRIGHT AND LICENSE
135
136Copyright (C) 2008, 2009, 2010, 2011, 2012 CNRS SA/CETP/LATMOS
137
138This library is free software; you can redistribute it and/or modify
139it under the same terms as Perl itself, either Perl version 5.10.0 or,
140at your option, any later version of Perl 5 you may have available.
141
142
143=cut
Note: See TracBrowser for help on using the repository browser.