如果給定項目中的式樣比較失敗,則不採取任何動作;系統將繼續掃描下一個項目。如果比較成功,將使用項目的右側作為範本以產生輸出字串。該範本可將輸入字串有效地取代為根據範本給出的說明建構的輸出字串。
範本中幾乎所有的字元只需在輸出中產生自身。但美元符號 ($) 是個例外。
美元符號後跟美元符號、空格或定位鍵會在輸出字串中產生美元符號、空格或定位鍵。請注意,您必須引用所有這些字元,以便將其插入輸出字串。
美元符號後跟數字 n 代表替換;美元符號後跟字母字元稱為「中介字元」。中介字元本身不會顯示在範本產生的輸出字串中,但它們會產生一些特殊的替換或處理。請參閱表 10–4,以取得特殊替換和標準處理中介字元的清單。所有其他中介字元將保留用於對映特定的應用程式。
請注意,中介字元 $C` $E、$L 或 $R 中的任何一個出現在匹配式樣的範本中時,均會影響對映程序並可控制該程序是終止還是繼續。也就是說,它可以設定反覆式對映表項目,其中一個項目的輸出會成為另一個項目的輸入。如果匹配式樣的範本不包含中介字元 $C、$E、$L 或 $R 中的任何一個,則假設為 $E (立即終止對映程序)。
為防止無窮迴圈,將限制通過對映表的反覆次數。每次重新啟動一個傳送 (其式樣的長度等於或長於先前的傳送) 時,計數器就會遞增。如果該字串短於先前的字串,計數器將重設為零。計數器超過 10 之後,將不接受反覆對映的請求。
表 10–4 對映範本替換和中介字元
替換序列 |
替換 |
---|---|
$n |
從 0 開始從左至右計數的第 n 個萬用字元欄位。 |
$#...# |
序列號替換。 |
$]...[ |
LDAP 搜尋 URL 查詢;在結果中替換。 |
$|...| |
將指定的對映表套用至所提供的字串。 |
${...} |
一般資料庫替換。 |
$}domain,attribute{ |
增加存取每個網域屬性的能力。domain 是有問題的網域,而 attribute 是與該網域相關聯的屬性。如果網域存在且具有該屬性,則其初始值將替換為對映結果。如果屬性或網域不存在,則對映項目失敗。 attributes 可以為網域 LDAP 屬性或以下定義的特殊屬性︰ _base_dn_ - 網域中使用者項目的基底 DN _domain_dn_ - 網域項目自身的 DN _domain_name_ - 網域名稱 (與別名相對) _canonical_name_ - 與網域相關聯的標準名稱 |
$[...] |
呼叫網站提供的常式;在結果中替換。 |
中介字元 |
說明 |
$C |
從下一個表格項目開始繼續執行對映程序;使用此項目的輸出字串作為對映程序的新輸入字串。 |
$E |
立即結束對映程序;使用此項目的輸出字串作為對映程序的最終結果。 |
$L |
從下一個表格項目開始繼續執行對映程序;使用此項目的輸出字串作為新的輸入字串;耗盡表格中的所有項目後,從第一個表格項目開始再執行一次對映程序。後續匹配可以使用 $C、$E 或 $R 中介字元來置換此條件。 |
$R |
從對映表的第一個項目開始繼續執行對映程序;使用此項目的輸出字串作為對映程序的新輸入字串。 |
$nA |
插入從位置 0 開始的目前位址的左邊第 n 個字元。如果省略了 n,則插入整個位址。 |
$nX |
插入從 0 開始的郵件主機的左邊第 n 個元件。如果 n 省略,則插入整個郵件主機。 |
$?x? |
對映項目百分之 x 的時間成功。 |
$\ |
強制後續文字為小寫。 |
$^ |
強制後續文字為大寫。 |
$_ |
使後續文字保留其原有的大小寫形式。 |
$= |
強制後續替換的字元承擔適當的配額作業,以便插入與大寫有關的 LDAP 搜尋篩選器。 |
$:x |
僅在設定指定旗標後匹配。 |
$;x |
僅在清除指定旗標後匹配。 |
後跟數字 n 的美元符號將由式樣中匹配第 n 個萬用字元的內容所取代。萬用字元從 0 開始編號。例如,以下項目將匹配輸入字串 PSI%A::B,並產生結果輸出字串 b@a.psi.siroe.com︰
PSI$%*::* $1@$0.psi.siroe.com |
輸入字串 PSI%1234::USER 也匹配,並產生 USER@1234.psi.siroe.com 做為輸出字串。輸入字串 PSIABC::DEF 不匹配此項目中的式樣,且不會採取動作;亦即不會從此項目中產生輸出字串。
中介字元 $\ 強制後續文字採用小寫,$^ 強制後續文字採用大寫,$_ 使後續文字保留其原有的大小寫形式。例如,使用對映變換區分大小寫的位址時,這些中介字元將十分有用。
$C、$L、$R 和 $E 中介字元會影響對映程序,可控制對映程序是否終止以及何時終止。中介字元:
$C 使對映程序繼續處理下一個項目,並使用目前項目的輸出字串做為對映程序的新輸入字串。
$L 使對映程序繼續處理下一個項目,並使用目前項目的輸出字串做為對映程序的新輸入字串。如果未找到匹配項目,則從第一個表格項目開始再次通過表格;帶有 $C、$E 或 $R 中介字元的後續匹配項目將置換此條件。
$R 使對映程序從表格的第一個項目開始繼續執行,並使用目前項目的輸出字串做為對映程序的新輸入字串。
$E 使對映程序終止;此項目的輸出字串為最終輸出。$E 為預設。
對映表範本是從左至右掃描的。若要設定可能「成功」或「失敗」的項目 (例如,一般資料庫替換或隨機值控制的項目) 之 $C、$L 或 $R 旗標,請將 $C、$L 或 $R 中介字元至於可能成功或失敗的項目左側;否則,如果該項目的其餘部分失敗,將不顯示旗標。
某些對映探測已設定特殊旗標。這些旗標為可設定的旗標,使用 $: 和 $; 測試的一般對映表功能可測試其是否存在。$:x 導致項目僅在已設定旗標 x 的情況下匹配。$;x 導致項目僅在已清除旗標 x 的情況下匹配。請參閱特定的對映表描述,以取得可能適用於該表的所有特殊旗標。(請參閱表 17–2 中的 $A、$T、$S、$F 和 $D)。
如果希望在旗標檢查成功時項目成功並終止,但在旗標檢查失敗時對映程序繼續,則項目應將中介字元 $C 用於旗標檢查的左側,而將旗標 $E 用於旗標檢查的右側。
對映表項目中的中介字元 $?x? 使項目的「成功」時間達到百分之 x;在其餘時間,該項目會「失敗」,並且將對映項目輸入的輸出保持不變地用做輸出。(請注意,根據對映項目,失敗的影響不一定與第一個不匹配的項目相同。)x 應是指定成功百分比的實際數字。
例如,假定 IP 位址為 123.45.6.78 的系統向您的站點傳送過多的 SMTP 電子郵件,您想要使其速度減慢;可以按以下方式使用 PORT_ACCESS 對映表。假定您只允許 25% 的連線嘗試,拒絕其餘 75% 的連線嘗試。以下 PORT_ACCESS 對映表使用 $?25? 使帶有 $Y (接受連線) 的項目僅在 25% 的時間內成功;在其餘 75% 的時間內,當項目失敗時,該項目上的初始 $C 將使 MTA 從下一個項目開始繼續對映,導致連線嘗試被拒絕,並顯示 SMTP 錯誤和訊息:請稍後重試。
PORT_ACCESS TCP|*|25|123.45.6.78|* $C$?25?$Y TCP|*|25|123.45.6.78|* $N45s$ 4.40$ Try$ again$ later |
$#...# 替換會遞增 MTA 序列檔案中儲存的值,並將該值替換至範本。當對映表輸出中需要有唯一的限定符時,這可用於產生唯一的遞增字串;例如,使用對映表產生檔案名稱時。
允許使用以下任何一種形式的語法:
$#seq-file-spec|radix|width|m# |
$#seq-file-spec|radix|width# |
$#seq-file-spec|radix# |
$#seq-file-spec# |
必要的 seq-file-spec 引數是現有 MTA 序列檔案的完整檔案規格。選擇性的 radix 和 width 引數分別指定用於輸出序列值的基數 (基準) 和要輸出的數位。預設基數為 10。從 -36 至 36 範圍內的基數均可用;例如,基數 36 給出由數字 0 至 9、A 至 Z。依預設,序列值按其原始寬度列印,但如果指定的寬度需要更多位數,則輸出的左側將使用0 填補,以獲得正確的位數。請注意,如果已明確指定寬度,則基數也必須明確指定。
選擇性的 m 引數為模數。如果已指定第四個引數,則插入的值是從檔案模數 m 中擷取的序列號。預設為不執行任何模數作業。
如上所述,對映中參考的 MTA 序列檔案必須已存在。若要建立 MTA 序列檔案,請使用以下 UNIX 指令:
touch seq-file-spec |
或
cat >seq-file-spec |
使用對映表存取的序列號檔案必須可由所有人讀取以便正確作業。您還必須有一個 MTA 使用者帳號 (在 imta_tailor 檔案中配置為 nobody),才能使用此類序列號檔案。
$]ldap-url [ 格式的替換是經過特殊處理的。ldap-url 被解譯為 LDAP 查詢 URL,且 LDAP 查詢的結果被替換。使用標準 LDAP URL 時,會忽略主機和連接埠,而使用 LDAP_HOST 和 LDAP_PORT 選項指定主機和連接埠。即,應將 LDAP URL 指定為:
ldap:///dn[?attributes[?scope?filter]]
其中,上面所示的方括號字元 [ 和 ] 表示 URL 的選擇性部分。dn 是必需的,並且是指定搜尋基底的辨別名稱。URL 的選擇性部分 attributes、scope 以及 filter 會進一步細加區別要傳回的資訊。亦即 attributes 指定要從匹配該 LDAP 查詢的 LDAP 目錄項目傳回的屬性。scope 可以是 base (預設),、one 或 sub 的任何一個。filter 說明匹配項目的特性。
某些 LDAP URL 替換序列可在 LDAP 查詢 URL 中使用。
$|mapping ;argument| 格式的替換是經過特殊處理的。MTA 會在 MTA mappings 檔案中查找名為 mapping 的輔助對映表,並使用 argument 做為已命名輔助對映表的輸入。已命名的輔助對映表必須存在,並且必須在其輸出中設定 $Y 旗標 (如果成功);如果已命名的輔助對映表不存在,或未設定 $Y 旗標,則該輔助對映表替換將失敗,並且原來的對映項目也被視為失敗:原始輸入字串將用作輸出字串。
請注意,若您要在執行對映表替換的對映表項目中使用處理控制中介字元 (如 $C、$R 或 $L),應將處理控制中介字元置於對映表範本中對映表替換的左側;否則,對映表替換的「失敗」將意味著不顯示處理控制中介字元。
格式 ${text} 的替換是經過特殊處理的。text 部分用做存取一般查詢表格或資料庫的金鑰使用。資料庫是使用 imsimta crdb 公用程式產生的。如果在表格中找到 text,則將替換表格中相應的範本。如果 text 不匹配表格中的項目,則輸入字串將保持不變地用做輸出字串。
如果要使用一般查詢表格,則需要設定 MTA 選項 use_text_databases 的低位位元。即,將其設定為奇數。需要使用 imsimta cnbuild 來編譯並使用 imsimta reload 來重新載入可重新載入的資料,從而將對 general.txt 所做的變更編譯至 MTA 配置中。
如果您要使用一般資料庫,該資料庫應可由所有人讀取以確保其正確作業。
若您要在執行一般表格替換的對映表項目中使用處理控制中介字元 (如 $C、$R 或 $L),應將處理控制中介字元置於對映表範本中一般表格替換的左側,否則一般表格替換的「失敗」將意味著不顯示處理控制中介字元。
格式 $[image ,routine,argument ] 的替換是經過特殊處理的。image, routine, argument 部分用於尋找並呼叫用戶提供的常式。在 UNIX 上運行時,MTA 使用 dlopen 和 dlsym 從共用程式庫 image 中動態地載入和呼叫常式 routine。然後,將使用以下引數清單以函數的方式呼叫常式 routine:
status = routine (argument, arglength, result, reslength) |
argument 和 result 是長度為 252 個位元組的字元字串緩衝區。argument 和 result 將做為指標傳送至字元字串 (例如,在 C 中做為 char*)。arglength 和 reslength 是由參照傳送的帶符號的長整數。在輸入中,argument 包含來自對映表範本的 argument 字串,arglength 包含該字串的長度。在傳回中,結果字串應置於 result 中,其長度應置於 reslength 中。然後,結果字串會替代對映表範本中的 $[image,routine,argument]。如果對映表替換失敗,則 routine 常式應傳回 0;如果對映表替換成功,則該常式應傳回 -1。如果替換失敗,則正常情況下,原始輸入字串將保持不變地用作輸出字串。
如果您要在執行站點提供的常式替換的對映表項目中使用處理控制中介字元 (如 $C、$R 或 $L),應將處理控制中介字元置於對映表範本中網站提供的常式替換的左側;否則,對映表替換的「失敗」將意味著不顯示處理控制中介字元。
網站提供的常式圖例機制允許使用各種複雜的方式來延伸 MTA 的對映程序。例如,在 PORT_ACCESS 或 ORIG_SEND_ACCESS 對映表中,可以執行對某些類型的載入監視服務的呼叫,其結果用於決定是否接受連線或郵件。
站點提供的共用程式庫影像 image 應可由所有人讀取。
您可以從一般對映表功能中的 Unicode 字元值中產生 UTF-8 字串。表單的 Unicode 中介字元序列︰
$&A0A0,20,A1A1&
會產生在 A0A0、20 和 A1A1 位置包含字元的 UTF-8 字串。