Hi, I aim to set up cyrus with exim4 on a debian sarge system. I have set DNS to route mail for two domains, <domain1.com> and <domain2.com> to the system for testing purposes. I have set up mailboxes for users corresponding to both domains. I successfully talk to cyrus from MUA (thunderbird) and I am able to create additional mailboxes for users from the MUA. I log in as <[EMAIL PROTECTED]> and this works fine.
I have exim4 talking to cyrus over unix socket /var/run/cyrus/socket/lmtp and it seems to be working fine. When I send mail to a user from outside a exim recieves the mail, a socket/lmtp connection is made between exim and cyrus, but the mailboxes seem to be inaccessible for delivery for some reason. As you can see, the timestamps and logs seem to indicate a connection over the socket without complications. Or don't they? These are the logs for a delivery attempt: Exim log /var/log/exim4/mainlog 2005-11-30 22:41:22 1Ehade-0008Ob-JT <= [EMAIL PROTECTED] H=zproxy.gmail.com [64.233.162.199] P=esmtp S=1519 [EMAIL PROTECTED] 2005-11-30 22:41:22 1Ehade-0008Ob-JT ** [EMAIL PROTECTED] R=local_user_cyrus T=cyrus_delivery: LMTP error after RCPT TO:<[EMAIL PROTECTED]>: 550-Mailbox unknown. Either there is no mailbox associated with this\n550-name or you do not have authorization to see it.\n550 5.1.1 User unknown 2005-11-30 22:41:22 1Ehade-0008Of-RC <= <> R=1Ehade-0008Ob-JT U=Debian-exim P=local S=2516 2005-11-30 22:41:22 1Ehade-0008Ob-JT Completed 2005-11-30 22:41:24 1Ehade-0008Of-RC => [EMAIL PROTECTED] R=dnslookup T=remote_smtp H=gmail-smtp-in.l.google.com [64.233.183.27] 2005-11-30 22:41:24 1Ehade-0008Of-RC Completed Cyrus log /var/log/mail.log Nov 30 22:41:22 xa-mail cyrus/master[32280]: set maximum file descriptors to 256/256 Nov 30 22:41:22 xa-mail cyrus/master[32280]: about to exec /usr/lib/cyrus/bin/lmtpd Nov 30 22:41:22 xa-mail cyrus/lmtpunix[32280]: executed Nov 30 22:41:22 xa-mail cyrus/lmtpd[32280]: telling master 2 Nov 30 22:41:22 xa-mail cyrus/master[32065]: service lmtpunix pid 32280 in READY state: now unavailable and in BUSY state Nov 30 22:41:22 xa-mail cyrus/master[32065]: service lmtpunix now has 0 ready workers Nov 30 22:41:22 xa-mail cyrus/lmtpd[32280]: accepted connection Nov 30 22:41:22 xa-mail cyrus/lmtpd[32280]: telling master 3 Nov 30 22:41:22 xa-mail cyrus/master[32065]: service lmtpunix pid 32280 in BUSY state: now serving connection Nov 30 22:41:22 xa-mail cyrus/master[32065]: service lmtpunix now has 0 ready workers Nov 30 22:41:22 xa-mail cyrus/lmtpd[32280]: lmtp connection preauth'd as postman Nov 30 22:41:22 xa-mail cyrus/lmtpd[32280]: telling master 1 Nov 30 22:41:22 xa-mail cyrus/master[32065]: service lmtpunix pid 32280 in BUSY state: now available and in READY state Nov 30 22:41:22 xa-mail cyrus/master[32065]: service lmtpunix now has 1 ready workers Nov 30 22:42:22 xa-mail cyrus/master[32065]: process 32280 exited, status 0 Nov 30 22:42:22 xa-mail cyrus/master[32065]: service lmtpunix now has 0 ready workers I am out of ideas. These are the relevant config files for both exim4 and cyrus ######################################## cyrus.conf # Debian defaults for Cyrus IMAP server/cluster implementation # see cyrus.conf(5) for more information # # All the tcp services are tcpd-wrapped. see hosts_access(5) # $Id: cyrus.conf,v 1.16 2003/11/05 01:04:22 hmh Exp $ START { # do not delete this entry! recover cmd="/usr/sbin/ctl_cyrusdb -r" # this is only necessary if using idled for IMAP IDLE # this is NOT to be enabled right now in Debian builds #idled cmd="idled" # this is useful on backend nodes of a Murder cluster # it causes the backend to syncronize its mailbox list with # the mupdate master upon startup #mupdatepush cmd="/usr/sbin/ctl_mboxlist -m" # this is recommended if using duplicate delivery suppression delprune cmd="/usr/sbin/ctl_deliver -E 3" # this is recommended if caching TLS sessions tlsprune cmd="/usr/sbin/tls_prune" } # UNIX sockets start with a slash and are absolute paths # you can use a maxchild=# to limit the maximum number of forks of a service # you can use babysit=true and maxforkrate=# to keep tight tabs on the service # most services also accept -U (limit number of reuses) and -T (timeout) SERVICES { # --- Normal cyrus spool, or Murder backends --- # add or remove based on preferences imap cmd="imapd -U 30" listen="imap" prefork=0 maxchild=100 #imaps cmd="imapd -s -U 30" listen="imaps" prefork=0 maxchild=100 pop3 cmd="pop3d -U 30" listen="pop3" prefork=0 maxchild=50 #pop3s cmd="pop3d -s -U 30" listen="pop3s" prefork=0 maxchild=50 # At least one form of LMTP is required for delivery # (you must keep the Unix socket name in sync with imap.conf) #lmtp cmd="lmtpd" listen="localhost:lmtp" prefork=0 maxchild=20 lmtpunix cmd="lmtpd" listen="/var/run/cyrus/socket/lmtp" prefork=0 maxchild=200 # ---------------------------------------------- # useful if you need to give users remote access to sieve # by default, we limit this to localhost in Debian sieve cmd="timsieved" listen="localhost:sieve" prefork=0 maxchild=100 # this one is needed for the notification services notify cmd="notifyd" listen="/var/run/cyrus/socket/notify" proto="udp" prefork=1 # --- Murder frontends ------------------------- # enable these and disable the matching services above, # except for sieve (which deals automatically with Murder) # mupdate database service - must prefork at least 1 # (mupdate slaves) #mupdate cmd="mupdate" listen=3905 prefork=1 # (mupdate master, only one in the entire cluster) #mupdate cmd="mupdate -m" listen=3905 prefork=1 # proxies that will connect to the backends #imap cmd="proxyd" listen="imap" prefork=0 maxchild=100 #imaps cmd="proxyd -s" listen="imaps" prefork=0 maxchild=100 #pop3 cmd="pop3proxyd" listen="pop3" prefork=0 maxchild=50 #pop3s cmd="pop3proxyd -s" listen="pop3s" prefork=0 maxchild=50 #lmtp cmd="lmtpproxyd" listen="lmtp" prefork=1 maxchild=20 # ---------------------------------------------- } EVENTS { # this is required checkpoint cmd="/usr/sbin/ctl_cyrusdb -c" period=30 # this is only necessary if using duplicate delivery suppression delprune cmd="/usr/sbin/ctl_deliver -E 3" at=0401 # this is only necessary if caching TLS sessions tlsprune cmd="/usr/sbin/tls_prune" at=0401 } ######################################## imapd.conf # Debian Cyrus imapd.conf # See imapd.conf(5) for more information and more options #MöÃrður bÊttiv við virtdomains: 1 defaultdomain: domain1.comf # Configuration directory configdirectory: /var/lib/cyrus # Which partition to use for default mailboxes defaultpartition: default partition-default: /var/spool/cyrus/mail # News setup partition-news: /var/spool/cyrus/news newsspool: /var/spool/news # Alternate namespace # If enabled, activate the alternate namespace as documented in # /usr/share/doc/cyrus21-doc/html/altnamespace.html, where an user's # subfolders are in the same level as the INBOX # See also userprefix and sharedprefix on imapd.conf(5) altnamespace: no # UNIX Hierarchy Convention # Set to yes, and cyrus will accept dots in names, and use the forward # slash "/" to delimit levels of the hierarchy. This is done by converting # internally all dots to "^", and all "/" to dots. So the "rabbit.holes" # mailbox of user "helmer.fudd" is stored in "user.elmer^fud.rabbit^holes" unixhierarchysep: yes # Munging illegal characters in headers # Headers of RFC2882 messages must not have characters with the 8th bit # set. However, too many badly-written MUAs generate this, including most # spamware. Disable this if you want Cyrus to leave the crappage untouched # and you don't care that IMAP SEARCH won't work right anymore. #munge8bit: no # Forcing recipient user to lowercase # Cyrus 2.1 is case-sensitive. If all your mail users are in lowercase, it is # probably a very good idea to set lmtp_downcase_rcpt to true. The default is # to assume the user knows what he is doing, and not downcase anything. lmtp_downcase_rcpt: yes # Uncomment the following and add the space-separated users who # have admin rights for all services. admins: cyrus # Space-separated list of users that have lmtp "admin" status (i.e. that # can deliver email through TCP/IP lmtp) in addition to those in the # admins: entry above lmtp_admins: postman mail Debian-exim cyrus # Space-separated list of users that have mupdate "admin" status, in # addition to those in the admins: entry above. Note that mupdate slaves and # backends in a Murder cluster need to autenticate against the mupdate master # as admin users. #mupdate_admins: mupdateman # Space-separated list of users that have imapd "admin" status, in # addition to those in the admins: entry above #imap_admins: cyrus # Space-separated list of users that have sieve "admin" status, in # addition to those in the admins: entry above #sieve_admins: cyrus # List of users and groups that are allowed to proxy for other users, # seperated by spaces. Any user listed in this will be allowed to login # for any other user. Like "admins:" above, you can have imap_proxyservers # and sieve_proxyservers. #proxyservers: cyrus # No anonymous logins allowanonymouslogin: no # Minimum time between POP mail fetches in minutes popminpoll: 1 # If nonzero, normal users may create their own IMAP accounts by creating # the mailbox INBOX. The user's quota is set to the value if it is positive, # otherwise the user has unlimited quota. autocreatequota: 0 # umask used by Cyrus programs umask: 077 # Sendmail binary location # DUE TO A BUG, Cyrus sends CRLF EOLs to this program. This breaks Exim 3. # For now, to work around the bug, set this to a wrapper that calls # /usr/sbin/sendmail -dropcr instead if you use Exim 3. #sendmail: /usr/sbin/sendmail # If enabled, cyrdeliver will look for Sieve scripts in user's home # directories: ~user/.sieve. sieveusehomedir: false # If sieveusehomedir is false, this directory is searched for Sieve scripts. sievedir: /var/spool/sieve # notifyd(8) method to use for "MAIL" notifications. If not set, "MAIL" # notifications are disabled. Valid methods are: null, log, zephyr #mailnotifier: zephyr # notifyd(8) method to use for "SIEVE" notifications. If not set, "SIEVE" # notifications are disabled. This method is only used when no method is # specified in the script. Valid methods are null, log, zephyr, mailto #sievenotifier: zephyr # DRAC (pop-before-smtp, imap-before-smtp) support # Set dracinterval to the time in minutes to call DRAC while a user is # connected to the imap/pop services. Set to 0 to disable DRAC (default) # Set drachost to the host where the rpc drac service is running #dracinterval: 0 #drachost: localhost # If enabled, the partitions will also be hashed, in addition to the hashing # done on configuration directories. This is recommended if one partition has a # very bushy mailbox tree. hashimapspool: true # Allow plaintext logins by default (SASL PLAIN) allowplaintext: yes # Force PLAIN/LOGIN authentication only # (you need to uncomment this if you are not using an auxprop-based SASL # mechanism. saslauthd users, that means you!). And pay attention to # sasl_minimum_layer and allowapop below, too. sasl_mech_list: PLAIN # Allow use of the POP3 APOP authentication command. # Note that this command requires that the plaintext passwords are # available in a SASL auxprop backend (eg. sasldb), and that the system # can provide enough entropy (eg. from /dev/urandom) to create a challenge # in the banner. #allowapop: no # The minimum SSF that the server will allow a client to negotiate. A # value of 1 requires integrity protection; any higher value requires some # amount of encryption. sasl_minimum_layer: 0 # The maximum SSF that the server will allow a client to negotiate. A # value of 1 requires integrity protection; any higher value requires some # amount of encryption. #sasl_maximum_layer: 256 # List of remote realms whose users may log in using cross-realm # authentications. Seperate each realm name by a space. A cross-realm # identity is considered any identity returned by SASL with an "@" in it. loginrealms: domain1.com domain2.com # # SASL library options (these are handled directly by the SASL libraries, # refer to SASL documentation for an up-to-date list of these) # # The mechanism(s) used by the server to verify plaintext passwords. Possible # values are "saslauthd", "auxprop", "pwcheck" and "alwaystrue". They # are tried in order, you can specify more than one, separated by spaces. # # Do note that, since sasl will be run as user cyrus, you may have a lot of # trouble to set this up right. sasl_pwcheck_method: saslauthd # What auxpropd plugins to load, if using sasl_pwcheck_method: auxprop # by default, all plugins are tried (which is probably NOT what you want). sasl_auxprop_plugin: sasldb # If enabled, the SASL library will automatically create authentication secrets # when given a plaintext password. Refer to SASL documentation sasl_auto_transition: no # # SSL/TLS Options # # File containing the global certificate used for ALL services (imap, pop3, # lmtp, sieve) #tls_cert_file: /etc/ssl/certs/cyrus-global.pem # File containing the private key belonging to the global server certificate. #tls_key_file: /etc/ssl/private/cyrus-global.key # File containing the certificate used for imap. If not specified, the global # certificate is used. A value of "disabled" will disable SSL/TLS for imap. #tls_imap_cert_file: /etc/ssl/certs/cyrus-imap.pem # File containing the private key belonging to the imap-specific server # certificate. If not specified, the global private key is used. A value of # "disabled" will disable SSL/TLS for imap. #tls_imap_key_file: /etc/ssl/private/cyrus-imap.key # File containing the certificate used for pop3. If not specified, the global # certificate is used. A value of "disabled" will disable SSL/TLS for pop3. #tls_pop3_cert_file: /etc/ssl/certs/cyrus-pop3.pem # File containing the private key belonging to the pop3-specific server # certificate. If not specified, the global private key is used. A value of # "disabled" will disable SSL/TLS for pop3. #tls_pop3_key_file: /etc/ssl/private/cyrus-pop3.key # File containing the certificate used for lmtp. If not specified, the global # certificate is used. A value of "disabled" will disable SSL/TLS for lmtp. #tls_lmtp_cert_file: /etc/ssl/certs/cyrus-lmtp.pem # File containing the private key belonging to the lmtp-specific server # certificate. If not specified, the global private key is used. A value of # "disabled" will disable SSL/TLS for lmtp. #tls_lmtp_key_file: /etc/ssl/private/cyrus-lmtp.key # File containing the certificate used for sieve. If not specified, the global # certificate is used. A value of "disabled" will disable SSL/TLS for sieve. #tls_sieve_cert_file: /etc/ssl/certs/cyrus-sieve.pem # File containing the private key belonging to the sieve-specific server # certificate. If not specified, the global private key is used. A value of # "disabled" will disable SSL/TLS for sieve. #tls_sieve_key_file: /etc/ssl/private/cyrus-sieve.key # File containing one or more Certificate Authority (CA) certificates. #tls_ca_file: /etc/ssl/certs/cyrus-imapd-ca.pem # Path to directory with certificates of CAs. tls_ca_path: /etc/ssl/certs # The length of time (in minutes) that a TLS session will be cached for later # reuse. The maximum value is 1440 (24 hours), the default. A value of 0 will # disable session caching. tls_session_timeout: 1440 # The list of SSL/TLS ciphers to allow. The format of the string is described # in ciphers(1). THIS DISABLES THE WEAK 'FOR EXPORT' CRAP! tls_cipher_list: TLSv1:SSLv3:SSLv2:!NULL:!EXPORT:!DES:!LOW:@STRENGTH # Require a client certificate for ALL services (imap, pop3, lmtp, sieve). #tls_require_cert: false # Require a client certificate for imap ONLY. #tls_imap_require_cert: false # Require a client certificate for pop3 ONLY. #tls_pop3_require_cert: false # Require a client certificate for lmtp ONLY. #tls_lmtp_require_cert: false # Require a client certificate for sieve ONLY. #tls_sieve_require_cert: false # # Cyrus Murder cluster configuration # # Set the following options to the values needed for this server to # autenticate against the mupdate master server: # mupdate_server # mupdate_port # mupdate_username # mupdate_authname # mupdate_realm # mupdate_password # mupdate_retry_delay ## ## KEEP THESE IN SYNC WITH cyrus.conf ## # Unix domain socket that lmtpd listens on. lmtpsocket: /var/run/cyrus/socket/lmtp # Unix domain socket that idled listens on. idlesocket: /var/run/cyrus/socket/idle # Unix domain socket that the new mail notification daemon listens on. notifysocket: /var/run/cyrus/socket/notify ## ## DEBUGGING ## # Debugging hook. See /usr/share/doc/cyrus21-common/README.Debian.debug # Keep the hook disabled when it is not in use # # gdb Back-traces #debug_command: /usr/bin/gdb -batch -cd=/tmp -x /usr/lib/cyrus/get-backtrace.gdb /usr/lib/cyrus/bin/%s %d >/tmp/gdb-backtrace.cyrus.%1$s.%2$d <&- 2>&1 & # # system-call traces #debug_command: /usr/bin/strace -tt -o /tmp/strace.cyrus.%s.%d -p %2$d <&- 2>&1 & # # library traces #debug_command: /usr/bin/ltrace -tt -n 2 -o /tmp/ltrace.cyrus.%s.%d -p %2$d <&- 2>&1 & ######################################## /etc/exim4/conf.d/main/01_exim4-config_listmacrosdefs ###################################################################### # Runtime configuration file for Exim 4 (Debian Packaging) # ###################################################################### ###################################################################### # Depending on where you find this file, this might be a template or # an actual configuration file. Documentation about the Debian exim4 # configuration scheme can be found in # /usr/share/doc/exim4-base/README.Debian.gz. # # Strings like DEBCONFsomethingDEBCONF are replaced by installation # dependent values by update-exim4.conf, the script which builds the # actual configuration from the templates. ###################################################################### ###################################################################### # MAIN CONFIGURATION SETTINGS # ###################################################################### # Just for reference and scripts. # On Debian systems, the main binary is installed as exim4 to avoid # conflicts with the exim 3 packages. exim_path = /usr/sbin/exim4 # Macro defining the main configuration directory. # We do not use absolute paths. .ifndef CONFDIR CONFDIR = /etc/exim4 .endif # This sets a macro DC_minimaldns if dc_minimaldns=true. If # dc_minimaldns=false, this expands to an empty line. .ifndef DC_minimaldns DEBCONFminimaldnsDEBCONF .endif # Create other macros from Debconf. Macros created here are used in # other places in exim config. .ifndef DC_visiblename DC_visiblename=DEBCONFvisiblenameDEBCONF .endif # Create domain and host lists for relay control # '@' refers to 'the name of the local host' .ifndef MAIN_LOCAL_DOMAINS MAIN_LOCAL_DOMAINS = DEBCONFlocal_domainsDEBCONF .endif domainlist cyrus_domains = domain1.com : domain2.com domainlist local_domains = MAIN_LOCAL_DOMAINS .ifndef MAIN_RELAY_TO_DOMAINS MAIN_RELAY_TO_DOMAINS = DEBCONFrelay_domainsDEBCONF .endif domainlist relay_to_domains = MAIN_RELAY_TO_DOMAINS .ifndef MAIN_RELAY_NETS MAIN_RELAY_NETS = DEBCONFrelay_netsDEBCONF .endif hostlist relay_from_hosts = 127.0.0.1 : ::::1 : MAIN_RELAY_NETS # Specify the domain you want to be added to all unqualified addresses # here. Unqualified addresses are accepted only from local callers by # default. The recipient_unqualified_hosts option can be used to permit # unqualified addresses from remote sources. # If qualify_domain is not set, the primary_hostname value is used for # qualification. # The ifdef bracket makes sure that an empty debconf value is correctly # translated to "unset". .ifdef DC_visiblename qualify_domain = DC_visiblename .endif # only used for satellite-system .ifndef DCreadhost DCreadhost = DEBCONFreadhostDEBCONF .endif #for satellite and smarthost-systems .ifndef DCsmarthost DCsmarthost = DEBCONFsmarthostDEBCONF .endif # listen on all all interfaces? .ifdef MAIN_LOCAL_INTERFACES local_interfaces = MAIN_LOCAL_INTERFACES .else DEBCONFlistenonpublicDEBCONF .endif .ifndef LOCAL_DELIVERY # The default transport, set in /etc/exim4/update-exim4.conf.conf, # defaulting to mail_spool. See CONFDIR/conf.d/transport/ for possibilities LOCAL_DELIVERY=DEBCONFlocaldeliveryDEBCONF .endif # The gecos field in /etc/passwd holds not only the name. see passwd(5). gecos_pattern = ^([^,:]*) gecos_name = $1 # define a macro DCconfig_smarthost, DCconfig_satellite, etc. we need this # for .ifdef ... .endif .ifndef DCconfig_satellite .ifndef DCconfig_internet .ifndef DCconfig_local .ifndef DCconfig_smarthost DCconfig_DEBCONFconfigtypeDEBCONF = 1 .endif .endif .endif .endif # define macros to be used in acl/30_exim4-config_check_rcpt to check # recipient local parts for strange characters # This macro is used to check local parts of recipients in local # domains. It blocks local parts that begin with a dot or contain a # quite broad range of non-alphanumeric characters. .ifndef CHECK_RCPT_LOCAL_LOCALPARTS CHECK_RCPT_LOCAL_LOCALPARTS = ^[.] : [EMAIL PROTECTED]/|\'`#&?] .endif # This macro is used to check local parts of recipients in non-local # domains. It thus allows your own users to send outgoing messages to # sites that use slashes and vertical bars in their local parts. It blocks # local parts that begin with a dot, slash, or vertical bar, but allows # these characters within the local part. However, the sequence /../ is # barred. The use of some other non-alphanumeric characters is blocked. # The motivation here is to prevent your users (or your users' viruses) # from mounting certain kinds of attack on remote sites. .ifndef CHECK_RCPT_REMOTE_LOCALPARTS CHECK_RCPT_REMOTE_LOCALPARTS = ^[./|] : [EMAIL PROTECTED]'`#&?] : ^.*/\\.\\./ .endif ######################################## /etc/exim4/conf.d/router/010_local-cyrus local_user_cyrus: debug_print = "R: local_user_cyrus for [EMAIL PROTECTED]" driver = accept domains = +cyrus_domains local_part_suffix = +* local_part_suffix_optional transport = cyrus_delivery no_more ######################################## /etc/exim4/conf.d/transport/cyrus_transfer cyrus_delivery: driver = lmtp socket = /var/run/cyrus/socket/lmtp batch_max = 20 user = mail ######################################## /etc/exim4/update-exim4.conf.conf # /etc/exim4/update-exim4.conf.conf # # Edit this file and /etc/mailname by hand and execute update-exim4.conf # yourself or use 'dpkg-reconfigure exim4-config' # # Please note that this is _not_ a dpkg-conffile and that automatic changes # to this file might happen. The code handling this will honor your local # changes, so this is usually fine, but will break local schemes that mess # around with multiple versions of the file. # # update-exim4.conf uses this file to determine variable values to replace # the DEBCONFsomethingDEBCONF strings in the configuration template files. # # Most settings found in here do have corresponding questions in the # Debconf configuration, but not all of them. # # This is a Debian specific file dc_eximconfig_configtype='internet' dc_other_hostnames='domain2.com:domain1.com' dc_local_interfaces='' dc_readhost='' dc_relay_domains='' dc_minimaldns='false' dc_relay_nets='' dc_smarthost='' CFILEMODE='644' dc_use_split_config='true' dc_hide_mailname='' dc_mailname_in_oh='true' dc_localdelivery='domain1.com:domain2.com' ######################################## Thanks, Mordur ---- Cyrus Home Page: http://asg.web.cmu.edu/cyrus Cyrus Wiki/FAQ: http://cyruswiki.andrew.cmu.edu List Archives/Info: http://asg.web.cmu.edu/cyrus/mailing-list.html