Changeset 2406


Ignore:
Timestamp:
06/23/20 00:45:41 (4 years ago)
Author:
nanardon
Message:

Add support for GroupOfNames? object in ldap (from group)

Location:
trunk/LATMOS-Accounts/lib/LATMOS/Accounts/Bases
Files:
1 added
1 edited
1 copied

Legend:

Unmodified
Added
Removed
  • trunk/LATMOS-Accounts/lib/LATMOS/Accounts/Bases/Ldap/Group.pm

    r2110 r2406  
    4848        gidNumber => { uniq => 1, }, 
    4949        description => { }, 
    50         memberUID => { multiple => 1, delayed => 1, }, 
     50        memberUID => { 
     51            multiple => 1, 
     52            delayed => 1, 
     53            reference => 'user', 
     54        }, 
    5155        cn => { ro => 1 }, 
    5256        dn => { ro => 1 }, 
  • trunk/LATMOS-Accounts/lib/LATMOS/Accounts/Bases/Ldap/Groupofnames.pm

    r2405 r2406  
    1 package LATMOS::Accounts::Bases::Ldap::Group; 
     1package LATMOS::Accounts::Bases::Ldap::Groupofnames; 
    22 
    33use 5.010000; 
     
    3636=cut 
    3737 
    38 sub _class_filter { '(ObjectClass=posixGroup)' } 
     38sub is_supported { 
     39    my ($class, $base) = @_; 
     40    return $base->config('groupofnames_container') ? 1 : 0; 
     41} 
     42 
     43 
     44sub _class_filter { '(ObjectClass=groupOfNames)' } 
    3945 
    4046sub _key_attr { 'cn' }  
    4147 
    42 sub _my_ldap_classes { qw(top posixGroup) } 
     48sub _my_ldap_classes { qw(top groupOfNames) } 
    4349 
    4450sub _get_attr_schema { 
     
    4652    $class->SUPER::_get_attr_schema($base, 
    4753    { 
    48         gidNumber => { uniq => 1, }, 
    4954        description => { }, 
    50         memberUID => { multiple => 1, delayed => 1, }, 
     55        member => { 
     56            mandatory => 1, 
     57            multiple => 1, 
     58            reference => 'user', 
     59        }, 
    5160        cn => { ro => 1 }, 
    5261        dn => { ro => 1 }, 
     
    7180    $data{$class->_key_attribute($base)} = $id; 
    7281    foreach (keys %data) { 
    73         /^(memberUID)$/ and do { 
    74             $delayed{memberUID} = $data{$_}; 
    75             next; 
     82        /^(member)$/ and do { 
     83            my @DNs; 
     84            foreach my $user ( ref $data{$_} ? @{ $data{$_} } : $data{$_} ) { 
     85                my $OUser = $base->get_object('user', $user) or next; 
     86                push(@DNs, $OUser->{entry}->dn); 
     87            } 
     88            $data{$_} = \@DNs; 
    7689        }; 
    7790        $class->_populate_entry($entry, $_, $data{$_}); 
     
    88101    my ($self, $field) = @_; 
    89102 
    90     $field eq 'memberUID' and do { 
    91         my $val = $self->SUPER::get_field('memberUid'); 
    92         return ref $val ? $val : [ grep { $_ } $val ]; 
     103    $field eq 'member' and do { 
     104        my @res; 
     105        foreach my $dn ($self->{entry}->get_value('member')) { 
     106            my $User = $self->base->_get_object_from_dn($dn) or next; 
     107            push(@res, $User->get_value( LATMOS::Accounts::Bases::Ldap::User::_key_attr() ) ); 
     108        } 
     109        return [ sort(@res) ]; 
    93110    }; 
     111 
    94112    $self->SUPER::get_field($field); 
    95113} 
     
    99117    my %ndata; 
    100118    while (my ($f, $val) = each(%data)) { 
    101         $f eq 'memberUID' and do { 
     119        $f eq 'member' and do { 
     120            my %users; 
    102121            $val = [ $val ] unless(ref $val); 
    103             my %users; 
    104             $users{$_}{e} = 1 foreach (@{ $self->get_field('memberUID') || []}); 
    105             $users{$_}{n} = 1 foreach (grep { $_ } @{ $val || []}); 
     122            $users{$_}{e} = 1 foreach (grep { defined($_) } @{ $self->get_field('member') || []}); 
     123            $users{$_}{n} = 1 foreach (grep { defined($_) } @{ $val || []}); 
    106124            foreach (keys %users) { 
    107125                $users{$_}{e} && $users{$_}{n} and next; 
     126                my $user = $self->base->get_object('user', $_) or next; 
    108127                if ($users{$_}{e}) { 
    109                     $self->{entry}->delete(memberUid => $_); 
    110                 } elsif ($users{$_}{n} && $self->base->get_object('user', $_)) { 
    111                     $self->{entry}->add(memberUid => $_); 
     128                    $self->{entry}->delete(member => $user->get_field('dn')); 
     129                } elsif ($users{$_}{n}) { 
     130                    $self->{entry}->add(member => $user->get_field('dn')); 
    112131                } # else {} # can't happen 
    113                 my $mesg = $self->{entry}->update($self->base->ldap); 
    114132            } 
    115133            next; 
Note: See TracChangeset for help on using the changeset viewer.