Synch to No Gnus 200511232302.
authoryamaoka <yamaoka>
Thu, 24 Nov 2005 00:57:34 +0000 (00:57 +0000)
committeryamaoka <yamaoka>
Thu, 24 Nov 2005 00:57:34 +0000 (00:57 +0000)
lisp/ChangeLog
lisp/mail-source.el
lisp/pop3.el

index 7d01d64..898e73a 100644 (file)
@@ -1,3 +1,17 @@
+2005-11-23  Dave Love  <fx@gnu.org>
+
+       Add pop3s, pop3/starttls.
+
+       * pop3.el (pop3-authentication-scheme): Clarify doc.
+       (open-tls-stream, starttls-open-stream): Autoload.
+       (pop3-stream-type): New.
+       (pop3-open-server): Use it.
+
+       * mail-source.el (mail-sources): Fix some :types.  Add stream type
+       for POP.
+       (mail-source-keyword-map): Add :stream for POP.
+       (mail-source-fetch-pop): Use pop3-stream-type.
+
 2005-11-22  Katsumi Yamaoka  <yamaoka@jpl.org>
 
        * nnmail.el (nnmail-fancy-expiry-target): Use current-time instead
index 5e0c514..7ccc04d 100644 (file)
@@ -107,7 +107,7 @@ See Info node `(gnus)Mail Source Specifiers'."
                                          (const :format "" :value :port)
                                          (choice :tag "Port"
                                                  :value "pop3"
-                                                 (number :format "%v")
+                                                 (integer :format "%v")
                                                  (string :format "%v")))
                                   (group :inline t
                                          (const :format "" :value :user)
@@ -123,13 +123,15 @@ See Info node `(gnus)Mail Source Specifiers'."
                                          (choice :tag "Prescript"
                                                  :value nil
                                                  (string :format "%v")
-                                                 (function :format "%v")))
+                                                 (function :format "%v")
+                                                 (const :tag "None" nil)))
                                   (group :inline t
                                          (const :format "" :value :postscript)
                                          (choice :tag "Postscript"
                                                  :value nil
                                                  (string :format "%v")
-                                                 (function :format "%v")))
+                                                 (function :format "%v")
+                                                 (const :tag "None" nil)))
                                   (group :inline t
                                          (const :format "" :value :function)
                                          (function :tag "Function"))
@@ -142,7 +144,14 @@ See Info node `(gnus)Mail Source Specifiers'."
                                                  (const apop)))
                                   (group :inline t
                                          (const :format "" :value :plugged)
-                                         (boolean :tag "Plugged"))))
+                                         (boolean :tag "Plugged"))
+                                  (group :inline t
+                                         (const :format "" :value :stream)
+                                         (choice :tag "Stream"
+                                                 :value nil
+                                                 (const :tag "Clear" nil)
+                                                 (const starttls)
+                                                 (const :tag "SSL/TLS" ssl)))))
                  (cons :tag "Maildir (qmail, postfix...)"
                        (const :format "" maildir)
                        (checklist :tag "Options" :greedy t
@@ -162,7 +171,7 @@ See Info node `(gnus)Mail Source Specifiers'."
                                          (const :format "" :value :port)
                                          (choice :tag "Port"
                                                  :value 143
-                                                 number string))
+                                                 integer string))
                                   (group :inline t
                                          (const :format "" :value :user)
                                          (string :tag "User"))
@@ -348,6 +357,7 @@ Common keywords should be listed here.")
        (:password)
        (:connection)
        (:authentication password)
+       (:stream nil)
        (:leave))
       (maildir
        (:path (or (getenv "MAILDIR") "~/Maildir/"))
@@ -715,6 +725,7 @@ If CONFIRM is non-nil, ask for confirmation before removing a file."
 (defun mail-source-fetch-pop (source callback)
   "Fetcher for single-file sources."
   (mail-source-bind (pop source)
+    ;; fixme: deal with stream type in format specs
     (mail-source-run-script
      prescript
      (format-spec-make ?p password ?t mail-source-crash-box
@@ -817,7 +828,8 @@ If CONFIRM is non-nil, ask for confirmation before removing a file."
                    (pop3-mailhost server)
                    (pop3-port port)
                    (pop3-authentication-scheme
-                    (if (eq authentication 'apop) 'apop 'pass)))
+                    (if (eq authentication 'apop) 'apop 'pass))
+                   (pop3-stream-type stream))
                (if (or debug-on-quit debug-on-error)
                    (save-excursion (pop3-get-message-count))
                  (condition-case err
index ca284d2..ad79d6b 100644 (file)
 
 (defcustom pop3-authentication-scheme 'pass
   "*POP3 authentication scheme.
-Defaults to 'pass, for the standard USER/PASS authentication.  Other valid
-values are 'apop."
-  :version "22.1" ;; Oort Gnus
-  :type '(choice (const :tag "USER/PASS" pass)
+Defaults to `pass', for the standard USER/PASS authentication.  The other
+valid value is 'apop'."
+  :type '(choice (const :tag "Normal user/password" pass)
                 (const :tag "APOP" apop))
+  :version "22.1" ;; Oort Gnus
   :group 'pop3)
 
 (defcustom pop3-leave-mail-on-server nil
@@ -306,6 +306,19 @@ Shorter values mean quicker response, but are more CPU intensive.")
     (pop3-quit process)
     message-count))
 
+(defcustom pop3-stream-type nil
+  "*Transport security type for POP3 connexions.
+This may be either nil (plain connexion), `ssl' (use an
+SSL/TSL-secured stream) or `starttls' (use the starttls mechanism
+to turn on TLS security after opening the stream).  However, if
+this is nil, `ssl' is assumed for connexions to port
+995 (pop3s)."
+  :version "23.1"                      ; fixme?
+  :group 'pop3
+  :type '(choice (const :tag "Plain" nil)
+                (const :tag "SSL/TLS" ssl)
+                (const starttls)))
+
 (defun pop3-open-server (mailhost port)
   "Open TCP connection to MAILHOST on PORT.
 Returns the process associated with the connection.
@@ -319,9 +332,12 @@ Argument PORT specifies connecting port."
       (setq
        process
        (cond
-       ((eq pop3-connection-type 'ssl)
+       ((or (eq pop3-connection-type 'ssl)
+            (eq pop3-stream-type 'ssl)
+            (and (not pop3-stream-type) (= port 995))) ; pop3s
         (pop3-open-ssl-stream "POP" (current-buffer) mailhost port))
-       ((eq pop3-connection-type 'tls)
+       ((or (memq pop3-connection-type '(tls starttls))
+            (memq pop3-stream-type '(tls starttls)))
         (pop3-open-tls-stream "POP" (current-buffer) mailhost port))
        (t
         (let ((coding-system-for-read 'binary)
@@ -346,6 +362,7 @@ Argument PORT specifies connecting port."
            "-connect" ,(format "%s:%d" host service)))
         (process (open-ssl-stream name buffer host service)))
     (when process
+      ;; There's a load of info printed that needs deleting.
       (with-current-buffer buffer
        (goto-char (point-min))
        (while (and (memq (process-status process) '(open run))
@@ -481,6 +498,8 @@ If NOW, use that time instead."
            ;; Date: 08 Jul 1996 23:22:24 -0400
            ;; should be
            ;; Tue Jul 9 09:04:21 1996
+
+           ;; Fixme: This should use timezone on the date field contents.
            (setq date
                  (cond ((not date)
                         "Tue Jan 1 00:00:0 1900")
@@ -827,6 +846,13 @@ to `mail-sources' while fetching mails with Gnus."
 ;;  +OK [negotiation is ready]
 ;;  -ERR [security layer is already active]
 
+;; STLS      (RFC 2595)
+;; Arguments: none
+;; Restrictions: Only permitted in AUTHORIZATION state.
+;; Possible responses:
+;;  +OK
+;;  -ERR
+
 ;;; TRANSACTION STATE
 
 ;; STAT