Changeset 92 for LATMOS-Accounts/lib/LATMOS/Accounts/Bases/Ad/User.pm
- Timestamp:
- 05/12/09 16:40:07 (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LATMOS-Accounts/lib/LATMOS/Accounts/Bases/Ad/User.pm
r91 r92 39 39 sub _key_attr { 'cn' } 40 40 41 sub _delayed_fields { 42 my ($self)= @_; 43 return qw(memberOf); 44 } 45 41 46 sub _canonical_fields { 42 47 my ($self, $base, $mode) = @_; … … 55 60 ipPhone otherTelephone department 56 61 title modbile homePhone 62 memberOf 57 63 ), 58 64 ($mode !~ /w/ 59 ? qw(cn dn uSNCreated uSNChanged memberOf)65 ? qw(cn dn uSNCreated uSNChanged) 60 66 : () 61 67 ) … … 92 98 } 93 99 100 sub 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 123 sub 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 94 151 1; 95 152
Note: See TracChangeset
for help on using the changeset viewer.