Changeset 92
- Timestamp:
- 05/12/09 16:40:07 (15 years ago)
- Location:
- LATMOS-Accounts/lib/LATMOS/Accounts/Bases
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
LATMOS-Accounts/lib/LATMOS/Accounts/Bases/Ad/Group.pm
r91 r92 39 39 sub _key_attr { 'cn' } 40 40 41 sub _delayed_fields { 42 my ($self)= @_; 43 return qw(memberUID member); 44 } 45 41 46 sub _canonical_fields { 42 47 my ($self, $base, $mode) = @_; 43 48 ( 44 qw(gidNumber description sAMAccountName member ),49 qw(gidNumber description sAMAccountName member memberUID), 45 50 ($mode !~ /w/ 46 51 ? qw(cn dn) … … 84 89 }, 85 90 ); 91 sort(@res); 86 92 return \@res 93 }; 94 $field eq 'memberUID' and do { 95 my $val = $self->SUPER::get_field($field); 96 return ref $val ? $val : [ grep { $_ } $val ]; 87 97 }; 88 98 $self->SUPER::get_field($field); … … 93 103 my %ndata; 94 104 while (my ($f, $val) = each(%data)) { 105 $f eq 'memberUID' and do { 106 my %users; 107 $users{$_}{e} = 1 foreach (@{ $self->get_field('memberUID') || []}); 108 $users{$_}{n} = 1 foreach (@{ $val || []}); 109 foreach (keys %users) { 110 $users{$_}{e} && $users{$_}{n} and next; 111 my $user = $self->base->get_object('user', $_) or next; 112 if ($users{$_}{e}) { 113 $self->{entry}->del(memberUID => $_); 114 } elsif ($users{$_}{n}) { 115 $self->{entry}->add(memberUID => $_); 116 } # else {} # can't happen 117 my $mesg = $self->{entry}->update($self->base->ldap); 118 if ($mesg->code) { 119 warn $mesg->error; 120 } 121 } 122 next; 123 }; 95 124 $f eq 'member' and do { 96 125 my %users; -
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 -
LATMOS-Accounts/lib/LATMOS/Accounts/Bases/Ad/objects.pm
r81 r92 108 108 109 109 $field eq 'dn' and return $self->{entry}->dn; 110 return $self->{entry}->get_value($field); 110 my ($first, @others) = $self->{entry}->get_value($field); 111 return @others ? [ sort($first, @others) ] : $first; 111 112 } 112 113 … … 132 133 } 133 134 134 sub get_group_users {135 my ($self, $groupname, @searchargs) = @_;136 my $gr = $self->get_group($groupname, attrs => [ qw(cn member) ]);137 138 my @res;139 foreach my $dnu (@{ $gr->get_value('member', asref => 1) || [] }) {140 my $mesg = $self->search(141 filter => '(objectClass=*)', # TODO can we get something else than user ?142 @searchargs,143 base => $dnu,144 );145 146 $mesg->code and return; # ensure error is propagate here147 foreach my $entry ($mesg->entries) {148 push(@res, $entry);149 }150 }151 @res152 }153 154 sub get_user_groups {155 my ($self, $username, @searchargs) = @_;156 my $user = $self->get_user($username);157 158 my @res;159 $self->unlimited_search(160 base => $self->top_dn,161 filter => sprintf(162 '(&(objectClass=group)(member=%s))',163 escape_filter_value($user->dn),164 ),165 @searchargs,166 callback => sub {167 my ($mesg, $entry) = @_;168 ref $entry eq 'Net::LDAP::Entry' or return;169 push(@res, $entry);170 },171 );172 173 @res174 }175 176 sub add_user_group {177 my ($self, $username, $groupname) = @_;178 179 my $user = $self->get_user($username) or return;180 my $group = $self->get_group($groupname) or return;181 182 $group->add(member => $user->dn);183 184 my $mesg = $group->update($self);185 if ($mesg->code) {186 warn $mesg->error;187 return;188 } else { return 1 };189 }190 191 135 1; 192 136 -
LATMOS-Accounts/lib/LATMOS/Accounts/Bases/Sql/User.pm
r89 r92 42 42 43 43 sub has_extended_attributes { 1 } 44 45 sub _delayed_fields { 46 my ($self)= @_; 47 return qw(memberOf); 48 } 44 49 45 50 sub _inline_fields {
Note: See TracChangeset
for help on using the changeset viewer.