*** amavisd	Wed Jun 29 12:26:11 2005
--- amavisd.filter_attr	Fri Aug  5 17:04:53 2005
***************
*** 10597,10606 ****
    $_ = untaint($_) for @keys; # untaint keys
    #
    $_ = Net::LDAP::Util::escape_filter_value($_) for @keys;
!   (my $filter_pair) = $self->{query_filter} =~ /\(([^(]*=%m)\)/;
!   my ($filter_attr) = split /=/, $filter_pair;
!   my $filter_string = '|' . join('', map { "($filter_attr=$_)" } @keys);  
!   (my $filter = $self->{query_filter}) =~ s/$filter_pair/$filter_string/;
    #
    my($base) = $self->{base};
    if ($base =~ /%d/) {
--- 10597,10610 ----
    $_ = untaint($_) for @keys; # untaint keys
    #
    $_ = Net::LDAP::Util::escape_filter_value($_) for @keys;
!   my $filter = $self->{query_filter};
!   my @filter_attrs;
!   while ( (my $filter_pair) = $filter =~ /\(([^(]*=%m)\)/ ) {
!     my ($filter_attr) = split /=/, $filter_pair;
!     push(@filter_attrs, $filter_attr);
!     my $filter_string = '|' . join('', map { "($filter_attr=$_)" } @keys);  
!     $filter =~ s/$filter_pair/$filter_string/;
!   }
    #
    my($base) = $self->{base};
    if ($base =~ /%d/) {
***************
*** 10625,10630 ****
--- 10629,10644 ----
      my(@entry) = $result->entries;
      for my $entry (@entry) {
        my($match) = {};
+       my $filter_attr;
+ 
+       for my $attr (@filter_attrs) {
+         $attr = lc($attr);
+         if (exists $xref{ $entry->get_value($attr) }) {
+           $filter_attr = $attr;
+           last;
+         }
+       }
+ 
        for my $attr (@ldap_attrs,$filter_attr) {
          my($value);
          $attr = lc($attr);
