*** empty log message ***
[gnus] / lisp / nntp.el
index cbb7801..4d6a408 100644 (file)
@@ -50,6 +50,9 @@ to allow posting from the server.  Note that this is only necessary to
 do on servers that use strict access control.")  
 (add-hook 'nntp-server-opened-hook 'nntp-send-mode-reader)
 
+(defvoo nntp-authinfo-function 'nntp-send-authinfo
+  "Function used to send AUTHINFO to the server.")
+
 (defvoo nntp-server-action-alist 
   '(("nntpd 1\\.5\\.11t" 
      (remove-hook 'nntp-server-opened-hook 'nntp-send-mode-reader)))
@@ -240,7 +243,7 @@ server there that you can connect to. See also `nntp-open-connection-function'")
   "Retrieve group info on GROUPS."
   (nntp-possibly-change-group nil server)
   (save-excursion
-    (set-buffer nntp-server-buffer)
+    (set-buffer (nntp-find-connection-buffer nntp-server-buffer))
     ;; The first time this is run, this variable is `try'.  So we
     ;; try.   
     (when (eq nntp-server-list-active-group 'try)
@@ -292,12 +295,12 @@ server there that you can connect to. See also `nntp-open-connection-function'")
        (while (re-search-forward "^[.2-5]" nil t)
          (delete-region (match-beginning 0) 
                         (progn (forward-line 1) (point))))
+       (copy-to-buffer nntp-server-buffer (point-min) (point-max))
        'active))))
 
- (defun nntp-try-list-active (group)
+(defun nntp-try-list-active (group)
   (nntp-list-active-group group)
   (save-excursion
-    (set-buffer nntp-server-buffer)
     (goto-char (point-min))
     (cond ((looking-at "5[0-9]+")
           (setq nntp-server-list-active-group nil))
@@ -314,7 +317,8 @@ server there that you can connect to. See also `nntp-open-connection-function'")
   (when (nntp-send-command-and-decode
         "\r?\n\\.\r?\n" "ARTICLE"
         (if (numberp article) (int-to-string article) article))
-    (when buffer
+    (when (and buffer
+              (not (equal buffer nntp-server-buffer)))
       (save-excursion
        (set-buffer nntp-server-buffer)
        (copy-to-buffer buffer (point-min) (point-max))
@@ -586,25 +590,30 @@ It will prompt for a password."
       (if (and (= beg (point-min))
               (memq (char-after beg) '(?4 ?5)))
          ;; Report back error messages.
-         (progn
-           (nntp-snarf-error-message)
-           (funcall nntp-process-callback nil))
+         (save-excursion
+           (goto-char beg)
+           (if (looking-at "480")
+               (funcall nntp-authinfo-function)
+             (nntp-snarf-error-message)
+             (funcall nntp-process-callback nil)))
        (goto-char end)
        (when (and (> (point) nntp-process-start-point)
                   (re-search-backward nntp-process-wait-for
                                       nntp-process-start-point t))
-         (when nntp-process-decode
-           ;(nntp-decode-text)
-           )
          (when (buffer-name (get-buffer nntp-process-to-buffer))
            (let ((cur (current-buffer))
                  (start nntp-process-start-point))
              (save-excursion
                (set-buffer (get-buffer nntp-process-to-buffer))
                (goto-char (point-max))
-               (insert-buffer-substring cur start))))
+               (let ((b (point)))
+                 (insert-buffer-substring cur start)
+                 (narrow-to-region b (point-max))
+                 (nntp-decode-text)
+                 (goto-char (point-min))
+                 (gnus-delete-line)
+                 (widen)))))
          (goto-char end)
-         ;(erase-buffer)
          (let ((callback nntp-process-callback)
                (nntp-inside-change-function t))
            (setq nntp-process-callback nil)
@@ -652,7 +661,11 @@ It will prompt for a password."
   (save-excursion
     (set-buffer (process-buffer process))
     (goto-char (point-min))
-    (while (not (looking-at "[2345]"))
+    (while (or (not (memq (following-char) '(?2 ?3 ?4 ?5)))
+              (looking-at "480"))
+      (when (looking-at "480")
+       (erase-buffer)
+       (funcall nntp-authinfo-function))
       (nntp-accept-process-output process)
       (goto-char (point-min)))
     (prog1