#!/usr/bin/perl -w use strict; use Errno; use esmith::ConfigDB; use esmith::AccountsDB; use esmith::util; use Net::LDAP; my $c = esmith::ConfigDB->open_ro; my $a = esmith::AccountsDB->open_ro; my $x = 0; # exit value my $l = $c->get('ldap'); my $status = $l->prop('status') || "disabled"; unless ($status eq "enabled"){ warn "Not running action script $0, LDAP service not enabled!\n"; exit(0); } my $domain = $c->get('DomainName') || die("Couldn't determine domain name"); $domain = $domain->value; my @accounts; my $account; my $event = shift || die "Event name is missing\n"; if ($event eq 'ldap-update' or $event eq 'bootstrap-ldap-save'){ @accounts = ($a->users); push(@accounts, $a->get('admin')); } else{ my @name = @ARGV; die "Account name argument missing." unless scalar (@name) >= 1; foreach my $name (@name){ $account = $a->get($name); die "Account $name not found.\n" unless defined $account; push @accounts, $account; } } my $base = esmith::util::ldapBase ($domain); my $pw = esmith::util::LdapPassword(); my $ldap = Net::LDAP->new('localhost') or die "$@"; $ldap->bind( dn => "cn=root,$base", password => $pw ); my $result; foreach my $acc (@accounts){ my $user = $acc->key; my $postalcode = $acc->prop('PostalCode') || ''; my $mobile = $acc->prop('Mobile') || ''; my $extension = $acc->prop('Extension') || ''; my $fax = $acc->prop('Fax') || ''; my $function1 = $acc->prop('Function1') || ''; my $function2 = $acc->prop('Function2') || ''; my $function3 = $acc->prop('Function3') || ''; my $function4 = $acc->prop('Function4') || ''; my $initials = $acc->prop('Initials') || ''; my $dshell = $acc->prop('DesktopShell') || ''; my $preferredemail = $acc->prop('PreferredEmail') || ''; my $category = $acc->prop('Category') || ''; $preferredemail = "$user\@$domain" if ($preferredemail eq ''); my $web = $acc->prop('Url') || ''; my (@postalcode,@mobile,@extension,@fax,@titles,@initials,@dshell,@preferredemail,@category,@web) = (); @postalcode = ($postalcode) unless ($postalcode eq ''); @mobile = ($mobile) unless ($mobile eq ''); @extension = ($extension) unless ($extension eq ''); @fax = ($fax) unless ($fax eq ''); @category = ($category) unless ($category eq ''); foreach ($function1, $function2, $function3, $function4){ push @titles, $_ if ($_ ne ''); } @dshell = ($dshell) unless ($dshell eq ''); @preferredemail = ($preferredemail) unless ($preferredemail eq ''); @web = ($web) unless ($web eq ''); $result = $ldap->modify( "uid=$user,ou=Users,$base", replace => { postalCode => \@postalcode, mobile => \@mobile, extensionNumber => \@extension, facsimileTelephoneNumber => \@fax, title => \@titles, initials => \@initials, desktopLoginShell => \@dshell, preferredMail => \@preferredemail, businessCategory => \@category, labeledURI => \@web } ); $result->code && ($x = 255, warn "failed to modify entry uid=$user,ou=Users,$base: ", $result->error); } $ldap->unbind; exit ($x);