X-Git-Url: http://cgit.sxemacs.org/?a=blobdiff_plain;f=lisp%2Fsieve-manage.el;h=8749864d81b26774ea797ca9565d9f9aab7598c6;hb=f5c2719cac7704cf45be49a857c128fc823ddf86;hp=0a7c8e96ddbbc9db9327f25b26ad00907fffa694;hpb=c358f44b1670d12d5eff5fe5a447a19afd34a252;p=gnus diff --git a/lisp/sieve-manage.el b/lisp/sieve-manage.el index 0a7c8e96d..8749864d8 100644 --- a/lisp/sieve-manage.el +++ b/lisp/sieve-manage.el @@ -1,26 +1,24 @@ ;;; sieve-manage.el --- Implementation of the managesive protocol in elisp -;; Copyright (C) 2001, 2002, 2003, 2004, 2005, -;; 2006, 2007, 2008 Free Software Foundation, Inc. +;; Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, +;; 2008, 2009, 2010 Free Software Foundation, Inc. ;; Author: Simon Josefsson ;; This file is part of GNU Emacs. -;; GNU Emacs is free software; you can redistribute it and/or modify +;; GNU Emacs is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by -;; the Free Software Foundation; either version 3, or (at your option) -;; any later version. +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. ;; GNU Emacs is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. +;; along with GNU Emacs. If not, see . ;;; Commentary: @@ -87,9 +85,8 @@ (eval-when-compile (require 'sasl) (require 'starttls)) -(eval-and-compile - (autoload 'sasl-find-mechanism "sasl") - (autoload 'starttls-open-stream "starttls")) +(autoload 'sasl-find-mechanism "sasl") +(autoload 'starttls-open-stream "starttls") ;; User customizable variables: @@ -165,6 +162,12 @@ for doing the actual authentication." :type 'integer :group 'sieve-manage) +(defcustom sieve-manage-default-stream 'network + "Default stream type to use for `sieve-manage'. +Must be a name of a stream in `sieve-manage-stream-alist'." + :type 'symbol + :group 'sieve-manage) + ;; Internal variables: (defconst sieve-manage-local-variables '(sieve-manage-server @@ -177,7 +180,6 @@ for doing the actual authentication." sieve-manage-client-eol sieve-manage-server-eol sieve-manage-capability)) -(defconst sieve-manage-default-stream 'network) (defconst sieve-manage-coding-system-for-read 'binary) (defconst sieve-manage-coding-system-for-write 'binary) (defvar sieve-manage-stream nil) @@ -194,10 +196,10 @@ Valid states are `closed', `initial', `nonauth', and `auth'.") ;; Internal utility functions -(defsubst sieve-manage-disable-multibyte () +(defmacro sieve-manage-disable-multibyte () "Enable multibyte in the current buffer." - (when (fboundp 'set-buffer-multibyte) - (set-buffer-multibyte nil))) + (unless (featurep 'xemacs) + '(set-buffer-multibyte nil))) (declare-function password-read "password-cache" (prompt &optional key)) (declare-function password-cache-add "password-cache" (key password)) @@ -307,15 +309,14 @@ Returns t if login was successful, nil otherwise." (when (memq (process-status process) '(open run)) process)))) -(defun imap-starttls-p (buffer) - ;; (and (imap-capability 'STARTTLS buffer) +(defun sieve-manage-starttls-p (buffer) (condition-case () (progn (require 'starttls) (call-process "starttls")) (error nil))) -(defun imap-starttls-open (name buffer server port) +(defun sieve-manage-starttls-open (name buffer server port) (let* ((port (or port sieve-manage-default-port)) (coding-system-for-read sieve-manage-coding-system-for-read) (coding-system-for-write sieve-manage-coding-system-for-write) @@ -339,7 +340,7 @@ Returns t if login was successful, nil otherwise." (defun sieve-sasl-auth (buffer mech) "Login to server using the SASL MECH method." (message "sieve: Authenticating using %s..." mech) - (if (sieve-manage-interactive-login + (if (sieve-manage-interactive-login buffer (lambda (user passwd) (let (client step tag data rsp) @@ -446,12 +447,12 @@ Returns t if login was successful, nil otherwise." (defun sieve-manage-open (server &optional port stream auth buffer) "Open a network connection to a managesieve SERVER (string). -Optional variable PORT is port number (integer) on remote server. -Optional variable STREAM is any of `sieve-manage-streams' (a symbol). -Optional variable AUTH indicates authenticator to use, see -`sieve-manage-authenticators' for available authenticators. If nil, chooses -the best stream the server is capable of. -Optional variable BUFFER is buffer (buffer, or string naming buffer) +Optional argument PORT is port number (integer) on remote server. +Optional argument STREAM is any of `sieve-manage-streams' (a symbol). +Optional argument AUTH indicates authenticator to use, see +`sieve-manage-authenticators' for available authenticators. +If nil, chooses the best stream the server is capable of. +Optional argument BUFFER is buffer (buffer, or string naming buffer) to work in." (setq buffer (or buffer (format " *sieve* %s:%d" server (or port 2000)))) (with-current-buffer (get-buffer-create buffer) @@ -570,15 +571,14 @@ password is remembered in the buffer." (sieve-manage-send (format "HAVESPACE \"%s\" %s" name size)) (sieve-manage-parse-okno))) -(eval-and-compile - (if (fboundp 'string-bytes) - (defalias 'sieve-string-bytes 'string-bytes) - (defalias 'sieve-string-bytes 'length))) - (defun sieve-manage-putscript (name content &optional buffer) (with-current-buffer (or buffer (current-buffer)) (sieve-manage-send (format "PUTSCRIPT \"%s\" {%d+}%s%s" name - (sieve-string-bytes content) + ;; Here we assume that the coding-system will + ;; replace each char with a single byte. + ;; This is always the case if `content' is + ;; a unibyte string. + (length content) sieve-manage-client-eol content)) (sieve-manage-parse-okno))) @@ -641,7 +641,7 @@ password is remembered in the buffer." sieve-manage-capability)) (push (list str) sieve-manage-capability)) (forward-line))) - (when (re-search-forward (concat "^OK" sieve-manage-server-eol) nil t) + (when (re-search-forward (concat "^OK.*" sieve-manage-server-eol) nil t) (setq sieve-manage-state 'nonauth))) (defalias 'sieve-manage-parse-greeting-1 'sieve-manage-parse-capability-1) @@ -651,7 +651,7 @@ password is remembered in the buffer." (prog1 (match-string 1) (goto-char (match-end 0)))) - ((looking-at (concat "{\\([0-9]+\\)}" sieve-manage-server-eol)) + ((looking-at (concat "{\\([0-9]+\\+?\\)}" sieve-manage-server-eol)) (let ((pos (match-end 0)) (len (string-to-number (match-string 1)))) (if (< (point-max) (+ pos len)) @@ -706,5 +706,4 @@ password is remembered in the buffer." (provide 'sieve-manage) -;;; arch-tag: 321c4640-1371-4495-9baf-8ccb71dd5bd1 ;; sieve-manage.el ends here