;;; gnus-agent.el --- unplugged support for Semi-gnus
-;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003
+;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
;; Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
(defun gnus-agent-read-local (file)
"Load FILE and do a `read' there."
- (let ((obarray (gnus-make-hashtable (count-lines (point-min) (point-max))))
+ (let ((my-obarray (gnus-make-hashtable (count-lines (point-min)
+ (point-max))))
(line 1))
- (with-temp-buffer
- (condition-case nil
- (nnheader-insert-file-contents file)
- (file-error))
+ (with-temp-buffer
+ (condition-case nil
+ (nnheader-insert-file-contents file)
+ (file-error))
- (goto-char (point-min))
- ;; Skip any comments at the beginning of the file (the only place where they may appear)
- (while (= (following-char) ?\;)
- (forward-line 1)
- (setq line (1+ line)))
-
- (while (not (eobp))
- (condition-case err
- (let (group
- min
- max
- (cur (current-buffer)))
- (setq group (read cur)
- min (read cur)
- max (read cur))
-
- (when (stringp group)
- (setq group (intern group obarray)))
-
- ;; NOTE: The '+ 0' ensure that min and max are both numerics.
- (set group (cons (+ 0 min) (+ 0 max))))
- (error
- (gnus-message 3 "Warning - invalid agent local: %s on line %d: " file line (error-message-string err))))
- (forward-line 1)
- (setq line (1+ line))))
+ (goto-char (point-min))
+ ;; Skip any comments at the beginning of the file (the only place where they may appear)
+ (while (= (following-char) ?\;)
+ (forward-line 1)
+ (setq line (1+ line)))
+
+ (while (not (eobp))
+ (condition-case err
+ (let (group
+ min
+ max
+ (cur (current-buffer)))
+ (setq group (read cur)
+ min (read cur)
+ max (read cur))
+
+ (when (stringp group)
+ (setq group (intern group my-obarray)))
+
+ ;; NOTE: The '+ 0' ensure that min and max are both numerics.
+ (set group (cons (+ 0 min) (+ 0 max))))
+ (error
+ (gnus-message 3 "Warning - invalid agent local: %s on line %d: "
+ file line (error-message-string err))))
+ (forward-line 1)
+ (setq line (1+ line))))
- (set (intern "+dirty" obarray) nil)
- (set (intern "+method" obarray) gnus-command-method)
- obarray))
+ (set (intern "+dirty" my-obarray) nil)
+ (set (intern "+method" my-obarray) gnus-command-method)
+ my-obarray))
(defun gnus-agent-save-local (&optional force)
"Save gnus-agent-article-local under it method's agent.lib directory."
- (let ((obarray gnus-agent-article-local))
- (when (and obarray
- (or force (symbol-value (intern "+dirty" obarray))))
- (let* ((gnus-command-method (symbol-value (intern "+method" obarray)))
+ (let ((my-obarray gnus-agent-article-local))
+ (when (and my-obarray
+ (or force (symbol-value (intern "+dirty" my-obarray))))
+ (let* ((gnus-command-method (symbol-value (intern "+method" my-obarray)))
;; NOTE: gnus-command-method is used within gnus-agent-lib-file.
(dest (gnus-agent-lib-file "local")))
(gnus-make-directory (gnus-agent-lib-file ""))
(with-temp-file dest
- (let ((gnus-command-method (symbol-value (intern "+method" obarray)))
+ (let ((gnus-command-method (symbol-value (intern "+method" my-obarray)))
(file-name-coding-system nnmail-pathname-coding-system)
(coding-system-for-write
gnus-agent-file-coding-system)
(princ (car range))
(princ " ")
(princ (cdr range))
- (princ "\n"))))))))))))
+ (princ "\n")))))
+ my-obarray)))))))
(defun gnus-agent-get-local (group)
(let* ((gmane (gnus-group-real-name group))
+++ /dev/null
-\input texinfo @c -*-texinfo-*-
-
-@setfilename sasl.info
-
-@set VERSION 0.2
-
-@dircategory Emacs
-@direntry
-* SASL: (sasl). The Emacs SASL library.
-@end direntry
-
-@settitle Emacs SASL Library @value{VERSION}
-
-@ifinfo
-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".
-@end ifinfo
-
-@tex
-
-@titlepage
-@title Emacs SASL Library
-
-@author by Daiki Ueno
-@page
-
-@vskip 0pt plus 1filll
-Copyright @copyright{} 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".
-@end titlepage
-@page
-
-@end tex
-
-@node Top
-@top 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::
-@end menu
-
-@node Overview
-@chapter Overview
-
-@sc{sasl} is short for @dfn{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 @sc{sasl}
-Application Program Interface. It defines an abstraction over a series
-of authentication mechanism drivers (@ref{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.
-
-@node How to use
-@chapter How to use
-
-(Not yet written).
-
-To use Emacs SASL library, please evaluate following expression at the
-beginning of your application program.
-
-@lisp
-(require 'sasl)
-@end lisp
-
-If you want to check existence of sasl.el at runtime, instead you
-can list autoload settings for functions you want.
-
-@node Data types
-@chapter 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::
-@end menu
-
-@node Mechanisms
-@section Mechanisms
-
-A mechanism (@code{sasl-mechanism} object) is a schema of the @sc{sasl}
-authentication mechanism driver.
-
-@defvar sasl-mechanisms
-A list of mechanism names.
-@end defvar
-
-@defun sasl-find-mechanism mechanisms
-
-Retrieve an apropriate mechanism.
-This function compares @var{mechanisms} and @code{sasl-mechanisms} then
-returns apropriate @code{sasl-mechanism} object.
-
-@example
-(let ((sasl-mechanisms '("CRAM-MD5" "DIGEST-MD5")))
- (setq mechanism (sasl-find-mechanism server-supported-mechanisms)))
-@end example
-
-@end defun
-
-@defun sasl-mechanism-name mechanism
-Return name of mechanism, a string.
-@end defun
-
-If you want to write an authentication mechanism driver (@ref{Backend
-drivers}), use @code{sasl-make-mechanism} and modify
-@code{sasl-mechanisms} and @code{sasl-mechanism-alist} correctly.
-
-@defun sasl-make-mechanism name steps
-Allocate a @code{sasl-mechanism} object.
-This function takes two parameters---name of the mechanism, and a list
-of authentication functions.
-
-@example
-(defconst sasl-anonymous-steps
- '(identity ;no initial response
- sasl-anonymous-response))
-
-(put 'sasl-anonymous 'sasl-mechanism
- (sasl-make-mechanism "ANONYMOUS" sasl-anonymous-steps))
-@end example
-
-@end defun
-
-@node Clients
-@section Clients
-
-A client (@code{sasl-client} object) initialized with four
-parameters---a mechanism, a user name, name of the service and name of
-the server.
-
-@defun sasl-make-client mechanism name service server
-Prepare a @code{sasl-client} object.
-@end defun
-
-@defun sasl-client-mechanism client
-Return the mechanism (@code{sasl-mechanism} object) of client.
-@end defun
-
-@defun sasl-client-name client
-Return the authorization name of client, a string.
-@end defun
-
-@defun sasl-client-service client
-Return the service name of client, a string.
-@end defun
-
-@defun sasl-client-server client
-Return the server name of client, a string.
-@end defun
-
-If you want to specify additional configuration properties, please use
-@code{sasl-client-set-property}.
-
-@defun sasl-client-set-property client property value
-Add the given property/value to client.
-@end defun
-
-@defun sasl-client-property client property
-Return the value of the property of client.
-@end defun
-
-@defun sasl-client-set-properties client plist
-Destructively set the properties of client.
-The second argument is the new property list.
-@end defun
-
-@defun sasl-client-properties client
-Return the whole property list of client configuration.
-@end defun
-
-@node Steps
-@section Steps
-
-A step (@code{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).
-
-@defun sasl-step-data step
-Return the data which @var{step} holds, a string.
-@end defun
-
-@defun sasl-step-set-data step data
-Store @var{data} string to @var{step}.
-@end defun
-
-To get the initial response, you should call the function
-@code{sasl-next-step} with the second argument @code{nil}.
-
-@example
-(setq name (sasl-mechanism-name mechanism))
-@end example
-
-At this point we could send the command which starts a SASL
-authentication protocol exchange. For example,
-
-@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)))
-@end example
-
-To go on with the authentication process, all you have to do is call
-@code{sasl-next-step} consecutively.
-
-@defun sasl-next-step client step
-Perform the authentication step.
-At the first time @var{step} should be set to @code{nil}.
-@end defun
-
-@node Backend drivers
-@chapter Backend drivers
-
-(Not yet written).
-
-@node Index
-@chapter Index
-@printindex cp
-
-@node Function Index
-@chapter Function Index
-@printindex fn
-
-@node Variable Index
-@chapter Variable Index
-@printindex vr
-
-@summarycontents
-@contents
-@bye
-
-@c End: