Return to BSD News archive
Newsgroups: comp.unix.bsd.freebsd.misc
Path: euryale.cc.adfa.oz.au!newshost.carno.net.au!harbinger.cc.monash.edu.au!munnari.OZ.AU!news.ecn.uoknor.edu!news.ysu.edu!news.radio.cz!newsbastard.radio.cz!news.radio.cz!CESspool!cpk-news-hub1.bbnplanet.com!news.bbnplanet.com!worldnet.att.net!howland.erols.net!blackbush.xlink.net!pegasus.PFM-Mainz.de!forthdv.pfm-mainz.de!stephan
From: stephan@forthdv.pfm-mainz.de (Stephan Forth)
Subject: Re: sendmail for virtual hosts
X-Newsreader: TIN [UNIX 1.3 BETA-950824-color PL0]
Lines: 186
Organization: Forth EDV Beratung+Schulung
Message-ID: <E93vsA.951@forthdv.pfm-mainz.de>
References: <5jhigk$rsf@vixen.cso.uiuc.edu> <E9179p.zC@forthdv.pfm-mainz.de> <5jimsf$rio@vixen.cso.uiuc.edu>
Date: Wed, 23 Apr 1997 19:36:10 GMT
Xref: euryale.cc.adfa.oz.au comp.unix.bsd.freebsd.misc:39615
igor vladimirovich roshchin (igor@students.uiuc.edu) wrote:
: Stephan Forth (stephan@forthdv.pfm-mainz.de) wrote:
: : igor vladimirovich roshchin (igor@students.uiuc.edu) wrote:
: :
: : did you do a makemap?
: :
: : You should put the virtual User Info in a file like
: : /etc/virtusertable.txt then do a
: : makemap hash virtusertable < virtusertable.txt
: :
: : Restart sendmail and it should be up 'n running.
: :
:
: Yes, I did...
: I wonder if the format of the virtusertable file is correct (as I mentioned above),
: and also if I had to do something else with the /etc/sendmail.cf
You could check, if your sendmail.cf contains the definitions
listed in the sendmail.faq.
I guess its a often needed feature, so I append the part of the
sendmail.faq here.
Best source of information is (IMHO) the sendmail.faq. You can get
the complete faq from:
ftp://rtfm.mit.edu/pub/usenet/news.answers/sendmail-faq/part*
Regards, Stephan
---------------part of sendmail.faq------------------------
Subject: Q3.7 -- How do I manage several (virtual) domains?
If you want to provide mailservice to several domains and be able
to add identical names across different domains, as in this example:
user@a.dom.ain mb1@dom.ain
user@b.dom.ain mb2@dom.ain
user@c.dom.ain mb@outer.space
you may accomplish this by using an external database in
conjunction with minor Ruleset rewriting in sendmail.cf. Many ISPs
(Internet Service Providers) have asked me and here's a general
solution (you may combine it with userdb's if you need to):
1. Make a textfile (I usually make one for each domain and
concatenate them before database-compilation) with the
following structure:
user@a.dom.ain mb1@dom.ain
user@b.dom.ain mb2@dom.ain
user@c.dom.ain mb@outer.space
The LHS (Left Hand Side) is the mail-adress of a particular
user and the RHS is the corresponding mailbox. An example
that might apply to the real world:
webmaster@josnet.se wm.list@eowyn.josnet.se
webmaster@client1.se joe@client1.se
webmaster@client2.se anne@another.provider.se
webmaster@client3.se joe@client3.se
joe@client1.se c1_joe@mail.josnet.se
joe@client3.se joeuser
Note that you have to spell out the complete email-address in
the LHS entry. The RHS entry may be either a local address
(for example 'johan' if that account exists) or a complete
email-adress on another system (or a domain that the server
recognizes as local for that matter).
2. Compile the textfile into a database:
makemap hash mbt.db <mbt
You may you use other lookup-methods than hash (btree for
example). The resulting database is mbt.db in this example
and the input is the textfile mbt.
3. Add a few lines in sendmail.cf:
A. In the beginning (typically in the "local info" section or
together with the user database option in the "options"
section):
# Declare mbt as a hash-lookup database:
Kmbt hash /etc/mail/mbt.db
B. In the Ruleset 98 (local part of ruleset 0) section, add:
# Use mailboxtable-database:
R$+ < @ $+ . > $: $1 < @ $2 > .
R$+ < @ $+ > $* $: $(mbt $1@$2 $: $1 < @ $2 > $3 $)
R$+ < @ $+ > $* $: $(mbt $2 $: $1 < @ $2 > $3 $)
RERROR $* $#error $: $1
R$+ < @ $+ > . $: $1 < @ $2 . >
If you have any other rewrite rules in ruleset 98, these
should be able to either go after or before the existing
rules, but you may have to do some experimenting to
find out which placement works best.
4. The next-to-last line of these rules let you have an alias
file like:
joe@somedom.com joe
jim@somedom.com jim@othersite
somedom.com ERROR "No such user"
And still have mail addressed to unknown users at that domain
bounce properly. You can also do a form of redirects, such
as:
fred@somedom.com ERROR "This user has moved to fred@otherdom.com"
5. Test with sendmail -bv and/or sendmail -bt
6. Restart sendmail. You must do this in order to have the
daemon reread the sendmail.cf.
Note: Alternate sets of instructions and/or kits
can be found at <http://www.westnet.com/providers>,
<http://hub.org/softdocs/Sendmail-VD>,
<ftp://samson.oslo.uninett.no/pub/unix/sendmail/>, and
<http://jos.net/projects/mbt/>. None of these have been tested
by the maintainer of this FAQ, but are believed to work correctly.
Which you use is a matter of your personal aesthetics.
If you're using version 8.8 sendmail, you can make use of the
new "virtual user table" feature (for one thing, it won't require
that you add new rewrite rules to your sendmail configuration, as
the previous example does).
1. Put "FEATURE(virtusertable)" in your sendmail.mc
file.
2. By default, sendmail will build tables out of
/etc/virtusertable. If you want to change this, put
something like:
define(`VIRTUSER_TABLE', `-o hash /usr/local/lib/virtusertable')dnl
in your sendmail.mc file.
3. Construct the virtusertable file like so:
info@foo.com foo-info
info@bar.com bar-info
@baz.org jane@elsewhere.net
@somedom.com error : 5.5.0 User unknown
(Contrast with steps 1 and 4 in the previous example
using regular mailertables).
4. Compile the textfile into a database:
makemap hash /etc/virtusertable.db </etc/virtusertable
You may you use other lookup-methods than hash (btree
for example). Make sure that this database type matches
what is defined for the table in step 2.
5. Put all the domains listed on the LHS of these aliases
in your sendmail.cw file, or on the Cw line in your
sendmail.cf.
6. Recompile your sendmail.cf from your sendmail.mc and
test it.
7. Once you are satisfied, move it into place and restart
sendmail.
Note that the virtusertable is only referenced for inbound
mail (more accurately, only for controlling delivery). If you
want to rewrite mail addresses from your virtual domain users as
they pass through your system, you'll also need to make comparable
modifications to the genericstable (used for rewriting).
--
FORTH EDV Beratung + Schulung stephan@forthdv.pfm-mainz.de
Martin-Luther-Str. 55 voice: +49 6131 581072
55131 Mainz, Germany fax: +49 6131 581073