Changeset 2406
- Timestamp:
- 06/23/20 00:45:41 (4 years ago)
- 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 48 48 gidNumber => { uniq => 1, }, 49 49 description => { }, 50 memberUID => { multiple => 1, delayed => 1, }, 50 memberUID => { 51 multiple => 1, 52 delayed => 1, 53 reference => 'user', 54 }, 51 55 cn => { ro => 1 }, 52 56 dn => { ro => 1 }, -
trunk/LATMOS-Accounts/lib/LATMOS/Accounts/Bases/Ldap/Groupofnames.pm
r2405 r2406 1 package LATMOS::Accounts::Bases::Ldap::Group ;1 package LATMOS::Accounts::Bases::Ldap::Groupofnames; 2 2 3 3 use 5.010000; … … 36 36 =cut 37 37 38 sub _class_filter { '(ObjectClass=posixGroup)' } 38 sub is_supported { 39 my ($class, $base) = @_; 40 return $base->config('groupofnames_container') ? 1 : 0; 41 } 42 43 44 sub _class_filter { '(ObjectClass=groupOfNames)' } 39 45 40 46 sub _key_attr { 'cn' } 41 47 42 sub _my_ldap_classes { qw(top posixGroup) }48 sub _my_ldap_classes { qw(top groupOfNames) } 43 49 44 50 sub _get_attr_schema { … … 46 52 $class->SUPER::_get_attr_schema($base, 47 53 { 48 gidNumber => { uniq => 1, },49 54 description => { }, 50 memberUID => { multiple => 1, delayed => 1, }, 55 member => { 56 mandatory => 1, 57 multiple => 1, 58 reference => 'user', 59 }, 51 60 cn => { ro => 1 }, 52 61 dn => { ro => 1 }, … … 71 80 $data{$class->_key_attribute($base)} = $id; 72 81 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; 76 89 }; 77 90 $class->_populate_entry($entry, $_, $data{$_}); … … 88 101 my ($self, $field) = @_; 89 102 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) ]; 93 110 }; 111 94 112 $self->SUPER::get_field($field); 95 113 } … … 99 117 my %ndata; 100 118 while (my ($f, $val) = each(%data)) { 101 $f eq 'memberUID' and do { 119 $f eq 'member' and do { 120 my %users; 102 121 $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 || []}); 106 124 foreach (keys %users) { 107 125 $users{$_}{e} && $users{$_}{n} and next; 126 my $user = $self->base->get_object('user', $_) or next; 108 127 if ($users{$_}{e}) { 109 $self->{entry}->delete(member Uid => $_);110 } elsif ($users{$_}{n} && $self->base->get_object('user', $_)) {111 $self->{entry}->add(member Uid => $_);128 $self->{entry}->delete(member => $user->get_field('dn')); 129 } elsif ($users{$_}{n}) { 130 $self->{entry}->add(member => $user->get_field('dn')); 112 131 } # else {} # can't happen 113 my $mesg = $self->{entry}->update($self->base->ldap);114 132 } 115 133 next;
Note: See TracChangeset
for help on using the changeset viewer.