Dovecot IMAP Shared Folders

  • Hallo,


    ich habe heute erfolglos versucht, Dovcot-IMAP-Roundcube das Teilen von Ordnern beizubringen. Das war meine Vorlage: http://wiki1.dovecot.org/SharedMailboxes/Shared


    Ich habe es auch geschafft, per Telnet und SETACL Freigaben zu setzen, ohne dass es eine Fehlermeldung gibt. Auch wird eine dovecot-acl im Ordner des Freigebenden angelegt.


    Allerdings passiert nichts in Roundcube und so wie ich das aus der Doku von RoundCube verstanden habe, kann es das von Haus aus, wenn der IMAP-Server das anbietet.


    Hat zufällig jemand SharedFolders im Einsatz? Und wenn ja, wo finde ich die Stelle an der ich weiterlesen muss?


    Danke vorab,


    Oskar

    Computer sind unglaublich dumme Geräte,
    die unglaublich intelligente Sachen können.
    Programmierer sind unglaublich intelligente Leute,
    die unglaublich dumme Sachen produzieren.
    ("Die Presse", 30.8.1999)

  • Okay. Ich habe es geschafft! Teilen von Ordnern zwischen Nutzern auf dem selben Server - oder auch eingeschränkt, innerhalb einer Domain - Funktioniert einwandfrei über RoundCube, Thunderbird (auch die Rechteverwaltung) und wahrscheinlich auch in jedem anderen IMAP-Client. Ich muss das jetzt nur noch mit LiveConfig in Einklang bringen.


    Ich teile hier gerne meine Lösung. Aber bevor ich mir jetzt die Finger wund schreibe, die Frage: Besteht hier überhaupt interesse?


    Ich mache das, weil ich geteilte Ordner für unglaublich nützlich halte. Und da ich immer mal wieder die Frage erhalten habe, ob unsere Mailserver denn auch Exchange könnten, habe ich kürzlich endlich verstanden, was die Kunden denn überhaupt damit meinen. Geteilte Ordner! Das ist es, was gerade gerwerbliche Kunden schmerzlich vermissen.


    Ich arbeite dann mal noch ein bisschen an der custom.lua!


    Gut's Nächtle,


    Oskar

    Computer sind unglaublich dumme Geräte,
    die unglaublich intelligente Sachen können.
    Programmierer sind unglaublich intelligente Leute,
    die unglaublich dumme Sachen produzieren.
    ("Die Presse", 30.8.1999)

  • Okay. Bin noch dran. Create und Change/Update sind soweit abgefrühstückt. Muss noch ein Delete einbauen und dann fasse ich das hier zusammen! ... +123456789 habe ich auch noch nie bekommen. ;)

    Computer sind unglaublich dumme Geräte,
    die unglaublich intelligente Sachen können.
    Programmierer sind unglaublich intelligente Leute,
    die unglaublich dumme Sachen produzieren.
    ("Die Presse", 30.8.1999)

  • Shared Folders mit Dovecot unter LiveConfigs Kontrolle (Teil 1 - Erläuterung)


    Mein Ziel war es, Shared Folders zu ermöglichen und dabei LiveConfig so wenig wie möglich zu verbiegen, da ich bei kommenden Updates keine Lust habe die eigenen Anpassungen neu zu integrieren. Die in der offiziellen Dokumentation beschriebene Vorgehensweise funktioniert mit der von LiveConfig erstellten Konfiguration nicht. Ich habe mehrere Tage erfolglos mit allen möglichen Parametern und deren Kombinationen herumgespielt, bis ich mir die Idee zur Lösung kam.


    Das Problem:


    LiveConfig erstellt die Benutzerverzeichnisse nach dem Schema "vertrag/postfachnummer". Nimmt man die Konfigurationsbeispiele, die sich restlos alle um die Variablen %h, %%h, %u, %%u, %n, %%n, %d und %%d drehen und mit dem separator '/' arbeiten, funktioniert es nicht, weil aus irgendeinem Grund %h nicht zurückgegeben wird.


    Nun werden die Folder eines Kontos in der LC-Konfiguration mit dem Schema (separator) '.' angelegt. Die Versuche damit scheitern, weil Dovecot bei der Anlage des Namespaces "shared" den Punkt im Benutzernamen dann offensichtlich auch als Separator erkennt, so dass aus dem Nutzer user@domain.tld user@domain wird. Somit ist dieses Verfahren von vornherein ausgeschlossen.


    Mir kam die Idee, Dovecot - oder besser ACL vorzugaukeln, es würde sich um eine "Out of the Box-Config" handeln. Und das geht recht einfach mit Symlinks. Statt der Variablen %h und %%h kann man auf jeden Fall %u, %d und %n (auch als %%) verwenden.


    Zunächst habe ich einen Symlink von /var/mail/domain.tld auf /var/mail/vertragX gesetzt. Dann einen weiteren Symlink von /var/mail/vertragx/alias auf /var/mail/vertragX/alias. Die Pfade im Namespace habe ich dann entsprechend auf /var/mail/%d/%n/ angepasst und die Freigabe-Tests gemacht. Diese waren dann endlich erfolgreich.


    Diese Lösung ist aber nicht optimal, denn es kann zu kollisionen kommen. Angenommen vertragX hat die Domains doma.tld und domb.tld. Darin zwei Konten: info@doma.tld (vertragX/1) und info@domb.tld (vertragX/2). Da doma.tld und domb.tld symlinks auf den VertragX sind, kommt es zum Konflikt bei der Anlage des Symlinks vertragX/info.


    Also eine andere Lösung:


    Es ist auch möglich den Benutzernamen als Dateipfad zu setzen und innerhalb der Namespace-Config zu verwenden. Das ist problemlos möglich und führt keinesfalls zu einem Konflikt. So setzen wir /var/mail/%u/ oder /var/mail/%n@%d/ an den entsprechenden Stellen in der Dovecot-Config und schon funktioniert es.


    Meine Lösung erlaubt das Teilen von Ordnern von und zu jedem Account eines Servers. Es ist auch möglich das Teilen auf Accounts innerhalb eines Vertrages oder noch restriktiver, innerhalb einer Domain zu beschränken. Dazu schreibe ich etwas im Nachtrag, nach dem folgenden Post mit der Copy & Paste-fähigen Lösung.


    ... to be continued ...

    Computer sind unglaublich dumme Geräte,
    die unglaublich intelligente Sachen können.
    Programmierer sind unglaublich intelligente Leute,
    die unglaublich dumme Sachen produzieren.
    ("Die Presse", 30.8.1999)

    Einmal editiert, zuletzt von WebOscar ()

  • Die hier vorgestellte Lösung wurde auf Debian Wheezy gebaut. Ggf. müssen Pfade in anderen Distris angepasst werden!

    In der Datei dovecot.local.conf werden folgende Einträge benötigt:



    ... ob service dict wirklich benötigt wird, weiß ich gar nicht. Es fand Einzug während meiner Tests und ich habe nicht getestet, ob es auch ohne geht ...


    Und nicht vergessen, LiveConfig die Server-Config neu schreiben zu lassen!


    Als nächstes benötigen wir ein Script, das die Symlinks setzt. Das habe ich im Dafür habe ich mir dieses Verzeichnis angelegt: /usr/lib/liveconfig/custombin/

    Darin erstellt Ihr updatemaildirlinks.sh mit folgendem Inhalt:



    Nicht vergessen hinterher ein chmod 755 auf diese Datei auszuführen.


    Jetzt kommt noch ein bisschen Code in die custom.lua damit unser Script auch bei Bedarf ausgeführt wird. Falls die custom.lua noch nicht vorhanden ist, wird sie in /usr/lib/liveconfig/lua erstellt und bekommt diesen Inhalt:



    liveconfig oder lcclient neu starten und das Logfile beobachten. Mailclient öffnen und testen!


    Im nächsten Post kommen noch Besonderheiten und Bemerkungen ...

    Computer sind unglaublich dumme Geräte,
    die unglaublich intelligente Sachen können.
    Programmierer sind unglaublich intelligente Leute,
    die unglaublich dumme Sachen produzieren.
    ("Die Presse", 30.8.1999)

    3 Mal editiert, zuletzt von WebOscar ()

  • Sicher hätte sich das auch komplett in der custom.lua realisieren lassen. Aber da ich gestern zum ersten Mal damit gearbeitet habe und ich zügig zu einer Lösung kommen wollte, habe ich mich für ein Shell-Script entschieden. Mal sehen, wenn ich Zeit und Muße habe, mache ich das vielleicht nochmal komplett in der custom.lua.


    Was passiert mit der custom.lua und dem Script?


    Wenn man ein Konto anlegt, ändert oder löscht wird über die custom.lua das Skript aufgerufen. Bereits vorhandene Mailkonton können noch keine Ordner freigeben. Es genügt aber ein Konto aufzurufen, und z. B. im Alias ein Zeichen einzufügen und wieder zu löschen und dann auf speichern zu klicken, damit das Script angetriggert wird. Dabei werden noch nicht vorhandene Links gesetzt. Bei neuen Accounts funktioniert es sowieso, Änderungen werden ebenfalls richtig umgesetzt und nicht mehr vorhandene Links werden gelöscht, nachdem ein Konto gelöscht wurde.


    Wie gibt man Ordner frei?


    Ich habe es nur mit Thunderbird und Roundcube probiert


    Für Thunderbird wird ein Plugin benötigt (die Anzeige von freigegebenen Ordnern funktioniert OOTB). Dazu verweise ich auf diesen Link: https://addons.mozilla.org/de/…addon/imap-acl-extension/


    Roundcube kann ebenfalls Ordnerfreigaben verwalten und dabei die Rechte noch filigraner setzen, als es in Thunderbird geht. Dazu muss man allerdings sicherstellen, dass das ACL-Plugin geladen ist. Das kann man im Installationsverzeichnis von Roundcube in der Datei config/config.inc.php erledigen. Der entsprechende Eintrag 'acl' sieht bei mir so aus:


    Code
    $config['plugins'] = array(
        'password',
        'archive',
        'zipdownload',
        'acl',
    );


    Setzt auf keinen Fall subscriptions = yes im shared namespace in der dovecot.local.conf! Das hat zur Folge, dass die abonnierten Ordner des Nutzers, der einen neue Freigabe erhält, auf die Freigaben reduziert werden! Und das passiert bei jeder neuen Freigabe für einen Nutzer. So kann er zwar den oder die neuen, freigegebenen Ordner sehen aber wenn er eine Reihe eigener, selbst erstellter Ordner hat, werden diese nicht mehr angezeigt. (Ich wäre daran beinahe verzweifelt.) Er muss seine Ordner dann erneut abonnieren.


    Es ist wohl besser dem Nutzer Bescheid zu geben, er soll mal die neue Freigabe manuell abonnieren. Er kann sie in der entsprechenden Funktion des eMail-Client auf jeden Fall sehen, anklicken und abonnieren. Fertig.


    Ich glaube, ich habe fertig! Fragen?


    Viele Grüße und viel Spaß damit,


    Oskar

    Computer sind unglaublich dumme Geräte,
    die unglaublich intelligente Sachen können.
    Programmierer sind unglaublich intelligente Leute,
    die unglaublich dumme Sachen produzieren.
    ("Die Presse", 30.8.1999)

    Einmal editiert, zuletzt von WebOscar ()

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!