Sun Java System Messaging Server 6.3 管理指南

11.6.7 用戶提供的常式替換,$[...]

$[image ,routine,argument ] 格式的替換用於尋找並呼叫用戶提供的常式。在 UNIX 上運行時,MTA 使用 dlopendlsym 從共用程式庫影像中動態地載入並呼叫指定的常式。然後,將使用以下引數清單以函數的方式呼叫常式:

status := routine (argument, arglength, result, reslength)

argumentresult 為 252 位元組長的字元字串緩衝區。在 UNIX 上,argumentresult 將做為指標傳送至字元字串 (例如,在 C 中做為 char*)。arglengthreslength 是由參照傳送的帶符號的長整數。在輸入中,argument 含有來自重寫規則範本的引數字串,而 arglength 含有該字串的長度。在傳回中,結果字串應位於 result 內,其長度應位於 reslength 內。然後,此結果字串將替代重寫規則範本中的「$[ image,routine,argument]」。如果重寫規則失敗,常式應傳回 0;如果成功,應傳回 -1。

此機制可讓重寫程序以各種複雜的方式進行延伸。例如,可以執行某種類型的名稱服務呼叫,並且可以某種方式將結果用於改變位址。正向定位位址 (例如,To: 位址) 至主機 siroe.com 的目錄服務查詢可以使用以下重寫規則並按以下方式執行。如11.6.12 方向和位置特定的重寫規則 ($B、$E、$F、$R) 中所述,$F 導致此規則僅用於正向定位位址︰

siroe.com $F$[LOOKUP_IMAGE,LOOKUP,$U]

當正向定位位址 jdoe@siroe.com 比對此重寫規則時,將導致 LOOKUP_IMAGE (UNIX 上的共用程式庫) 被載入記憶體,並導致常式 LOOKUP 被呼叫 (以 jdoe 做為引數參數)。然後,常式 LOOKUP 可能會在結果參數中傳回不同的位址 (如 John.Doe%eng.siroe.com) 和值 -1,表示重寫規則已成功。結果字串中的百分比符號 (請參閱11.4.2 重複的重寫範本 A%B),John.Doe@eng.siroe.com 做為位址被重寫。

在 UNIX 系統上,網站提供的共用程式庫影像應可由所有人讀取。