Virtual domains and user@domain1.com and user@domain2.com

Stuart Morrison sjm at sjmorrison.net
Sat Apr 8 16:02:36 EDT 2006


Jim

Add the following lines to your imapd.conf (can leave out the comments)
#this says turn on virtual domains and use the user input to decide 
which domain the user is in (I think from memory)
virtdomains: userid
#you need to state which domains you will accept mail for
loginrealms: domain1 domain2 domain3 sub1.domain1 sub2.domain1 
sub1.domain2 sub2.domain2

If you are creating users using saslpasswd2 see man saslpaswd2 to create 
users in their own domain e.g.

saslpasswd -c joe -u domain1

I started out using sasldb2 authentication with virtual domains and 
quickly realised that using a MSQL backend was much easier in the longer 
term.

You do not mention what OS you are using but the basics of what I have 
done are quite well documented (man imapd.conf is a very good source of 
information).

If you want to explore MySQL backends:

For Fedora/Red Hat installs:

1) install pam_mysql.rpm

2) in /etc/sysconfig/saslauthd change the MECH to pam

3) edit /etc/pam.d/imap to include the details of your MySQL database 
(web-cyradm contains scripts for creating a suitable database  and some 
quite good other advice about setup and looking at other posts there is 
a patch for FQUN - I hacked it myself to work - I would not really know 
how to release a patch).  I have attached a copy of my imap file (I can 
also authenticate exim with pam so I think you should be able to do the 
same with Postfix if you are interested in that)

4) edit your /etc/imapd.conf (see man imapd.conf for detailed 
descriptions - I have attached an annotated copy of mine to help you 
along the way).

Hope this helps

Regards

sjm

Jim Norton wrote:

> Ok I need to clarify.
>
> I don't have a "joe" mailbox yet. I would like to be able to have two 
> "joe" mailboxes called for example:  joe at virt-domain1.org and 
> joe at virt-domain2.org.
>
> In my current usage of Cyrus IMAP I've not been able to do this 
> because I've been creating users with a command like  cm user.joe 
> ..... Without the FQUN.
>
> Then through the Postfix config files I tell Postfix which virtual 
> domain joe belongs to.
>
> So currently "joe" can only exist in one virtual domain.
>
> My question is how do I go about setting up users in Cyrus IMAP and 
> Cyrus SASL so that I "could" have a user "joe" in multiple virtual 
> domains?
>
> Thanks for the replies everybody...
>
>
> Quoting "S. J. Morrison" <sjm at sjmorrison.net>:
>
>>
>>
>> -----Original Message-----
>> From: "Ciprian Vizitiu" <cvizitiu at gbif.org>
>> To: info-cyrus at lists.andrew.cmu.edu
>> Sent: 08/04/06 10:50
>> Subject: RE: Virtual domains and user at domain1.com and user at domain2.com
>>
>>
>>> I have TWO joes(s) in TWO different domains but they "live on the same
>>> IMAP box... Because I'm using Cyrus IMAP the users mailboxes aren't
>>> mapped to system accounts so Postfix just passes any mail to unknown
>>> "non-system accounts" on to Cyrus for delivery. So the question
>>> becomes how do I enable such a setup so that Cyrus will deliver the
>>> mail to the correct mailbox?
>>>
>> OK you had one Joe on one domain and he was receiving mail fine.  You 
>> added
>> another Joe to another domain and now all mail goes to one of the 
>> Joes.  It
>> sounds like as Ciprian said it is an MTA issue.  Postfix is stripping 
>> the
>> FQDN before passing mail on to Cyrus.
>>
>>
>> Since he said that users to not exist as users on the underlying 
>> machine to
>> me it looks like "virtual" and/or "virtual_mailbox" in Postfix. Simply
>> create a different joe say joesmith as a mbox on Cyrus and split 
>> delivery in
>> Postfix via "virtual_mailbox" mechanism. But then obviously I'm no Cyrus
>> guru, most likely it can also be done in a "pure Cyrus way".
>>
>> Hi
>>
>> I mentioned I do not use Postfix (I found Exim more suitable for me - 
>> and although there is not a howto like the postfix one there is very 
>> good docs on exim.org).  When creating users in Cyrus using sasl the 
>> domain can be specified meaning they are distinct.  If a MTA strips 
>> the domain from an email address and passess it Cyrus will add the 
>> default domain to the user.  This is the impression of the problem I 
>> got from Jim's posts although if he has managed to have mail 
>> delivered to virtual domains already this does not quite make sense - 
>> basically if Cyrus is already delivering to multiple domains I cannot 
>> see why there is a problem with users with the same name before the @ 
>> in an email address (unless there is something particular in Jim's 
>> configuration).  Hope this is of some help to Jim - if not let us 
>> have a look at imapd.conf and I might be able to suggest something else.
>>
>> Regards
>>
>> sjm
>> ----
>> 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
>>
>> ----
>> 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
>>
>>
>
>
>


-------------- next part --------------
configdirectory: /var/lib/imap
partition-default: /var/spool/imap
#a couple of admins for everybody and admins for each domain
admins: username1 username2 user at domain1 user at domain2
sievedir: /var/lib/imap/sieve
sendmail: /usr/sbin/sendmail.exim
hashimapspool: true
sasl_pwcheck_method: saslauthd
allowplaintext: yes
#This is not an internet facing server so PLAIN is acceptable
sasl_mech_list: PLAIN
sasl_sql_user: MySQL user
sasl_sql_passwd: MySQL pass
sasl_sql_hostnames: MySQL hostname
sasl_sql_database: MySQL database name
#The MySQL query that works for me!
sasl_sql_select: select password from accountuser where username = '%u%r'
#sasl_mech_list: DIGEST-MD5
#pwcheck_method: pam
#enable the following so that usernames can include dots
unixhierarchysep: true
servername: mail.teachers.uk.net
#if mail comes without FQDN the following is appended
defaultdomain: mail.teachers.uk.net
#virtdomains: on
#this says turn on virtual domains and use the user input to decide which domain the user is in (I think from memory)
virtdomains: userid
#you need to state which domains you will accept mail for
loginrealms: domain1 domain2 domain3 sub1.domain1 sub2.domain1 sub1.domain2 sub2.domain2
tls_cert_file: /usr/share/ssl/certs/CA/cyrus-imapd.pem
tls_key_file: /usr/share/ssl/certs/private/cyrus-imapd.pem
tls_ca_file: /usr/share/ssl/certs/CA/private/cakey.pem
-------------- next part --------------
#%PAM-1.0

# Mail services
auth	sufficient	/lib64/security/pam_mysql.so user=MySQL user passwd=MySQL password host=MySQL host db=MySQL database table=username_table usercolumn=username_field passwdcolumn=password_field
#auth	sufficient	/lib64/security/pam_unix_auth.so
account	required	/lib64/security/pam_mysql.so user=MySQL user passwd=MySQL password host=MySQL host db=MySQL database table=username_table usercolumn=username_field passwdcolumn=password_field
auth	required	/lib64/security/pam_warn.so
account	required	/lib64/security/pam_warn.so
#auth	required	/lib/security/pam_debug.so
#account	required	/lib/security/pam_debug.so
#account	required	/lib/security/pam_permit.so
#account	sufficient	/lib/security/pam_unix_acct.so


More information about the Info-cyrus mailing list