--On Thursday, 26 February, 2004 18:10 +0100 Andrzej Filip <[EMAIL PROTECTED]> wrote:

Below please find modified sendmail.mc lines to make sendmail check cyrus
mailbox existence using socket map [instead of fstat map]:
----->
dnl
dnl *.mc file modifications for real time integration of cyrus and
sendmail
dnl
dnl It makes sendmail define user map in sendmail.cf
define(`LUSER_RELAY')
LOCAL_CONFIG
# cyrus - map for file stat checking
Kcyrus socket local:_path_to_smmapd_socket_
dnl
dnl
LOCAL_RULESETS
SLocal_localaddr
# Treat system mailboxes as usual
R$+             $: $(user $1 $)
R$+ <>          $@
# Detect cyrus mailboxes - deliver via cyrus mailer
R$+             $: $1 <$(cyrus $1 $: $)>
R$<$+>          $# cyrus $: @$1
# Treat remaining as usual
R$*             $@
<-----

I hope will publish next version next week:
* capable to support cyrus virtual domains
* milter-sender friendly
[current version creates problems with checking local address validity]

I couldn't get the above config to work in my patched sendmail 8.12.11, so I've been playing around with it for several days now, and I've got the following working for 99% of my situations. The only time it does NOT work is in one virtual host situation. All of my other tests return true.


-------<start domain.mc config>----------
dnl # Local mailer definition
define(`confLOCAL_MAILER', `cyrusv2virtdomain')dnl

dnl # Acceptable mailers
MAILER(`local')dnl
MAILER(`smtp')dnl
MAILER(`cyrusv2virtdomain')dnl

dnl # Custom rulesets defined below

dnl # LOCAL_CONFIG custom definitions
LOCAL_CONFIG
# cyrus - map for checking cyrus maibox presence
Kcyrus socket -T<TMPF> local:SMMAP_SOCKET

LOCAL_RULESETS
SLocal_localaddr
# Treat system mailboxes as usual
R$+             $: $(user $1 $)
R$+ <>          $@
# Detect cyrus mailboxes - deliver via cyrus mailer
R$*                             $: $1 $| $>"Cyrusvmap" $1
R$+ $| $#ok                     $@ $# cyrusv2virtdomain $: @$1
R$- @ $- . $* $| $#$*           $: [EMAIL PROTECTED] $| $>"Cyrusvmap" [EMAIL PROTECTED]
R$+ $| $#ok                     $@ $# cyrusv2virtdomain $: @$1
R$- + $* @ $- . $* $| $#$*      $: [EMAIL PROTECTED] $| $>"Cyrusvmap" [EMAIL PROTECTED]
R$+ $| $#ok                     $@ $# cyrusv2virtdomain $: @$1
R$- + $* @ $- . $* $| $#$*      $: [EMAIL PROTECTED] $| $>"Cyrusvmap" [EMAIL PROTECTED]
R$+ $| $#ok                     $@ $# cyrusv2virtdomain $: @$1
R$+ $| $#$*                     $#$2
# Treat remaning as usual
R$*             $@

SCyrusvmap
R$*             $: $(cyrus $1 $: $)
R$@             $#error $@ nouser $: "551 Unknown user"
-------<end domain.mc config>----------

For completeness, this is the cyrusv2.cf file modified per the Cyrus 2.2.x to support virtual domains. I chose to create a new mailer instead of just modifying the standard cyrusv2.cf file.

-------<start cyrusv2virtdomain.cf config>----------
PUSHDIVERT(-1)
#
# Copyright (c) 2002 Sendmail, Inc. and its suppliers.
#       All rights reserved.
#
# By using this file, you agree to the terms and conditions set
# forth in the LICENSE file which can be found at the top level of
# the sendmail distribution.
#
#       Contributed by Kenneth Murchison.
#

_DEFIFNOT(`_DEF_CYRUSV2VIRTDOMAIN_MAILER_FLAGS', `lsDFMnqXz')
_DEFIFNOT(`CYRUSV2VIRTDOMAIN_MAILER_FLAGS', `1A5@/:|m')
ifdef(`CYRUSV2VIRTDOMAIN_MAILER_ARGS',, `define(`CYRUSV2VIRTDOMAIN_MAILER_ARGS', `FILE /var/imap/socket/lmtp')')
define(`_CYRUSV2VIRTDOMAIN_QGRP', `ifelse(defn(`CYRUSV2VIRTDOMAIN_MAILER_QGRP'),`',`', ` Q=CYRUSV2VIRTDOMAIN_MAILER_QGRP,')')dnl


POPDIVERT

#########################################
###   Cyrus V2 Mailer specification   ###
#########################################

VERSIONID(`$Id: cyrusv2virtdomain.m4,v 1.5 2004/02/18 08:01:26 wont Exp $')

Mcyrusv2virtdomain, P=[IPC], F=_MODMF_(CONCAT(_DEF_CYRUSV2VIRTDOMAIN_MAILER_FLAGS, CYRUSV2VIRTDOMAIN_MAILER_FLAGS),`CYRUSV2VIRTDOMAIN'),
S=EnvFromSMTP/HdrFromSMTP, R=EnvToSMTP, E=\r\n,
_OPTINS(`CYRUSV2VIRTDOMAIN_MAILER_MAXMSGS', `m=', `, ')_OPTINS(`CYRUSV2VIRTDOMAIN_MAILER_MAXRCPTS', `r=', `, ')_OPTINS(`CYRUSV2VIRTDOMAIN_MAILER_CHARSET', `C=', `, ')T=DNS/RFC822/SMTP,_CYRUSV2VIRTDOMAIN_QGRP
A=CYRUSV2VIRTDOMAIN_MAILER_ARGS
-------<end cyrusv2virtdomain.cf config>----------


As I mentioned above, there is one situation where I have found that the above configuration does not work. This is when email is sent to a canonical hostname in the virtual domain. For example, mail to [EMAIL PROTECTED] succeeds with no problems. Mail sent to [EMAIL PROTECTED], however, does not succeed. Where I've run into problems, according to the debug, is that in the 2nd case, mail.wkh.org never makes it into the mailertable definition, but gets rewritten to the primary host's canonical hostname in the virtusertable steps, e.g., [EMAIL PROTECTED] becomes [EMAIL PROTECTED] In the first example, [EMAIL PROTECTED] successfully makes it to the mailertable lookup, and everything works successfully from there. Since I very very rarely have any mail sent to the MX record's canonical host name, I can live with this (for now anyway :-).

I hope this helps others fighting the same battle I've been fighting.
Will

----------------------------------------------------------------------------
William K. Hardeman
[EMAIL PROTECTED]
http://www.wkh.org

The most exciting phrase to hear in science, the one that heralds new
discoveries, is not "Eureka!" (I found it!) but "That's funny ..."
               -- Isaac Asimov

Always listen to experts. They'll tell you what can't be done and why. Then
do it.
--Robert A. Heinlein
---
Home Page: http://asg.web.cmu.edu/cyrus
Wiki/FAQ: http://cyruswiki.andrew.cmu.edu
List Archives/Info: http://asg.web.cmu.edu/cyrus/mailing-list.html

Reply via email to