Ignore:
Timestamp:
05/12/09 16:40:07 (15 years ago)
Author:
nanardon
Message:
  • allow to set memberUID everywhere
File:
1 edited

Legend:

Unmodified
Added
Removed
  • LATMOS-Accounts/lib/LATMOS/Accounts/Bases/Ad/User.pm

    r91 r92  
    3939sub _key_attr { 'cn' }  
    4040 
     41sub _delayed_fields { 
     42    my ($self)= @_; 
     43    return qw(memberOf); 
     44} 
     45 
    4146sub _canonical_fields { 
    4247    my ($self, $base, $mode) = @_; 
     
    5560        ipPhone otherTelephone department 
    5661        title modbile homePhone 
     62        memberOf 
    5763        ), 
    5864        ($mode !~ /w/ 
    59             ? qw(cn dn uSNCreated uSNChanged memberOf) 
     65            ? qw(cn dn uSNCreated uSNChanged) 
    6066            : () 
    6167        ) 
     
    9298} 
    9399 
     100sub get_field { 
     101    my ($self, $field) = @_; 
     102 
     103    $field eq 'memberOf' and do { 
     104        my @res; 
     105        $self->base->_unlimited_search( 
     106            base => $self->base->object_base_dn('group'), 
     107            filter => sprintf( 
     108                '(&(objectClass=group)(member=%s))', 
     109                escape_filter_value($self->{entry}->dn), 
     110            ), 
     111            callback => sub { 
     112                my ($mesg, $entry) = @_; 
     113                ref $entry eq 'Net::LDAP::Entry' or return; 
     114                push(@res, $entry->get_value('cn')); 
     115            }, 
     116        ); 
     117        sort(@res); 
     118        return \@res 
     119    }; 
     120    $self->SUPER::get_field($field); 
     121} 
     122 
     123sub set_fields { 
     124    my ($self, %data) = @_; 
     125    my %ndata; 
     126    while (my ($f, $val) = each(%data)) { 
     127        $f eq 'memberOf' and do { 
     128            my %users; 
     129            $users{$_}{e} = 1 foreach (@{ $self->get_field('memberOf') || []}); 
     130            $users{$_}{n} = 1 foreach (@{ $val || []}); 
     131            foreach (keys %users) { 
     132                $users{$_}{e} && $users{$_}{n} and next; 
     133                my $user = $self->base->get_object('group', $_) or next; 
     134                if ($users{$_}{e}) { 
     135                    $self->{entry}->del(memberOf => $user->get_field('dn')); 
     136                } elsif ($users{$_}{n}) { 
     137                    $self->{entry}->add(memberOf => $user->get_field('dn')); 
     138                } # else {} # can't happen 
     139                my $mesg = $self->{entry}->update($self->base->ldap); 
     140                if ($mesg->code) { 
     141                    warn $mesg->error; 
     142                } 
     143            } 
     144            next; 
     145        }; 
     146        $ndata{$f} = $val; 
     147    } 
     148    $self->SUPER::set_fields(%ndata); 
     149} 
     150 
    941511; 
    95152 
Note: See TracChangeset for help on using the changeset viewer.