X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=lib%2FLiCoM%2FPerson.pm;h=4ba1be41aa3c1f887e0b3e8b334926e275f7127b;hb=80c5c31d977378c6430408d696fac14560d838ed;hp=a5bf4e2e4c37b8bcae0ca2b6069145be039a07c9;hpb=328bdcb841ecaa72c69379e6ccd7165f44e7c2e4;p=licom.git diff --git a/lib/LiCoM/Person.pm b/lib/LiCoM/Person.pm index a5bf4e2..4ba1be4 100644 --- a/lib/LiCoM/Person.pm +++ b/lib/LiCoM/Person.pm @@ -47,6 +47,24 @@ our %ExternalNames = return (1); +sub new +{ + my $pkg = shift; + my $entry = shift; + my $obj = {}; + + $obj->{'dn'} = $entry->dn (); + $obj->{'ldap'} = $entry; + + for (keys %ValidFields) + { + my $key = $_; + $obj->{$key} = $entry->get_value ($key, asref => $ValidFields{$key}); + } + + return (bless ($obj, $pkg)); +} + =head1 STATIC FUNCTIONS =over 4 @@ -87,8 +105,9 @@ sub create my %hash = @_; my $entry = Net::LDAP::Entry->new (); my $dn; + my $ou; - $entry->add (objectClass => [qw(top organizationalUnit person organizationalPerson inetOrgPerson)]); + $entry->add (objectClass => [qw(person organizationalPerson inetOrgPerson)]); for (keys %hash) { @@ -147,8 +166,9 @@ sub create } $dn = "cn=$sn $gn," . get_config ('base_dn'); + ($ou) = get_config ('base_dn') =~ m/\bou\s*=\s*([^,]+)/i; - $entry->add (cn => "$sn $gn"); + $entry->add (cn => "$sn $gn", ou => $ou); $entry->dn ($dn); $entry->changetype ('add'); @@ -411,8 +431,6 @@ sub name =item I<$obj>-EB ([I<@uri>]) -=item I<$obj>-EB ([I<@groups>]) - Get or set the attribute. This is the same as calling S-EB (I<$field>, I<\@values>)> or S-EB (I<$field>)>. @@ -472,7 +490,7 @@ sub set } if (!defined ($ValidFields{$field})) { - return (undef); + return; } if (defined ($value)) @@ -494,7 +512,10 @@ sub set $entry->update ($Ldap); } - $obj->{$field} = [] unless (defined ($obj->{$field})); + if (!defined ($obj->{$field}) and $ValidFields{$field}) + { + $obj->{$field} = []; + } if (wantarray () and $ValidFields{$field}) {