**UPDATE: **seit Z-Push 2.2 ist dieser Workaround nicht mehr notwendig, da Z-Push standardmäßig das Flag “mobile” prüfen kann (standardmäßig aktiv, kann pro Nutzer deaktiviert werden).

Mit Zarafa 7.1 wurde das LDAP Attribut  “zarafaenabledfeatures” eingeführt, welches mit wenigen Handgriffen ebenfalls zur Steuerung von Z-Push Accounts genutzt werden kann. Der Vorteil an dem im folgenden aufgezeigten Weg liegt darin, dass hierfür keine Modifikationen am Z-Push Code vorgenommen werden müssen und somit zukünftige Updates erleichtert werden. “zarafaenabledfeatures” ist ein Freitextfeld welches einen beliebigen String (wie eben “imap” oder “pop3”) aufnehmen kann. Dies erlaubt ohne großen Aufwand weitere Filtermerkmale wie z.B. “z-push” zu definieren und bei entsprechenden Nutzern zu hinterlegen. Sobald dieser Wert für alle gewünschten Nutzer hinterlegt ist, können wir mit der Modifikation der Apache Konfiguration fortfahren. Bei direktem Aufruf von http://server/Microsoft-Server-ActiveSync werden wir von einem Apache Authentifizierungsdialog begrüßt, welcher über den Z-Push Code getriggert wird. Diesen Umstand können wir zu unserem Vorteil nutzen, indem wir - bereits bevor der Dialog durch Z-Push getriggert wird - im Apache eine Authentifizierung durchführen lassen. Dies funktioniert da eine einmal durchgeführte Anmeldung in der Session gespeichert wird und an die dahinter liegende Applikation “durchgereicht” wird (funktioniert z.B. auch mit ownCloud). Um den Apache Webserver einen LDAP Baum zur Authentifizierung nutzen zu lassen sind dann nur noch die folgenden zwei Änderungen nötig:

  1. mod_authnz_ldap aktivieren, dies geht z.B. mittels “a2enmod authnz_ldap”
  2. den folgenden Code Block innerhalb der Directory Sektion im Z-Push vHost einfügen (und natürlich an die eigene Umgebung anpassen):
AuthName "Please login with your credentials"
AuthType Basic
AuthBasicProvider ldap
AuthzLDAPAuthoritative   Off
AuthLDAPBindDN "Benutzer-mit-Lesezugriff"
AuthLDAPBindPassword "ldap-password"
AuthLDAPURL ldap://127.0.0.1/dc=zarafa,dc=local?uid?sub?(&(objectclass=zarafa-user)(zarafaEnabledFeatures=z-push))
AuthUserFile /dev/null
require valid-user

Der Entscheidende Punkt dieser Ergänzung liegt in AuthLDAPURL. Diese  definiert:

  • wo das LDAP läuft
  • wie die Basis DN lautet
  • wie das Login Attribut heißt
  • und welcher Filter angewendet werden soll.

Das Apache Handbuch definiert die Syntax wie folgt: ldap://host:port/basedn?attribute?scope?filter. Die oben genannte Beispielsyntax nutzt also das Attribut uid als Benutzername und sollte dieser Benutzer die Objectklasse zarafa-user und das Attribut zarafaEnabledFeatures mit dem Wert z-push ist die Anmeldung erfolgreich. In allen anderen Fällen wird die Anmeldung abgeleht.