This is sasl.info, produced by makeinfo version 4.6 from sasl.texi.

START-INFO-DIR-ENTRY
* SASL: (sasl).   The Emacs SASL library.
END-INFO-DIR-ENTRY

   This file describes the Emacs SASL library.

   Copyright (C) 2000 Daiki Ueno.

   Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.1 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".


File: sasl.info,  Node: Top,  Next: Overview,  Up: (dir)

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

This manual describes the Emacs SASL library.

   A common interface to share several authentication mechanisms between
applications using different protocols.

* Menu:

* Overview::                    What Emacs SASL library is.
* How to use::                  Adding authentication support to your applications.
* Data types::
* Backend drivers::             Writing your own drivers.
* Index::
* Function Index::
* Variable Index::


File: sasl.info,  Node: Overview,  Next: How to use,  Prev: Top,  Up: Top

Overview
********

SASL is short for "Simple Authentication and Security Layer".  This
standard is documented in RFC2222.  It provides a simple method for
adding authentication support to various application protocols.

   The toplevel interface of this library is inspired by Java SASL
Application Program Interface.  It defines an abstraction over a series
of authentication mechanism drivers (*Note Backend drivers::).

   Backend drivers are designed to be close as possible to the
authentication mechanism.  You can access the additional configuration
information anywhere from the implementation.


File: sasl.info,  Node: How to use,  Next: Data types,  Prev: Overview,  Up: Top

How to use
**********

(Not yet written).

   To use Emacs SASL library, please evaluate following expression at
the beginning of your application program.

     (require 'sasl)

   If you want to check existence of sasl.el at runtime, instead you
can list autoload settings for functions you want.


File: sasl.info,  Node: Data types,  Next: Backend drivers,  Prev: How to use,  Up: Top

Data types
**********

There are three data types to be used for carrying a negotiated
security layer--a mechanism, a client parameter and an authentication
step.

* Menu:

* Mechanisms::
* Clients::
* Steps::


File: sasl.info,  Node: Mechanisms,  Next: Clients,  Up: Data types

Mechanisms
==========

A mechanism (`sasl-mechanism' object) is a schema of the SASL
authentication mechanism driver.

 - Variable: sasl-mechanisms
     A list of mechanism names.

 - Function: sasl-find-mechanism mechanisms
     Retrieve an apropriate mechanism.  This function compares
     MECHANISMS and `sasl-mechanisms' then returns apropriate
     `sasl-mechanism' object.

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


 - Function: sasl-mechanism-name mechanism
     Return name of mechanism, a string.

   If you want to write an authentication mechanism driver (*Note
Backend drivers::), use `sasl-make-mechanism' and modify
`sasl-mechanisms' and `sasl-mechanism-alist' correctly.

 - Function: sasl-make-mechanism name steps
     Allocate a `sasl-mechanism' object.  This function takes two
     parameters--name of the mechanism, and a list of authentication
     functions.

          (defconst sasl-anonymous-steps
            '(identity				;no initial response
              sasl-anonymous-response))
          
          (put 'sasl-anonymous 'sasl-mechanism
               (sasl-make-mechanism "ANONYMOUS" sasl-anonymous-steps))



File: sasl.info,  Node: Clients,  Next: Steps,  Prev: Mechanisms,  Up: Data types

Clients
=======

A client (`sasl-client' object) initialized with four parameters--a
mechanism, a user name, name of the service and name of the server.

 - Function: sasl-make-client mechanism name service server
     Prepare a `sasl-client' object.

 - Function: sasl-client-mechanism client
     Return the mechanism (`sasl-mechanism' object) of client.

 - Function: sasl-client-name client
     Return the authorization name of client, a string.

 - Function: sasl-client-service client
     Return the service name of client, a string.

 - Function: sasl-client-server client
     Return the server name of client, a string.

   If you want to specify additional configuration properties, please
use `sasl-client-set-property'.

 - Function: sasl-client-set-property client property value
     Add the given property/value to client.

 - Function: sasl-client-property client property
     Return the value of the property of client.

 - Function: sasl-client-set-properties client plist
     Destructively set the properties of client.  The second argument
     is the new property list.

 - Function: sasl-client-properties client
     Return the whole property list of client configuration.


File: sasl.info,  Node: Steps,  Prev: Clients,  Up: Data types

Steps
=====

A step (`sasl-step' object) is an abstraction of authentication "step"
which holds the response value and the next entry point for the
authentication process (the latter is not accessible).

 - Function: sasl-step-data step
     Return the data which STEP holds, a string.

 - Function: sasl-step-set-data step data
     Store DATA string to STEP.

   To get the initial response, you should call the function
`sasl-next-step' with the second argument nil.

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

   At this point we could send the command which starts a SASL
authentication protocol exchange.  For example,

     (process-send-string
      process
      (if (sasl-step-data step)		;initial response
          (format "AUTH %s %s\r\n" name (base64-encode-string (sasl-step-data step) t))
        (format "AUTH %s\r\n" name)))

   To go on with the authentication process, all you have to do is call
`sasl-next-step' consecutively.

 - Function: sasl-next-step client step
     Perform the authentication step.  At the first time STEP should be
     set to nil.


File: sasl.info,  Node: Backend drivers,  Next: Index,  Prev: Data types,  Up: Top

Backend drivers
***************

(Not yet written).


File: sasl.info,  Node: Index,  Next: Function Index,  Prev: Backend drivers,  Up: Top

Index
*****

* Menu:

File: sasl.info,  Node: Function Index,  Next: Variable Index,  Prev: Index,  Up: Top

Function Index
**************

* Menu:

* sasl-client-mechanism:                 Clients.
* sasl-client-name:                      Clients.
* sasl-client-properties:                Clients.
* sasl-client-property:                  Clients.
* sasl-client-server:                    Clients.
* sasl-client-service:                   Clients.
* sasl-client-set-properties:            Clients.
* sasl-client-set-property:              Clients.
* sasl-find-mechanism:                   Mechanisms.
* sasl-make-client:                      Clients.
* sasl-make-mechanism:                   Mechanisms.
* sasl-mechanism-name:                   Mechanisms.
* sasl-next-step:                        Steps.
* sasl-step-data:                        Steps.
* sasl-step-set-data:                    Steps.


File: sasl.info,  Node: Variable Index,  Prev: Function Index,  Up: Top

Variable Index
**************

* Menu:

* sasl-mechanisms:                       Mechanisms.



Tag Table:
Node: Top618
Node: Overview1137
Node: How to use1818
Node: Data types2202
Node: Mechanisms2504
Node: Clients3820
Node: Steps5106
Node: Backend drivers6258
Node: Index6397
Node: Function Index6508
Node: Variable Index7391

End Tag Table
