sendmail重写规则在单独的文件中

有没有办法将Rewrite Roules移出sendmail.cf文件? 一方面,sendmail文档build议仅在sendmail.mc文件中进行更改,但所有重写规则都在.cf文件中。 我想在.cf文件中重写规则的所有更改都会在.mc文件下一次生成.cf文件时丢失。

大多数sendmail.cf和重写规则被认为是非常令人讨厌和神秘的,很less有人摆弄它们; 整个sendmail.mc/M4机制为sendmailconfiguration提供了一个更“用户友好”的前端。 大多数人应该只使用sendmail.mc/M4机制,并且绝对不要直接修改sendmail.cf,包括生成修改后的重写规则。

如果sendmail.mc/M4机制不适合你,而你想在sendmail.cf中“调整”一些规则,你可以使用sendmail.mc/M4的LOCAL_NET_CONFIG和LOCAL_RULESETSfunction机制。 如果你想直接使用sendmail.cf来制作主要的mods,甚至可以完全不使用sendmail.mc / M4机制,那么你超过了99.44%的pipe理员需要做的事情,并且可能需要一些自定义编辑Makefile和/或shell脚本来实现你想要的scheme。 (注意在某些系统上, service sendmail start会调用执行sendmail.mc/M4机制的Makefile,所以sendmail.cf的覆盖会比你期望的更频繁发生)。

(说实话,我也有时会发现,这种两级间接的前端界面有点尴尬和令人沮丧:有时我知道我想要什么,而且我知道如何让sendmail.cf做到这一点…但我不能找出用sendmail.mc/M4机制来说的“正确”的方法,而对不同版本的BIND的build议有时候更具误导性而不是有用的。对于我来说,经常用到的就是用所需的sendmail .cf在grep命令中打开“右键”sendmail.mc/M4function: grep "desired_sendmail.cf_words" /usr/share/sendmail.cf/*/* 。)

通过sendmail自述文件(可能是/ usr / share / sendmail-cf / README),可以通过指定LOCAL_NET_CONFIG和/或LOCAL_RULESET(和LOCAL_RULE_3,LOCAL_RULE_0)来使M4 sendmail.mc-> sendmail.cf机制直接插入任意的附加重写规则,LOCAL_RULE_1和LOCAL_RULE_2)在sendmail.mc。 例如,要插入交付重写规则:

 LOCAL_NET_CONFIG # Add/insert my own additional rewrite-rule(s) R$* < @ $* .$m. > $* $#smtp $@ $2.$m. $: $1 < @ $2.$m. > $3 

或者添加一个新的重写规则集:

 LOCAL_RULESETS # Add one or more new rewrite-rulesets (subroutines) [new name] SLocal_trust_auth R$* $: $&{auth_authen} Rsmmsp $# OK 

或者将更多的重写规则附加到现有的重写规则集的末尾:

 LOCAL_RULESETS # Append to one or more existing rewrite-rulesets (subroutines) [existing name] SParse1 R$* $: $&{auth_authen} Rsmmsp $# OK 

然而 ,这种机制是为了“调整”现有的重写规则框架,而不是对重写规则进行完全随意的改变。 使用LOCAL_NET_CONFIG的规则将始终插入到规则集0中途的相同位置。它们不能与之前存在的大不相同,使得传递不再与现有“分析”function所做的假设大致相符。 LOCAL_RULESETS中的新规则集(子例程)只能由插入的规则调用,或者由sendmail程序本身直接调用,具体取决于特定的(可能是模糊的)子例程名称和sendmail.mc FEATURE规范。 而对于LOCAL_RULESET中现有规则集(子例程)的扩展可以添加新的function,但是可能无法改变现有的function,因为匹配和现有的先前规则的“返回”将在达到附加规则之前终止该规则集的执行。 不过,这可能是足够的,你想要什么。

如果你这样做,使用sendmail -bt -Ctrial_sendmail.cf_file -d21.15testing机制,以确保它的行为方式你打算。 请记住,你的“风格”应该是以这样一种方式组合你的新规则,使其能够无缝地融入到现有的规则集框架中(而不是对现有的框架进行小小的考虑而进行任意的修改)。 这就好像为其他人构build的现有代码添加一个新function。 分布式重写规则不仅可以处理主线行为,还可以处理边缘情况(单个主机的MX?伪装exception?UUCP连接?别名?等)? 希望你的附加规则也会同样全面。

sendmail运行时读取sendmail.cf。 所以sendmail.cf必须存在,并且包含一组完整的规则和variables,这些规则和variables需要设置为符合工作设置的要求。 构buildsendmail.cf最常见的方法是维护简单的sendmail.mc文件,然后使用m4将sendmail.mc“编译”为sendmail.cf。 所以是的,可以将sendmail.mc文件分解成多个部分,然后仔细执行m4来生成(单个)sendmail.cf

如果你想修改sendmail.mc和.cf文件,我强烈推荐使用bat书 。 对于绕过m4和sendmail.mc的方法,你可以看看Sendmail的理论和实践,但对于大多数人来说,这可能是矫枉过正的。