JavaScript aktivieren, um diese Seite anzuzeigen.

Der Befehl ldap_compare() vergleicht einen vorgegebenen Wert mit dem Wert eines LDAP-Attributs.

 

Dieser Befehl baut eine Verbindung zu einem LDAP-Server auf und prüft den Wert eines Attributs.

Wird keiner der angegebenen LDAP-Server erreicht, so wird die E-Mail mit einem temporären Fehler abgewiesen (420, could not bind to LDAP server).

 

Aufbau des Befehls

 

ldap_compare('ldap','attr','value');

 

 

Rückgabewert

Der Rückgabewert ist abhängig von der verwendeten Variable im LDAP-Suchstring

 

Parameter

Variablen verfügbar!

 

empty

anchor link Achtung:

Die Inhalte der Variablen im Parameter «Filter» weichen von den Standard-Variablen ab!

 

 

ldap

Der Parameter ist wie folgt aufgebaut:

'URI;BindDN;Password;SearchBase;Filter'

Die Bedeutung der einzelnen Teil Strings ist der folgenden Tabelle beschrieben:

 

Parameter

Beschreibung

URI

Angabe des LDAP-Servers, der abgefragt werden soll. Als Eingabe wird der Hostname oder die IP-Adresse akzeptiert. Mehrere Werte können kommagetrennt angegeben werden: In diesem Fall wird automatisch auf den jeweils nächsten Server zugegriffen, wenn der vorherige nicht erreicht werden kann.

 

empty

anchor link Hinweis:

ist mehr als ein LDAP Server eingetragen, so wird für jeden einzelnen Server eine Verbindung aufgebaut. Die Verbindungen werden zwischengespeichert. Die eigentliche Abfrage wird dann in der eingegebenen Reihenfolge der Server ausgeführt, bis die Abfrage erfolgreich ist. War eine Abfrage erfolglos, so wird die Verbindung aus dem Zwischenspeicher entfernt. Ist keine verbleibende Verbindung im Zwischenspeicher, so werden die Verbindungen neu aufgebaut.

BindDN

Eingabe des vollständigen Distinguished Name (DN) des (read-only) Accounts, welcher zur Suche des unter «SearchBase» angegebenen Pfades der LDAP Verzeichnisstruktur berechtigt ist.

Password

Das Passwort des unter BindDN angegebenen Benutzers

 

empty

anchor link Hinweis:

Semikolons «;» und Backslashes «\» im Password müssen jeweils mit einem Backslash als Sonderzeichen gekennzeichnet werden, also «\;», beziehungsweise «\\».

Somit müsste beispielsweise das Passwort

p4ss\w0rd;

wie folgt eingegeben werden:

p4ss\\w0rd\;

SearchBase

Suchpfad: Gibt den Zweig des LDAP Verzeichnisses an, in welchem mittels Suchfilter (siehe nächste Zeile) rekursiv nach dem Objekt gesucht werden soll, in welchem auf Vorhandensein des Attributs 'attr' mit dem angegebenen Wert 'value' geprüft werden soll.

Filter

Angabe des Such-Attributes /-Wertes, mittels welchem im Zweig der «SearchBase» nach dem Objekt suchen ist. Das Such-Attribut ist in der Regel «(mail=...)». Für das Auswerten der E-Mail Adresse(n) stehen die im Folgenden genannten Variablen zur Verfügung.

 

Variablen

empty

anchor link Achtung:

Die Inhalte der hier genannten Variablen weichen von den Standard-Variablen ab!

Würde der Parameter 'ldap' also zum Beispiel mit einer mittels setvar() geschriebenen Variable befüllt, so können Abweichungen beim Verarbeiten auftreten.

 

$sender

Diese Variable gibt den Envelope Absender der E-Mail aus.

Rückgabewert bei Verwenden dieser Variable

positiv

wenn der Wert 'value' für das angegebene Attribut 'attr', im mittels LDAP Suchstring (ldap/Filter) gefundenen Objekt, vorhanden ist.

negativ

wenn kein entsprechender Wert gefunden wurde.

 

empty

anchor link Achtung:

Da bei System E-Mails wie zum Beispiel auch Out Of Office (OOO) Meldungen kein Envelope Sender  eingetragen ist, würde die Abfrage mit dieser Variable scheitern.

Deshalb wird in diesem Fall das Verwenden von $from empfohlen.

 

$from

Diese Variable gibt die E-Mail Adresse des Absenders aus dem FROM-Header der E-Mail aus.

Dies ist insbesondere bei Abwesenheitsmeldungen notwendig, da in diesen kein Envelope-Sender gesetzt ist.

Ist der Sender des FROM-Headers nicht intern - also keiner Managed domain zuzuordnen - so wird auf das Vorhandensein des SENDER-Headers geprüft. Ist dieser vorhanden und der darin enthaltene Sender intern, so wird dieser anstatt des Senders aus dem FROM-Header ausgegeben. Dadurch werden Probleme beim Weiterleiten von Kalendereinladungen vermieden.

Rückgabewert bei Verwenden dieser Variable

positiv

wenn der Wert 'value' für das angegebene Attribut 'attr', im mittels LDAP Suchstring (ldap/Filter) gefundenen Objekt, vorhanden ist.

negativ

wenn kein entsprechender Wert gefunden wurde.

 

$rcptdomain

Diese Variable gibt die Empfängerdomäne einer E-Mail aus. Dabei wird die E-Mail in zwei Gruppen gesplittet. Eine Gruppe mit den Empfängern der Domäne(n), für welche der Wert 'value' für das angegebene Attribut 'attr', im mittels LDAP Suchstring (ldap/Filter) gefundenen Objekt vorhanden ist und eine weitere Gruppe für die Empfänger, welche nicht darüber verfügen.

Rückgabewert bei Verwenden dieser Variable

positiv

für die Gruppe, deren Wert 'value' für das angegebene Attribut 'attr', im mittels LDAP Suchstring (ldap/Filter) gefundenen Objekt, vorhanden ist.

negativ

für die Gruppe ohne Fund

 

$rcptaddress oder $recipient

Diese Variable gibt die Empfänger einer E-Mail aus. Dabei wird die E-Mail in zwei Gruppen gesplittet. Eine Gruppe mit den Empfängern, für welche der Wert 'value' für das angegebene Attribut 'attr', im mittels LDAP Suchstring (ldap/Filter) gefundenen Objekt vorhanden ist und eine weitere Gruppe für die Empfänger, welche nicht darüber verfügen.

Rückgabewert bei Verwenden dieser Variable

positiv

für die Gruppe mit dem entsprechenden Wert 'value'

negativ

für die Gruppe ohne dem entsprechenden Wert 'value'

 

$one_recipient

Enthält eine E-Mail mehrere Empfänger, so wird für alle Empfänger der Wert 'value' für das angegebene Attribut 'attr', in den jeweils mittels LDAP Suchstring (ldap/Filter) gefundenen Objekten, geprüft.

Rückgabewert bei Verwenden dieser Variable

positiv

wenn mindestens bei einem Empfänger der Wert 'value' für das angegebene Attribut 'attr' im LDAP Suchstring (ldap/Filter) gefunden wurde .

negativ

wenn bei keinem Empfänger ein entsprechender Wert 'value' gefunden wurde.

 

$all_recipients

Enthält eine E-Mail mehrere Empfänger, so wird für alle Empfänger der Wert 'value' für das angegebene Attribut 'attr', in den jeweils mittels LDAP Suchstring (ldap/Filter) gefundenen Objekten, geprüft.

Rückgabewert bei Verwenden dieser Variable

positiv

wenn bei allen Empfängern der Wert 'value' für das angegebene Attribut 'attr' im LDAP Suchstring (ldap/Filter) gefunden wurde.

negativ

wenn auch nur bei einem Empfänger der Wert 'value' nicht gefunden wurde.

 

 

 

attr

Attribut nach welchem im LDAP-Verzeichnis gesucht werden soll.

 

empty

anchor link Hinweis:

Sollten mehrere Attribute 'attr' mit dem gesuchten Namen gefunden werden, so werden alle Attribute ausgewertet (multi value).

 

value

Wert, welcher im abgefragten Attribut 'attr' vorkommen soll.

 

empty

anchor link Hinweis:

Enthält 'value' mehrere Einträge, so wird die Suche nach der ersten Übereinstimmung beendet.

Der Vergleich findet case-sensitive statt.

 

 

Beispiel 1

Die Zugehörigkeit des internen Absenders einer E-Mail «(mail=$from)» zur Gruppe «MailCrypt» soll im LDAP anhand des im envelope der E-Mail eingetragenen Absenders geprüft werden, zum Beispiel um festzustellen, ob dieser berechtigt ist, kryptographisch behandelte E-Mails zu senden.

Die Anweisung sieht wie folgt aus:

 

Zeile

Code

01

if (ldap_compare('192.168.10.10;CN=Peter Mueller,OU=SBSUsers,OU=Users,OU=MyBusiness,DC=Firma,DC=local;mypassword;OU=SBSUsers,OU=Users,OU=MyBusiness,DC=Firma,DC=local;(mail=$from)','memberOF','MailCrypt')) {

02

log(1,'Mitglied der AD-Gruppe MailCrypt, markiere E-Mail für Signatur');

03

tagsubject('[sign]');

04

} else {

05

log(1,'nicht Mitglied der AD-Gruppe Exchange, liefere unbehandelt aus');

06

deliver();

07

}

 

Erklärung

In (Zeile 01) wird

der LDAP-Server mit der IP-Adresse 192.168.10.10 (und dem Standardport 389) wird abgefragt.

der DistinguishedName (DN) des Benutzers unter welchem die Abfrage ausgeführt wird (dieser muss die entsprechenden Berechtigungen besitzen) lautet

CN=Peter Mueller,OU=SBSUsers,OU=Users,OU=MyBusiness,DC=Firma,DC=local

das folgende Passwort für diesen Benutzers verwendet

mypassword

der LDAP Pfad, in welchem der Suchfilter (mail=$sender) angewendet werden soll lautet

OU=SBSUsers,OU=Users,OU=MyBusiness,DC=Firma,DC=local

der Benutzer, dessen Gruppenzugehörigkeit festgestellt werden soll, anhand der Absender E-Mail Adresse aus dem FROM-Header der E-Mail (mail=$from) festgestellt.

Mindestens ein Wert des Attributes «memberOF» muss den Wert «MailCrypt» haben, damit der Rückgabewert positiv ist, und somit der Anwendugsblock aus (Zeile 02, 03) ausgeführt wird. Ist der Wert «MailCrypt» nicht im Attribut, beziehungsweise das Attribut «memberOF» nicht vorhanden, so ist der Rückgabewert negativ, wodurch der Anwendungsblock (Zeile 05, 06) ausgeführt wird.

 

Beispiel 1a

Die Parameter 'ldap' und 'attr' (Zeile 02) werden aus einer zuvor definierten Variable $ldap_attr (Zeile 01) ausgelesen.

 

Zeile

Code

01

if (compare('from','match','@customer1\.tld') {

02

setvar('ldap_attr','ldaps://directory.domain.tld;CN=Peter Mueller,OU=SBSUsers,OU=Users,OU=MyBusiness,DC=Firma,DC=local;mypassword;OU=SBSUsers,OU=Users,OU=MyBusiness,DC=firma,DC=local;(mail=$header_from)');

03

}

04

if (ldap_compare('$ldap_attr','memberOf','MailCrypt')) {

05

...

06

}

 

Erklärung

Dies ist insbesondere in mandantenfähigen Systemen hilfreich. So kann zunächst anhand der Absenderadresse der Zugang zu dem zum Mandanten gehörigen LDAP definiert werden. Die eigentliche LDAP-Verzweigung bleibt dann für alle Mandanten identisch.

 

empty

anchor link Achtung:

Bei diesem Beispiel ist zu beachten, dass für ldap_compare() der FROM-Header (mail=$from) verwendet werden soll.

Da setvar() jedoch die Standard-Variablen verwendet und bereits mit dem Schreiben der Variable auflöst, muss im Befehl setvar() die Variable $header_from verwendet werden.

 

Beispiel 2

Die Zugehörigkeit des internen Absenders einer E-Mail «(mail=$sender)» zur Gruppe «MailCrypt» soll im LDAP anhand des im FROM-Header der E-Mail eingetragenen Absenders geprüft werden, zum Beispiel um festzustellen, ob dieser berechtigt ist, kryptographisch behandelte E-Mails zu senden.

Die Anweisung sieht wie folgt aus:

 

Zeile

Code

01

ldap_compare('ldaps://192.168.10.10;CN=Peter Mueller,OU=SBSUsers,OU=Users,OU=MyBusiness,DC=firma,DC=local;mypassword;OU=SBSUsers,OU=Users,OU=MyBusiness,DC=Firma,DC=local;(mail=$sender)','memberOF','MailCrypt');

 

Erklärung

Prinzipiell macht der Ausdruck in diesem Beispiel das gleiche wie der in Beispiel 1 (Zeile 01), mit dem Unterschied, dass statt im FROM-Header im Envelope der E-Mail nach dem Absender gesucht wird.

 

Beispiel 3

Ausgangspunkt sind zwei unterschiedliche Groupware- (interne E-Mail ) Server (zum Beispiel Exchange und Domino), welche parallel eingesetzt werden.

Abgefragt soll werden, ob das Postfach wenigstens eines internen Empfängers einer eingehenden E-Mail - mit gegebenenfalls mehreren Empfängern - ein Exchange Postfach ist.

Die Anweisung sieht wie folgt aus:

 

Zeile

Code

01

if (ldap_compare('ldap://192.168.10.10,ldap://192.168.10.11;CN=Peter Mueller,OU=SBSUsers,OU=Users,OU=MyBusiness,DC=firma,DC=local;mypassword;OU=SBSUsers,OU=Users,OU=MyBusiness,DC=Firma,DC=local;(mail=$rcptaddress)','MailServerGruppe','Exchange')){

02

log(1,'Mitglied der AD-Gruppe Exchange');

03

} else {

04

log(1,'nicht Mitglied der AD-Gruppe Exchange');

05

}

 

Erklärung

Im LDAP Suchpfad (SearchBase) wird der Suchfilter (Filter) «(mail=$recipients)» angewendet (Zeile 01).

Für die Empfänger der E-Mail, welche im LDAP--Verzeichnis gefunden wurden, im Besitz des genannten Attributs sind und der Wert dieses Attributs der Vorgabe entspricht, wird der Log-Eintrag «Mitglied der AD-Gruppe Exchange» generiert (Zeile 02). Für alle anderen Empfänger wird der Log-Eintrag «nicht Mitglied der AD-Gruppe Exchange» generiert (Zeile 04).

 

Beispiel 4

Ausgangspunkt sind wieder zwei unterschiedliche Groupware-Server, welche parallel eingesetzt werden.

Es soll abgefragt werden, ob das Postfach wenigstens eines internen Empfängers einer eingehenden E-Mail - mit gegebenenfalls mehreren Empfängern - ein Exchange Postfach ist.

Die Anweisung sieht wie folgt aus:

 

Zeile

Code

01

ldap_compare('ldaps://myldap.local;CN=Peter Mueller,OU=SBSUsers,OU=Users,OU=MyBusiness,DC=firma,DC=local;mypassword;OU=SBSUsers,OU=Users,OU=MyBusiness,DC=Firma,DC=local;(mail=$one_recipient)','MailServer','Exchange');

 

Erklärung

Im LDAP Suchpfad (SearchBase) wird der Suchfilter (Filter) «(mail=$one_recipient)» angewendet.

Hat wenigstens ein Empfänger der E-Mail «(mail=$one_recipient)» den Wert «Exchange» im Attribut «MailServer» so ist der Rückgabewert positiv.

 

Beispiel 5

Es soll abgefragt werden, ob das Postfach aller internen Empfänger einer eingehenden E-Mail - mit gegebenenfalls mehreren Empfängern - Domino Postfächer sind.

Die Anweisung sieht wie folgt aus:

 

Zeile

Code

01

ldap_compare('ldaps://myldap.local;CN=Peter Mueller,OU=SBSUsers,OU=Users,OU=MyBusiness,DC=firma,DC=local;mypassword;OU=SBSUsers,OU=Users,OU=MyBusiness,DC=Firma,DC=local;(mail=$all_recipients)','MailServer','Domino');

 

Erklärung

Im LDAP Suchpfad (SearchBase) wird der Suchfilter (Filter) «(mail=$all_recipients)» angewendet.

Nur wenn alle internen Empfänger der E-Mail «(mail=$all_recipients)» den Wert «Domino» im Attribut «MailServer» haben, so ist der Rückgabewert positiv.

 

Beispiel 6

Geprüft werden soll, ob der interne Absender einer E-Mail «(proxyadresses=smtp:$sender)» ein User der Domäne firma.local ist.

Die Anweisung sieht wie folgt aus:

 

Zeile

Code

01

ldap_compare('ldaps://192.168.10.10;Administrator@myldap.local;mypassword;DC=firma,DC=local;(proxyaddresses=smtp:$sender)';'objectclass','user');

 

Erklärung

Im LDAP Suchpfad (SearchBase) wird der Suchfilter (Filter) «(proxadresses=smtp:$sender)» angewendet.

Wird die Absenderadresse des Envelope der E-Mail (smtp:$sender) in einem User-Object (objectclass=user) gefunden, so ist der Rückgabewert positiv.

Da in einem AD-User-Object im Attribut proxadresses auch E-Mail-Aliases aufgeführt werden, funktioniert diese Abfrage mit allen E-Mail Adressen des Users und nicht nur mit der Haupt-Adresse (Attribut mail).

  

Tastaturnavigation

F7 für Tastaturnavigation
ALT halten und Buchstaben drücken

Diese Info: ALT+q
Seitentitel: ALT+t
Seiteninhalt: ALT+b
Inhalte: ALT+c
Suche: ALT+s
Ebene höher: ESC