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

本機位址的別名延伸

確定位址與本機通道關聯後,系統將自動對其進行別名擴充。別名延伸程序會檢查大量資訊來源,包括:

  1. Alias 檔案 (已編譯配置的一部分)。

  2. Alias 資料庫。

  3. Alias URL。

所檢查的確切別名來源及別名檢查順序取決於 option.dat 檔案中 ALIAS_MAGIC MTA 選項的設定。對於直接 LDAP,請將此選項設定為 8764。這表示首先檢查由 ALIAS_URL0 MTA 選項指定的 URL,然後檢查由 ALIAS_URL1 MTA 選項指定的 URL, 再檢查由 ALIAS_URL2 MTA 選項指定的 URL,最後檢查 Alias 檔案。此設定在使用中時,不檢查資料庫。

使用 LDAP URL 檢查別名

對 LDAP 中別名的檢查透過指定兩個特殊的 LDAP URL 作為別名 alias URL 來實作。第一個別名 URL 處理一般使用者和群組,隨後的 alias 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 存在,將其替換為代替 $V 的URL。

  4. 現在確定適用於此項目的所有託管網域。執行方法是,將標準網域 (如果清除 DOMAIN_UPLEVEL 的位元 2 [值 = 4]) 或目前網域 (如果設定 DOMAIN_UPLEVEL 的位元 2 [ 值 = 4]) 與 service.defaultdomain 參數進行比較。如果不相符,則該項目為託管網域的成員。透過設定 option.dat 檔案中的 LDAP_DEFAULT_DOMAIN MTA 選項,可以置換 LDAP_DEFAULT_DOMAIN 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 選項可用於置換 local.imta.schematag 專用於 MTA 的設定。

此外,篩選器不僅搜尋最初提供的位址,還搜尋具有相同本機部分、但實際在網域樹狀結構中找到網域的位址 (儲存在$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 選項擷取的網域之 catchall 位址屬性。如果已設定該屬性,其值會取代目前位址。

如果沒有設定 catchall 位址屬性,系統會檢查從 LDAP_DOMAIN_ATTR_SMARTHOST MTA 選項擷取的網域之 smarthost 屬性。如果已設定該屬性,則建立

@smarthost:user@domain

形式的位址,而別名處理作業會成功終止並顯示此結果。此外,取自 LDAP_DOMAIN_ATTR_CONVERSION_TAG MTA 選項的網域之轉換標記 (如果有) 將會附加至該位址,以在轉寄至 smarthost 之前完成轉換。如果該網域沒有 catchall 位址或智慧主機,此 alias URL 的處理作業將以失敗告終。

對 LDAP 結果的正常性檢查

LDAP 搜尋傳回結果後系統將檢查該結果以驗證其中是否只有一個項目。如果有多個項目,系統會檢查每個項目是否具有用於使用者或群組的正確物件類別、非刪除狀態以及用於使用者的 UID。未通過該檢查的項目會被忽略。如果多個項目的清單透過此檢查縮減為一個項目,處理作業將繼續。如果沒有,則傳回錯誤,指明目錄重複或模糊。

支援虛名網域

ALIAS_URL0 檢查適用於普通使用者或託管網域中的使用者。如果檢查失敗,還會執行虛名網域檢查。此檢查透過以下 alias URL 完成:

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

支援 Catchall 位址

最後,需要在 mailAlternateAddress 屬性中對 @host 形式的 catchall 位址執行檢查。在託管網域和虛名網域中均允許使用這種萬用字元形式,因此其正確的 alias URL 為:

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


備註 –

在直接 LDAP 模式中,+* 子位址替換機制始終與 catch-all 位址配合運作,但替換的字串僅是子位址,而非整個本機部分。這種情況已經變更,因此當使用此建構時,原始位址的整個本機部分將被作為子位址插入位址中。

例如,給定形式為 foo+bar@domain.com 的位址,在 domain.com 網域中無本機使用者 foo,而且 domain.com 的 catch-all 位址形式為 bletch+*@example.com,則現在的結果位址將是 bletch+foo+bar@example.com。以前則是 bletch+bar@example.com