このファイルは Emacs SASL ライブラリーを説明します。

Copyright © 2000, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts.  A copy of the license is included in the section entitled "GNU Free Documentation License".

この文書を、フリーソフトウェア財団発行の GNU フリー文書利用許諾契約書第 1.2 版またはそれ以降の版が定める条件の下で複製、配布、あるいは変更することを許可します。変更不可部分、表表紙テキストおよび裏表紙テキストは指定しません。この利用許諾契約書の複写は「GNU フリー文書利用許諾契約書」という章に含まれています。

Emacs SASL
**********

このマニュアルは Emacs SASL ライブラリーを説明します。

異なるプロトコルを使うアプリケーション間で、複数の認証メカニズムを共有するための共通インターフェースです。

大要
**

SASL は Simple Authentication and Security Layer の略です。標準は RFC2222 に文書化されています。これは、さまざまなアプリケーション・プロトコルに、認証サポートを追加するための簡単な手段を提供します。

このライブラリーの最上位のインターフェースは、Java SASL Application Program Interface によって触発されました。それは、抽象化した一連の認証メカニズムのドライバーを定義します。

バックエンドのドライバーは、なるべく認証メカニズムに密接していることを目指しています。どこにある追加の設定情報にも、この実装からアクセスすることができます。

使い方
***

(まだ書かれていません)。

Emacs SASL ライブラリーを使うには、アプリケーション・プログラムの最初で、以下の式を評価してください。

     (require 'sasl)

実行時にのみ sasl.el が存在していることを検査したいならば、代わりに必要な関数の autoload の設定を並べておいても構いません。

データの型
*****

ネゴシエートされたセキュリティー層の伝送に使われる三つのデータの型として、メカニズム、クライアント・パラメーター、および認証ステップがあります。

メカニズム
=====

メカニズム (sasl-mechanism オブジェクト) が、SASL 認証メカニズムのドライバーのスキームです。

 -- Variable: sasl-mechanisms
     メカニズム名のリスト。

 -- Function: sasl-find-mechanism mechanisms
     適切なメカニズムを取得します。

     この関数は MECHANISMS と sasl-mechanisms を比較して、適切な sasl-mechanism オブジェクトを返します。

          (let ((sasl-mechanisms '("CRAM-MD5" "DIGEST-MD5")))
            (setq mechanism (sasl-find-mechanism server-supported-mechanisms)))

 -- Function: sasl-mechanism-name mechanism
     メカニズムの名前を文字列で返します。

認証メカニズムのドライバー (Back end drivers) を書きたければ、 sasl-make-mechanism を使い、sasl-mechanisms および sasl-mechanism-alist を正しく変更してください。

 -- Function: sasl-make-mechanism name steps
     sasl-mechanism オブジェクトを割り当てます。

     この関数は二つのパラメーター、すなわちメカニズムの名前、および認証するための関数のリストを受け取ります。

          (defconst sasl-anonymous-steps
            '(identity                            ; 最初は応答無し
              sasl-anonymous-response))

          (put 'sasl-anonymous 'sasl-mechanism
               (sasl-make-mechanism "ANONYMOUS" sasl-anonymous-steps))

クライアント
======

クライアント (sasl-client オブジェクト) は四つのパラメーター、すなわちメカニズム、ユーザー名、サービス名、およびサーバー名によって初期化されます。

 -- Function: sasl-make-client mechanism name service server
     sasl-client オブジェクトを用意します。

 -- Function: sasl-client-mechanism client
     クライアントのメカニズム (sasl-mechanism オブジェクト) を返します。

 -- Function: sasl-client-name client
     クライアントの認証名を文字列で返します。

 -- Function: sasl-client-service client
     クライアントのサービス名を文字列で返します。

 -- Function: sasl-client-server client
     クライアントのサーバー名を文字列で返します。

属性の設定を追加したい場合は、sasl-client-set-property を使ってください。

 -- Function: sasl-client-set-property client property value
     与えられた属性およびその値をクライアントに追加します。

 -- Function: sasl-client-property client property
     クライントの属性の値を返します。

 -- Function: sasl-client-set-properties client plist
     クライアントの属性を破壊的に設定します。

     第二引数は新しいプロパティー・リスト (plist) です。

 -- Function: sasl-client-properties client
     クライアントの設定のプロパティー・リストを、まるごと返します。

ステップ
====

ステップ (sasl-step オブジェクト) は認証「ステップ」の抽象化です。それは、応答の値と次回の認証処理の入り口を保持します (後者はアクセスできません)。

 -- Function: sasl-step-data step
     STEP が保持するデータを文字列で返します。

 -- Function: sasl-step-set-data step data
     STEP に DATA の文字列を格納します。

最初の応答を得るには、第二引数を nil にして関数 sasl-next-step を呼ばなければなりません。

     (setq name (sasl-mechanism-name mechanism))

この段階で、SASL の認証プロトコルの交換を開始するコマンドを送ることができます。例です。

     (process-send-string
      process
      (if (sasl-step-data step)              ; 最初の応答
          (format "AUTH %s %s\r\n"
                  name (base64-encode-string (sasl-step-data step) t))
        (format "AUTH %s\r\n" name)))

認証処理を続けるために行なわなければならないことは、連続して sasl-next-step を呼ぶことです。

 -- Function: sasl-next-step client step
     認証ステップを実行します。

     最初は STEP を nil に設定しなければなりません。

バックエンド・ドライバー
************

(まだ書かれていません)。