Hello,

Jeremy Harris <[email protected]> (Mi 27 Aug 2014 19:33:18 CEST):
…
> > attributetype (
> >     eximAttribute:1 NAME ('x-MailPrimaryAddress' 'x-MailAddress' 
> > 'x-MailOfficialAddress') 
> >     DESC 'official mail address'
> >     SINGLE-VALUE
> >     SUP mail )
> >     
> > attributetype (
> >     eximAttribute:2 NAME ('x-MailAlternateAddress' 'x-MailAlias') 
> >     DESC 'alternate mail address (alias)'
> >     SUP mail )
> 
> You may be able to tell I don't really talk LDAP :)
> 
> What do we want the Exim expansion's view of the results to be?
> Labelled by the base object class, or by the text
> "x-MailAlternateAddress" (or whchever)?

I'd say, by the name of the attribute.

> diff --git a/src/src/lookups/ldap.c b/src/src/lookups/ldap.c
> index f77229d..64af12d 100644
…

Here comes a shorter patch. I'll test yours too.

diff --git a/src/src/lookups/ldap.c b/src/src/lookups/ldap.c
index f77229d..ef7ed9e 100644
--- a/src/src/lookups/ldap.c
+++ b/src/src/lookups/ldap.c
@@ -797,7 +797,13 @@ while ((rc = ldap_result(lcp->ld, msgid, 0, timeoutptr, 
&result)) ==
 
             DEBUG(D_lookup) debug_printf("LDAP attr loop %s:%s\n", attr, 
value);
 
-            if (values != firstval)
+           /* In case we requested one attribute only but got
+            * several times into that attr loop, we need to append
+            * the additional values. (This may happen if you derive 
+            * attributeTypes B and C from A and then query for A.)
+            * In all other cases we detect the different attribute
+            * and append only every non first value. */
+           if ((attr_count == 1 && data) || (values != firstval))
               data = string_cat(data, &size, &ptr, US",", 1);
 
             /* For multiple attributes, the data is in quotes. We must escape

For testing I'm using the following LDAP entry:

    dn: uid=heiko,dc=schlittermann,dc=de
    x-MailPrimaryAddress: [email protected]
    description: a
    description: b,c
    x-MailAlternateAddress: h,[email protected]
    x-MailAlternateAddress: [email protected]
    x-MailAlternateAddress: [email protected]

$ ../../build-Linux-x86_64/exim -be '${lookup 
ldap{ldap:///dc=schlittermann,dc=de?mail?sub?uid=heiko}}'
[email protected],h,,[email protected],[email protected],[email protected]

$ ../../build-Linux-x86_64/exim -be '${lookup 
ldap{ldap:///dc=schlittermann,dc=de?description,mail?sub?uid=heiko}}'
x-MailPrimaryAddress="[email protected]" description="a,b,,c" 
x-MailAlternateAddress="h,,[email protected],[email protected],[email protected]"


But, I'm not sure if I didn't break anything else :)


    Best regards from Dresden/Germany
    Viele Grüße aus Dresden
    Heiko Schlittermann
-- 
 SCHLITTERMANN.de ---------------------------- internet & unix support -
 Heiko Schlittermann, Dipl.-Ing. (TU) - {fon,fax}: +49.351.802998{1,3} -
 gnupg encrypted messages are welcome --------------- key ID: 7CBF764A -
 gnupg fingerprint: 9288 F17D BBF9 9625 5ABC  285C 26A9 687E 7CBF 764A -
(gnupg fingerprint: 3061 CFBF 2D88 F034 E8D2  7E92 EE4E AC98 48D0 359B)-

Attachment: signature.asc
Description: Digital signature

-- 
## List details at https://lists.exim.org/mailman/listinfo/exim-users
## Exim details at http://www.exim.org/
## Please use the Wiki with this list - http://wiki.exim.org/

Reply via email to