
14c14 < ifelse(len(X`'_ARG_), `1', `local:/var/lib/imap/socket/smmapd', _ARG_)) --- > ifelse(len(X`'_ARG_), `1', `local:/var/imapd/socket/smmapd', _ARG_))
Eine Sache, die verdammt nervig ist: sendmail nimmt Mail entgegen, und als confLOCAL_MAILER ist cyrusv2 definiert; sendmail übergibt diese Mails, jedoch prüfen weder er noch der cyrus, ob die Empfängeradresse tatsächlich existiert. Existiert sie nicht, wird postmaster benachrichtigt — was im Ernstfall für einen Overhead von mehreren 100 Mails pro Tag führen kann.
Schauen wir uns das einmal genauer an; ich habe einen User mary, der eine lokale cyrus-Mailbox hat; den User blafasel gibt es nicht.
$ /usr/sbin/sendmail -bv mary mary... deliverable: mailer cyrusv2, user mary $ /usr/sbin/sendmail -bv blafasel mary... deliverable: mailer cyrusv2, user blafasel
Sprich: dem sendmail ist es völlig egal, der schiebt alles an cyrus weiter. Um das zu verhindern, sind einige Änderungen an der Konfiguration nötig — in erster Linie benötigen wir ein zusätzliches FEATURE-File für den sendmail:
$ cd /usr/share/sendmail-cf/feature/ $ wget http://www.bsdbox.de/downloads/emailserver/ckuser_cyrus.m4
In meinem Fall musste dieses File ein wenig modifiziert werden; mein cyrus (unter Fedora) legt all seine sockets nach /var/lib/imap/socket/, das File gibt einen anderen Default-Wert aus:
14c14 < ifelse(len(X`'_ARG_), `1', `local:/var/lib/imap/socket/smmapd', _ARG_)) --- > ifelse(len(X`'_ARG_), `1', `local:/var/imapd/socket/smmapd', _ARG_))
Also den Pfad zum Socket entsprechend anpassen und sich merken (!). Als nächstes muss die Konfiguration des sendmail angepasst werden; hierzu wird die sendmail.mc editiert und ziemlich am Ende (nach define(`confLOCAL_MAILER',`cyrusv2')dnl) folgendes hinzugefügt:
FEATURE(`ckuser_cyrus')dnl
Anschließend die sendmail.cf neu generieren:
$ m4 sendmail.mc > sendmail.cf
Zuletzt muss auch dem cyrus gesagt werden, dass er etwas mit diesem Socket zu tun hat; anzupassen ist /etc/cyrus.conf, meine sieht beispielsweise nun so aus:
START { recover cmd="ctl_cyrusdb -r" idled cmd="idled" } SERVICES { ##imap cmd="imapd" listen="imap" prefork=5 imaps cmd="imapd -s" listen="imaps" prefork=1 ##pop3 cmd="pop3d" listen="pop3" prefork=3 pop3s cmd="pop3d -s" listen="pop3s" prefork=1 ##sieve cmd="timsieved" listen="sieve" prefork=0 ##nntp cmd="nntpd" listen="nntp" prefork=3 ##nntps cmd="nntpd -s" listen="nntps" prefork=1 ##lmtp cmd="lmtpd" listen="lmtp" prefork=0 lmtpunix cmd="lmtpd" listen="/var/lib/imap/socket/lmtp" prefork=1 smmapd cmd="smmapd" listen="/var/lib/imap/socket/smmapd" prefork=1 ##notify cmd="notifyd" listen="/var/lib/imap/socket/notify" proto="udp" prefork=1 } EVENTS { checkpoint cmd="ctl_cyrusdb -c" period=30 delprune cmd="cyr_expire -E 3" at=0400 tlsprune cmd="tls_prune" at=0400 squatter cmd="/usr/lib/cyrus-imapd/squatter -r *" period=120 }
Nun den cyrus neu starten — aufmerksam das Logfile beobachten! Kommen keine Fehlermeldungen (beziehungsweise nach Behebung eventueller Fehler) kann nun auch der sendmail durchgestartet werden. Auch hier alles okay? Nun denn — ein Testlauf:
$ /usr/sbin/sendmail -bv mary mary... deliverable: mailer cyrusv2, user mary $ /usr/sbin/sendmail -bv blafasel blafasel... Mailbox is not available.