[Postfixbuch-users] LDAP Map Query Problem

Alexander Dalloz ad+lists at uni-x.org
Fr Jun 25 16:53:36 CEST 2010


Hallo zusammen,

ich habe ein Problem mit einem aus einem LDAP Backend dynamisch
generierten Alias, das ich nicht eleminiert bekomme und benötige eure
Hilfe. Der virtuelle Alias findet sich selbst und führt dann zu einem
Bounce. Die all at example.com Adresse ist zwar nur intern nutzbar, aber dort
trotzdem mindestens lästig.

# postconf -n virtual_alias_maps
virtual_alias_maps = hash:/etc/postfix/virtual_aliases,
proxy:ldap:/etc/postfix/ldap-alias_map.cf,
proxy:ldap:/etc/postfix/ldap-aliases_map.cf,
proxy:ldap:/etc/postfix/ldap-all_map.cf, hash:/etc/mailman/virtual-mailman

# /etc/postfix/ldap-all_map.cf
#
# lookup for the dynamic all dispatcher alias

server_host = zcp.example.com
server_port = 389
version = 3
bind = no
search_base = ou=Aliases,dc=example,dc=com
scope = one
query_filter = (mail=%s)
special_result_attribute = memberURL
result_attribute = mail

# /usr/lib/mozldap/ldapsearch -1 -h zcp.example.com -p 636 -Z -P
/etc/dirsrv/slapd-zcp -x -s sub -b "ou=Aliases,dc=example,dc=com"
"(&(objectclass=zarafa-contact)(uid=allverteiler))"
dn: mail=all at example.com,ou=Aliases,dc=example,dc=com
mail: all at example.com
cn: Funktion Allverteiler
sn: Allverteiler
givenName: Funktion
uid: allverteiler
objectClass: top
objectClass: zarafa-contact
objectClass: inetorgperson
objectClass: organizationalPerson
objectClass: person
objectClass: groupofurls
uidNumber: 5048
memberURL:
ldap:///dc=example,dc=com?mail?sub?(|(&(objectclass=zarafa-user)(mail=*@example.com)(!(zarafaResourceType=*))(!(title=hidden*)))(&(objectclass=zarafa-contact)(mail=*@example.com)(title=explicitlyall*)))

Der Kniff in der Postfix LDAP Suche ist "special_result_attribute", das
seinerseits eine Suche über den in "memberURL" definierten Filter
ausführt. Das funktioniert auch wie in "man 5 ldap_table" dokumentiert.
(Die Verwendung des Attributes "title" dient dem Ausblenden von richtigen
Konten und dem expliziten Einblenden von Aliasen in den all at -Verteiler.)

Führe ich die LDAP Suche manuell per ldapsearch mit dem "memberURL" Filter
durch, so werden alle gewünschten Einträge gefunden. "all at example.com"
nicht, denn dieser Alias ist ja auch nicht explizit per "title" Attribut
inkludiert (wäre auch sinnfrei).

# /usr/lib/mozldap/ldapsearch -1 -h zcp.example.com -p 636 -Z -P
/etc/dirsrv/slapd-zcp -x -s sub -b "dc=example,dc=com"
'(|(&(objectclass=zarafa-user)(mail=*@example.com)(!(zarafaResourceType=*))(!(title=hidden*)))(&(objectclass=zarafa-contact)(mail=*@example.com)(title=explicitlyall*)))'
mail | grep "all"

[ leeres Ergebnis ]

Führe ich dann aber das Postfix LDAP Map Query manuell durch, dann habe
ich plötzlich den "all at example.com" Alias mit in der Liste.

# postmap -q "all at pexample.com" ldap:/etc/postfix/ldap-all_map.cf | tr ','
'\n' | grep "all"
all at example.com

Wo kommt dieses Resultat her - feature by design? Und besser noch, wie
verhindere ich dies?

Keine Lösung ist, den in "memberURL" definierten LDAP Filter zu erweitern.
Diese Abfrage bringt ja den Alias selbst nicht zutage.

Keine Lösung ist es auch, den "query_filter" in der Postfix LDAP Map um
ein "nicht all at example.com" zu erweitern, da dann natürlich gar nichts
mehr am Ende rausfällt. Aus dem "result" müsste es irgendwie raus. Aber
wieso kommt es (der Alias) überhaupt da rein?

Danke fürs Mitdenken und die Lösung :-)

Gruß

Alexander






Mehr Informationen über die Mailingliste Postfixbuch-users