Changeset 445


Ignore:
Timestamp:
09/09/09 08:32:30 (15 years ago)
Author:
nanardon
Message:
  • add onlyaddress object to create an address book in ldap for secondary address
Location:
LATMOS-Accounts
Files:
1 added
3 edited
1 copied

Legend:

Unmodified
Added
Removed
  • LATMOS-Accounts/lib/LATMOS/Accounts/Bases/Ldap/Onlyaddress.pm

    r441 r445  
    1 package LATMOS::Accounts::Bases::Ldap::User; 
     1package LATMOS::Accounts::Bases::Ldap::Onlyaddress; 
    22 
    33use 5.010000; 
     
    3737=cut 
    3838 
    39 sub _class_filter { '(&(ObjectClass=posixAccount))' } 
     39sub _class_filter { '(&(ObjectClass=inetOrgPerson))' } 
    4040 
    4141sub _key_attr { 'cn' }  
     
    4545    inetOrgPerson 
    4646    organizationalPerson 
    47     posixAccount 
    48     shadowAccount 
    4947) } 
    5048 
     
    5755    my ($self, $base, $mode) = @_; 
    5856    ( 
    59         qw(displayName givenName homePhone homePostalAddress 
     57        qw(displayName givenName 
    6058        initials mail sn 
    61         mobile o uid manager facsimileTelephoneNumber), # inetOrgPerson 
    62         qw(cn uidNumber gidNumber homeDirectory 
    63         userPassword loginShell 
    64         gecos description), # posixAccount 
    65         qw(shadowLastChange 
    66         shadowMin shadowMax 
    67         shadowWarning 
    68         shadowInactive 
    69         shadowExpire 
    70         shadowFlag), # shadowAccount 
     59        mobile o uid facsimileTelephoneNumber), # inetOrgPerson 
    7160        qw(street postOfficeBox postalCode postalAddress streetAddress 
    7261        physicalDeliveryOfficeName ou st l telephoneNumber), # organizationalPerson 
     
    10190        return 0; 
    10291    } 
    103     return 1;; 
     92    return 1; 
    10493} 
    10594 
     
    10897 
    10998    $field eq 'streetAddress' and $field = 'street'; 
    110     $field eq 'memberOf' and do { 
    111         my @res; 
    112         $self->base->_unlimited_search( 
    113             base => $self->base->object_base_dn('group'), 
    114             filter => sprintf( 
    115                 '(&(objectClass=group)(member=%s))', 
    116                 escape_filter_value($self->{entry}->dn), 
    117             ), 
    118             callback => sub { 
    119                 my ($mesg, $entry) = @_; 
    120                 ref $entry eq 'Net::LDAP::Entry' or return; 
    121                 push(@res, $entry->get_value('cn')); 
    122             }, 
    123         ); 
    124         return [ sort(@res) ]; 
    125     }; 
    126     $field eq 'manager' and do { 
    127         my $dn = $self->SUPER::get_field($field) or return; 
    128         return $self->base->_get_object_from_dn($dn)->get_value('cn'); 
    129     }; 
    13099    $self->SUPER::get_field($field); 
    131100} 
     
    136105    for ($f) { 
    137106        /^sn$/ and $val ||= $entry->get_value('cn'); 
    138         /^memberOf$/ and do { 
    139             my %users; 
    140             $users{$_}{e} = 1 foreach (ref $self 
    141                 ? $self->get_attribute('memberOf') 
    142                 : ()); 
    143             $users{$_}{n} = 1 foreach (@{ $val || []}); 
    144             foreach (keys %users) { 
    145                 $users{$_}{e} && $users{$_}{n} and next; 
    146                 my $group = $base->get_object('group', $_) or next; 
    147                 if ($users{$_}{e}) { 
    148                     $group->{entry}->delete(member => $entry->get_vaue('dn')); 
    149                 } elsif ($users{$_}{n}) { 
    150                     $group->{entry}->add(member => $entry->get_value('dn')); 
    151                 } # else {} # can't happen 
    152                 my $mesg = $group->{entry}->update($base->ldap); 
    153                 if ($mesg->code) { 
    154                     $base->log(LA_ERR, "Cannot set attributes: %s", $mesg->error); 
    155                     return; 
    156                 } 
    157             } 
    158             next; 
    159         }; 
    160         /^userPassword$/ and do { 
    161             # openldap use prefix to identify encryption passwd 
    162             # {CRYPT} is system dependant, eg use crypt from system 
    163             # As we run openldap on UNIX, this should not be a problem 
    164             # as we use perl crypt() which does the same 
    165             # This code will have to be changed if we use openldap on other UNIX 
    166             $val = '{CRYPT}' . $val; 
    167             next; 
    168         }; 
    169         /^manager$/ && $val and do { 
    170             my $user = $base->get_object('user', $val) or 
    171             next; 
    172             $val = $user->get_field('dn'); 
    173             next; 
    174         }; 
    175107    } 
    176108    $self->SUPER::_populate_entry($entry, $f, $val, $base); 
     
    195127at your option, any later version of Perl 5 you may have available. 
    196128 
    197  
    198129=cut 
  • LATMOS-Accounts/lib/LATMOS/Accounts/Bases/Ldap/User.pm

    r444 r445  
    101101        return 0; 
    102102    } 
    103     return 1;; 
     103    return 1; 
    104104} 
    105105 
  • LATMOS-Accounts/t/12_bases_sql.t

    r306 r445  
    11use strict; 
    22use warnings; 
    3 use Test::More tests => 9; 
     3use Test::More tests => 10; 
    44 
    55use_ok('LATMOS::Accounts::Bases'); 
     
    1212use_ok('LATMOS::Accounts::Bases::Sql::Revaliases'); 
    1313use_ok('LATMOS::Accounts::Bases::Sql::Address'); 
     14use_ok('LATMOS::Accounts::Bases::Sql::Onlyaddress'); 
    1415 
  • LATMOS-Accounts/t/13_bases_ldap.t

    r290 r445  
    11use strict; 
    22use warnings; 
    3 use Test::More tests => 5; 
     3use Test::More tests => 6; 
    44 
    55use_ok('LATMOS::Accounts::Bases'); 
     
    88use_ok('LATMOS::Accounts::Bases::Ldap::User'); 
    99use_ok('LATMOS::Accounts::Bases::Ldap::Group'); 
     10use_ok('LATMOS::Accounts::Bases::Ldap::Onlyaddress'); 
    1011 
Note: See TracChangeset for help on using the changeset viewer.