Bug 84784

git-svn-id: svn://svn.office.custis.ru/3rdparty/bugzilla.org/trunk@1356 6955db30-a419-402b-8a0d-67ecbb4d7f56
master
vfilippov 2011-08-30 13:30:42 +00:00
parent ebb368126b
commit b444443324
1 changed files with 17 additions and 9 deletions

View File

@ -1,4 +1,6 @@
#!/usr/bin/perl -w #!/usr/bin/perl -w
# FIXME very specific to CustIS usage. Must be moved away.
# Email LDAP alias getter for email_in.pl mail handler # Email LDAP alias getter for email_in.pl mail handler
# Config file /etc/ldap/bugzilla-getusers.conf must be in the form of: # Config file /etc/ldap/bugzilla-getusers.conf must be in the form of:
# { # {
@ -60,12 +62,12 @@ my $sth = $dbh->prepare("INSERT INTO emailin_aliases SET address=?, userid=?, fr
print "Clearing aliases having fromldap=1\n" if $verbose; print "Clearing aliases having fromldap=1\n" if $verbose;
$dbh->do("DELETE FROM emailin_aliases WHERE fromldap=1"); $dbh->do("DELETE FROM emailin_aliases WHERE fromldap=1");
my %a = (); my %a = ();
my @bind = map { @$_ } @$users; my @bind = map { @{$_->{emails}} } @$users;
my $sql = "SELECT login_name, userid FROM profiles WHERE disabledtext='' AND login_name IN (" . join(",", ("?") x scalar @bind) . ")"; my $sql = "SELECT login_name, userid FROM profiles WHERE disabledtext='' AND login_name IN (" . join(",", ("?") x scalar @bind) . ")";
my %uids = map { @$_ } @{ $dbh->selectall_arrayref($sql, undef, @bind) }; my %uids = map { @$_ } @{ $dbh->selectall_arrayref($sql, undef, @bind) };
foreach (@$users) foreach my $user (@$users)
{ {
my $uid = [ map { $uids{$_} } @$_ ]; my $uid = [ map { $uids{$_} } @{$user->{emails}} ];
my ($realid, $reallogin); my ($realid, $reallogin);
foreach my $i (0..$#$uid) foreach my $i (0..$#$uid)
{ {
@ -73,14 +75,14 @@ foreach (@$users)
if ($uid->[$i] && (!$realid || $realid > $uid->[$i])) if ($uid->[$i] && (!$realid || $realid > $uid->[$i]))
{ {
$realid = $uid->[$i]; $realid = $uid->[$i];
$reallogin = $_->[$i]; $reallogin = $user->{emails}->[$i];
} }
} }
if ($realid) if ($realid)
{ {
# found user # found user
my $i = 0; my $i = 0;
for (@$_) for (@{$user->{emails}})
{ {
print "Adding alias $_ for user $realid ($reallogin)\n" if $verbose; print "Adding alias $_ for user $realid ($reallogin)\n" if $verbose;
$sth->execute($_, $realid, !($i++)) unless $a{$_}++; $sth->execute($_, $realid, !($i++)) unless $a{$_}++;
@ -103,10 +105,11 @@ sub get_domain_users
$mesg = $LDAPconn->search( $mesg = $LDAPconn->search(
base => $config->{LDAPBaseDN}, base => $config->{LDAPBaseDN},
filter => '(&(&(proxyaddresses=*)(!(msExchHideFromAddressLists=TRUE))(objectclass=user)))', filter => '(&(&(proxyaddresses=*)(!(msExchHideFromAddressLists=TRUE))(objectclass=user)))',
attrs => "*", attrs => '*',
); );
my $user_entry; my $user_entry;
my $name;
my $mail; my $mail;
my @smtp; my @smtp;
my $users = []; my $users = [];
@ -115,8 +118,9 @@ sub get_domain_users
for my $i (0..$entries-1) for my $i (0..$entries-1)
{ {
$user_entry = $mesg->shift_entry; $user_entry = $mesg->shift_entry;
$mail = $user_entry->get_value("mail"); $name = $user_entry->get_value('sAMAccountName');
@smtp = $user_entry->get_value("proxyAddresses"); $mail = $user_entry->get_value('mail');
@smtp = $user_entry->get_value('proxyAddresses');
if ($mail) if ($mail)
{ {
my $aliases = { lc $mail => 1 }; my $aliases = { lc $mail => 1 };
@ -128,8 +132,12 @@ sub get_domain_users
$aliases->{lc $y} = 1; $aliases->{lc $y} = 1;
} }
} }
$mail =~ s/^.*\@/$name@/so;
delete $aliases->{lc $mail}; delete $aliases->{lc $mail};
push @$users, [ lc $mail, keys %$aliases ]; push @$users, {
name => lc $name,
emails => [ lc $mail, keys %$aliases ],
};
} }
} }