Sun Java System Messaging Server 6 2005Q4 管理指南

本地地址的别名扩展

确定地址要与本地通道相关联后,该地址将自动进行别名扩展。别名扩展处理将检查若干信息源,包括:

  1. 别名文件(已编译配置的一部分)。

  2. 别名数据库。

  3. 别名 URL。

要检查的确切别名源以及检查顺序取决于 option.dat 文件中的 ALIAS_MAGIC MTA 选项的设置。对于直接 LDAP,将选项设置为 8764。这表示首先检查由 ALIAS_URL0 MTA 选项指定的 URL,再检查由 ALIAS_URL1 MTA 选项指定的 URL,接着检查由 ALIAS_URL2 MTA 选项指定的 URL,最后检查别名文件。此设置有效时,将不检查别名数据库。

使用 LDAP URL 检查别名

通过将两个特殊 LDAP URL 指定为别名 URL,可以实现 LDAP 中的别名检查。上述第一个 URL 用于处理常规用户和组;后续别名 URL 用于处理虚名域。第一个 URL 被指定为 ALIAS_URL0

ALIAS_URL0=ldap:///$V?*?sub?$R

$V 元字符

元字符扩展发生在 URL 查找之前。在 ALIAS_URL0 值中使用的两个元字符分别为 $V$R

$V 元字符将地址的域部分转换为基本 DN。这与前面标题为重写规则机制一节所述的 $V 重写规则元字符执行的初始步骤类似。$V 处理由以下步骤组成:

  1. 获取当前域中用户条目的基本 DN。

  2. 获取与当前域相关联的规范域。在 Sun LDAP Schema 1 中,规范域名由域条目的 inetCanonicalDomainName 属性(如果该属性存在)指定。如果不存在该属性,规范域名则是通过实际域条目的 DN 以明显的方式构建的。如果当前域是一个别名,这将与当前域不同。可以使用 option.dat 文件中的 LDAP_DOMAIN_ATTR_CANONICAL MTA 选项覆盖用于存储规范名称的名称属性。

    在 Sun LDAP Schema 2 中,SunPreferredDomain 属性的值就是规范名称。

  3. 如果存在基本 DN,则使用该 DN 替换 URL 中的 $V

  4. 现在确定了该条目的所有可用托管域。通过将规范域(如果清除了 DOMAIN_UPLEVEL 的位 2 [值为 4])或当前域(如果设置了 DOMAIN_UPLEVEL 的位 2 [值为 4])与 service.defaultdomain configutil 参数相比较来完成此操作。如果不匹配,则该条目是托管域的成员。通过设置 option.dat 文件中的 LDAP_DEFAULT_DOMAIN MTA 选项可以覆盖 service.defaultdomain configutil 参数。

  5. 如果基本 DN 确定失败,则从域的左侧删除组件,然后转至步骤 1。如果没有剩余任何组件,则替换将失败。

$V 还接受可选数字变量。如果将其设置为 1(例如 $1V),将忽略解析域树中的域时出现的失败,并返回由 local.ugldapbasedn configutil 选项指定的用户树的基目录。

如果尝试检索域的基本 DN 成功,MTA 还将检索稍后会需要的若干有用的域属性。通过 option.dat 文件中的以下 MTA 选项设置检索到的属性的名称:

从 URL 调用映射

以某些其他方式完成从域到基本 DN 的映射时可能会出现一些特殊情况。为了容纳此类设置,URL 解析过程可以调用 MTA 映射。可使用以下通用格式的元字符序列完成此操作:

$|/mapping-name/ mapping-argument|

双引号 (") 将启动和终止调用。紧跟在 $ 后的字符是映射名称和变量之间的分隔符;应该选择不会与映射名称和变量中通常使用的字符值发生冲突的字符。

$R 元字符

$R 元字符为 URL 提供了适当的过滤器。目的在于生成一个过滤器,该过滤器可以搜索可能包含特定用户或组的电子邮件地址的所有属性。要搜索的属性的列表来自于 configutil 参数 local.imta.mailaliases。如果未设置此参数,则将检查 local.imta.schematag configutil 参数,并根据它的值选择一组相应的默认属性,如下所示:

sims401 mail, rfc822mailalias

nms41 mail,mailAlternateAddress

ims50 mail,mailAlternateAddress,mailEquivalentAddress

local.imta.schematag 的值可以是以逗号分隔的列表。如果支持多种模式,则使用消除了复制功能的属性的组合列表。LDAP_SCHEMATAG MTA 选项专用于为 MTA 覆盖 local.imta.schematag 的设置。

此外,过滤器不但搜索原来提供的地址,而且还搜索具有相同本地部分但实际上是在域树(该域树是在标题为$V 元字符一节中的第二步保存的)中找到的域的地址。域树查找的重复性意味着两个地址可能不同。此附加检查由 option.dat 文件中的 DOMAIN_UPLEVEL MTA 选项的位 1(值为 2)来控制。设置位将启用附加地址检查。DOMAIN_UPLEVEL 的默认值为 0。

例如,假定域 siroe.com 显示在域树中。假设 Sun LDAP Schema 1 有效,要查找的地址是

u@host1.siroe.com

扩展 $R 和 ims50 schematag 得到的过滤器将类似于:

(|(mail=u@siroe.com)
    (mail=u@host1.siroe.com)
    (mailAlternateAddress=u@siroe.com)
    (mailAlternateAddress=u@host1.siroe.com) 
    (mailEquivalentAddress=u@siroe.com)
    (mailEquivalentAddress=u@host1.siroe.com))

另一方面,如果将 DOMAIN_UPLEVEL 设置为 1 而不是 3,则过滤器将为:

(|(mail=u@host1.siroe.com)
       (mailAlternateAddress=u@host1.siroe.com)
       (mailEquivalentAddress=u@host1.siroe.com))

确定要获取的属性

如果 URL 将要返回的属性的列表指定为 *,则将用 MTA 能够使用的属性的列表替换星号。此列表是由指定 MTA 所使用选项的各个 MTA 选项设置动态生成的。

处理 LDAP 错误

此时,所得到的 URL 用于执行 LDAP 搜索。如果出现某种 LDAP 错误,处理将终止并指示临时故障(SMTP 中的 4xx 错误)。如果 LDAP 操作成功,但无法生成结果,则将检查通过 LDAP_DOMAIN_ATTR_CATCHALL_ADDRESS MTA 选项检索到的域的替换邮件地址属性。如果设置了该属性,则该属性的值将替换当前地址。

如果未设置此替换邮件地址属性,则检查通过 LDAP_DOMAIN_ATTR_SMARTHOST MTA 属性检索到的域的智能主机属性。如果设置了该属性,则创建

@smarthost: user@domain

格式的地址,并且别名处理将以此结果成功终止。此外,通过 LDAP_DOMAIN_ATTR_CONVERSION_TAG MTA 选项获得的域的转换标记(如果存在)将被附加到地址中,以便在转发给智能主机之前可以先完成转换操作。如果该域不存在替换邮件地址或智能主机,则此别名 URL 的处理将不会成功终止。

对 LDAP 结果的正常性检查

LDAP 搜索返回了结果之后,它将验证其中是否只有一个条目。如果具有多个条目,则检查每个条目以确定其是否具有用户或组的正确对象类、不可删除的状态以及具有用户的 UID。忽略未通过此检查的条目。如果通过此检查将多个条目的列表减少到只有一个条目,则处理将继续进行。如果没有减少,将返回一个复制或模糊目录错误。

支持虚名域

ALIAS_URL0 检查是针对常规用户或托管域中的用户的。如果此检查失败,还会进行虚名域检查。使用以下别名 URL 可以完成此操作:

ALIAS_URL1=ldap:///$B?*?sub?(&(msgVanityDomain=$D)$R)

支持替换邮件地址

最后,需要在 mailAlternateAddress 属性中检查 @host 格式的替换邮件地址。此格式的通配符允许在托管域和虚名域中使用,因此地址的正确别名 URL 为:

ALIAS_URL2=ldap:///$1V?*?sub?(mailAlternateAddress=@$D)


注 –

在直接 LDAP 模式中,+* 子地址替换机制始终用于处理替换邮件地址,但被替换的字符串仅为子地址,而非整个本地部分。这种情况已改变,使用这种构造时原始地址的整个本地部分将作为子地址插入替换邮件地址。

例如,给定形式为 foo+bar@domain.com 的地址(domain.com 域中没有本地用户 foo)以及 domain.com 的替换邮件地址 bletch+*@example.com,最终得到的地址为 bletch+foo+bar@example.com。而原来是 bletch+bar@example.com