domainmap.m4
上传用户:xu_441
上传日期:2007-01-04
资源大小:1640k
文件大小:4k
源码类别:

Email客户端

开发平台:

Unix_Linux

  1. divert(-1)changequote(<<, >>)<<
  2. -----------------------------------------------------------------------------
  3.                      FEATURE(domainmap) Macro
  4.                                        
  5.    The existing virtusertable feature distributed with sendmail is a good
  6.    basic approach to virtual hosting, but it is missing a few key
  7.    features:
  8.     1. Ability to have a different map for each domain.
  9.     2. Ability to perform virtual hosting for domains which are not in $=w.
  10.     3. Ability to use a centralized network-accessible database (such as
  11.        PH) which is keyed on username alone (as opposed to the
  12.        fully-qualified email address).
  13.    The FEATURE(domainmap) macro neatly solves these problems.
  14.    
  15.    The basic syntax of the macro is:
  16.         FEATURE(domainmap, `domain.com', `map definition ...')dnl
  17.    To illustrate how it works, here is an example:
  18.         FEATURE(domainmap, `foo.com', `dbm -o /etc/mail/foo-users')dnl
  19.    In this example, mail sent to user@foo.com will be rewritten by the
  20.    domainmap. The username will be looked up in the DBM map
  21.    /etc/mail/foo-users, which looks like this:
  22.         jsmith  johnsmith@mailbox.foo.com
  23.         jdoe    janedoe@sandbox.bar.com
  24.    So mail sent to jsmith@foo.com will be relayed to
  25.    johnsmith@mailbox.foo.com, and mail sent to jdoe@foo.com will be
  26.    relayed to janedoe@sandbox.bar.com.
  27.    
  28.    The FEATURE(domainmap) Macro supports the user+detail syntax by
  29.    stripping off the +detail portion before the domainmap lookup and
  30.    tacking it back on to the result. Using the example above, mail sent
  31.    to jsmith+sometext@foo.com will be rewritten as
  32.    johnsmith+sometext@mailbox.foo.com.
  33.    
  34.    If one of the elements in the $=w class (i.e., "local" delivery hosts)
  35.    is a domain specified in a FEATURE(domainmap) entry, you need to use
  36.    the LOCAL_USER(username) macro to specify the list of users for whom
  37.    domainmap lookups should not be done.
  38.    To use this macro, simply copy this file into the cf/feature directory
  39.    in the sendmail source tree.  For more information, please see the
  40.    following URL:
  41.       http://www-wsg.cso.uiuc.edu/sendmail/patches/domainmap.html
  42.    Feedback is welcome.
  43.                                              Mark D. Roth <roth@uiuc.edu>
  44. -----------------------------------------------------------------------------
  45. >>changequote(`, ')undivert(-1)divert
  46. ifdef(`_DOMAIN_MAP_',`',`dnl
  47. LOCAL_RULE_0
  48. # do mapping for domains where applicable
  49. R$* $=O $* <@ $={MappedDomain} .> $@ $>97 $1 $2 $3 Strip extraneous routing
  50. R$+ <@ $={MappedDomain} .> $>DomainMapLookup $1 <@ $2 .> domain mapping
  51. LOCAL_RULESETS
  52. ###########################################################################
  53. ###   Ruleset DomainMapLookup -- special rewriting for mapped domains   ###
  54. ###########################################################################
  55. SDomainMapLookup
  56. R $=L <@ $=w .> $@ $1 <@ $2 .> weed out local users, in case
  57. # Cw contains a mapped domain
  58. R $+ <@ $+ .> $1 <@ $2 > strip trailing dot
  59. R $+ <@ $+ . $+ > $1 <@ $(dequote $2 "_" $3 $) >
  60. # change "." to "_"
  61. R $+ <@ $+ > $: $1 <@ $(dequote "domain_" $2 $) >
  62. # prepend "domain_"
  63. R $+ + $+ <@ $*> $1 <@ $3 > <+> $2 handle user+list syntax
  64. R $+ <@ $* > $* $( $2 $1 $: <ERROR> $) $3
  65. # do actual domain map lookup
  66. R <ERROR> $* $#error $@ 5.1.1 $: "550 email address lookup in domain map failed"
  67. R $* <TEMP> $* $#error $@ 4.3.0 $: "450 domain map temporarily unavailable"
  68. R $+ @ $+ <+> $+ $1 + $3 @ $2 reset original user+list
  69. R $+ <+> $* $1 paranoid check - remove <+>
  70. R $+ @ $+ . $1 @ $2 strip trailing dot
  71. R $+ @ $+ $@ $>97 $1 @ $2 recanonify
  72. define(`_DOMAIN_MAP_',`1')')
  73. LOCAL_CONFIG
  74. C{MappedDomain} _ARG_
  75. K `domain_'translit(_ARG_, `.', `_') _ARG2_ -T<TEMP>