annotate lisp/net/netrc.el @ 110410:f2e111723c3a

Merge changes made in Gnus trunk. Reimplement nnimap, and do tweaks to the rest of the code to support that. * gnus-int.el (gnus-finish-retrieve-group-infos) (gnus-retrieve-group-data-early): New functions. * gnus-range.el (gnus-range-nconcat): New function. * gnus-start.el (gnus-get-unread-articles): Support early retrieval of data. (gnus-read-active-for-groups): Support finishing the early retrieval of data. * gnus-sum.el (gnus-summary-move-article): Pass the move-to group name if the move is internal, so that nnimap can do fast internal moves. * gnus.el (gnus-article-special-mark-lists): Add uid/active tuples, for nnimap usage. * nnimap.el: Rewritten. * nnmail.el (nnmail-inhibit-default-split-group): New internal variable to allow the mail splitting to not return a default group. This is useful for nnimap, which will leave unmatched mail in the inbox. * utf7.el (utf7-encode): Autoload. Implement shell connection. * nnimap.el (nnimap-open-shell-stream): New function. (nnimap-open-connection): Use it. Get the number of lines by using BODYSTRUCTURE. (nnimap-transform-headers): Get the number of lines in each message. (nnimap-retrieve-headers): Query for BODYSTRUCTURE so that we get the number of lines. Not all servers return UIDNEXT. Work past this problem. Remove junk from end of file. Fix typo in "bogus" section. Make capabilties be case-insensitive. Require cl when compiling. Don't bug out if the LIST command doesn't have any parameters. 2010-09-17 Knut Anders Hatlen <kahatlen@gmail.com> (tiny change) * nnimap.el (nnimap-get-groups): Don't bug out if the LIST command doesn't have any parameters. (mm-text-html-renderer): Document gnus-article-html. 2010-09-17 Julien Danjou <julien@danjou.info> (tiny fix) * mm-decode.el (mm-text-html-renderer): Document gnus-article-html. * dgnushack.el: Define netrc-credentials. If the user doesn't have a /etc/services, supply some sensible port defaults. Have `unseen-or-unread' select an unread unseen article first. (nntp-open-server): Return whether the open was successful or not. Throughout all files, replace (save-excursion (set-buffer ...)) with (with-current-buffer ... ). Save result so that it doesn't say "failed" all the time. Add ~/.authinfo to the default, since that's probably most useful for users. Don't use the "finish" method when we're reading from the agent. Add some more nnimap-relevant agent stuff to nnagent.el. * nnimap.el (nnimap-with-process-buffer): Removed. Revert one line that was changed by mistake in the last checkin. (nnimap-open-connection): Don't error out when we can't make a connection nnimap-related changes to avoid bugging out if we can't contact a server. * gnus-start.el (gnus-get-unread-articles): Don't try to scan groups from methods that are denied. * nnimap.el (nnimap-possibly-change-group): Return nil if we can't log in. (nnimap-finish-retrieve-group-infos): Make sure we're not waiting for nothing. * gnus-sum.el (gnus-select-newsgroup): Indent.
author Katsumi Yamaoka <yamaoka@jpl.org>
date Sat, 18 Sep 2010 10:02:19 +0000
parents 838fb634d1b0
children b3141c4861e2
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
44810
c61f121692e4 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1 ;;; netrc.el --- .netrc parsing functionality
64701
34bd8e434dd7 Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 64085
diff changeset
2 ;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
106815
1d1d5d9bd884 Add 2010 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 101804
diff changeset
3 ;; 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
44810
c61f121692e4 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4
c61f121692e4 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
c61f121692e4 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6 ;; Keywords: news
107390
bb307bf2e752 Fix keywords.
Juri Linkov <juri@jurta.org>
parents: 106815
diff changeset
7 ;;
44810
c61f121692e4 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8 ;; Modularized by Ted Zlatanov <tzz@lifelogs.com>
c61f121692e4 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
9 ;; when it was part of Gnus.
c61f121692e4 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
10
c61f121692e4 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
11 ;; This file is part of GNU Emacs.
c61f121692e4 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
12
94677
91e5880a36c1 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
13 ;; GNU Emacs is free software: you can redistribute it and/or modify
44810
c61f121692e4 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
14 ;; it under the terms of the GNU General Public License as published by
94677
91e5880a36c1 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
15 ;; the Free Software Foundation, either version 3 of the License, or
91e5880a36c1 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
16 ;; (at your option) any later version.
44810
c61f121692e4 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
17
c61f121692e4 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
18 ;; GNU Emacs is distributed in the hope that it will be useful,
c61f121692e4 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
94677
91e5880a36c1 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
20 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
44810
c61f121692e4 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21 ;; GNU General Public License for more details.
c61f121692e4 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
22
c61f121692e4 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
23 ;; You should have received a copy of the GNU General Public License
94677
91e5880a36c1 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
24 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
44810
c61f121692e4 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
25
c61f121692e4 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
26 ;;; Commentary:
c61f121692e4 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
27
c61f121692e4 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
28 ;; Just the .netrc parsing functionality, abstracted so other packages
c61f121692e4 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
29 ;; besides Gnus can use it.
c61f121692e4 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
30
c61f121692e4 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
31 ;;; Code:
c61f121692e4 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
32
c61f121692e4 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
33 ;;;
85712
a3c27999decb Update Gnus to No Gnus 0.7 from the Gnus CVS trunk
Miles Bader <miles@gnu.org>
parents: 78230
diff changeset
34 ;;; .netrc and .authinfo rc parsing
44810
c61f121692e4 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
35 ;;;
c61f121692e4 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
36
87454
0cbc451989a7 Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 86963
diff changeset
37 ;; use encrypt if loaded (encrypt-file-alist has to be set as well)
95624
164c226d4a0d Remove unnecessary eval-when-compiles and eval-and-compiles.
Glenn Morris <rgm@gnu.org>
parents: 95193
diff changeset
38 (autoload 'encrypt-find-model "encrypt")
164c226d4a0d Remove unnecessary eval-when-compiles and eval-and-compiles.
Glenn Morris <rgm@gnu.org>
parents: 95193
diff changeset
39 (autoload 'encrypt-insert-file-contents "encrypt")
44810
c61f121692e4 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
40 (defalias 'netrc-point-at-eol
c61f121692e4 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
41 (if (fboundp 'point-at-eol)
c61f121692e4 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
42 'point-at-eol
c61f121692e4 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
43 'line-end-position))
95624
164c226d4a0d Remove unnecessary eval-when-compiles and eval-and-compiles.
Glenn Morris <rgm@gnu.org>
parents: 95193
diff changeset
44 (defvar encrypt-file-alist)
87454
0cbc451989a7 Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 86963
diff changeset
45 (eval-when-compile
0cbc451989a7 Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 86963
diff changeset
46 ;; This is unnecessary in the compiled version as it is a macro.
0cbc451989a7 Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 86963
diff changeset
47 (if (fboundp 'bound-and-true-p)
0cbc451989a7 Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 86963
diff changeset
48 (defalias 'netrc-bound-and-true-p 'bound-and-true-p)
0cbc451989a7 Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 86963
diff changeset
49 (defmacro netrc-bound-and-true-p (var)
0cbc451989a7 Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 86963
diff changeset
50 "Return the value of symbol VAR if it is bound, else nil."
0cbc451989a7 Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 86963
diff changeset
51 `(and (boundp (quote ,var)) ,var))))
85712
a3c27999decb Update Gnus to No Gnus 0.7 from the Gnus CVS trunk
Miles Bader <miles@gnu.org>
parents: 78230
diff changeset
52
a3c27999decb Update Gnus to No Gnus 0.7 from the Gnus CVS trunk
Miles Bader <miles@gnu.org>
parents: 78230
diff changeset
53 (defgroup netrc nil
a3c27999decb Update Gnus to No Gnus 0.7 from the Gnus CVS trunk
Miles Bader <miles@gnu.org>
parents: 78230
diff changeset
54 "Netrc configuration."
a3c27999decb Update Gnus to No Gnus 0.7 from the Gnus CVS trunk
Miles Bader <miles@gnu.org>
parents: 78230
diff changeset
55 :group 'comm)
a3c27999decb Update Gnus to No Gnus 0.7 from the Gnus CVS trunk
Miles Bader <miles@gnu.org>
parents: 78230
diff changeset
56
110306
838fb634d1b0 Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents: 110111
diff changeset
57 (defcustom netrc-file "~/.authinfo"
838fb634d1b0 Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents: 110111
diff changeset
58 "File where user credentials are stored."
838fb634d1b0 Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents: 110111
diff changeset
59 :type 'file
838fb634d1b0 Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents: 110111
diff changeset
60 :group 'netrc)
838fb634d1b0 Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents: 110111
diff changeset
61
85712
a3c27999decb Update Gnus to No Gnus 0.7 from the Gnus CVS trunk
Miles Bader <miles@gnu.org>
parents: 78230
diff changeset
62 (defvar netrc-services-file "/etc/services"
a3c27999decb Update Gnus to No Gnus 0.7 from the Gnus CVS trunk
Miles Bader <miles@gnu.org>
parents: 78230
diff changeset
63 "The name of the services file.")
44810
c61f121692e4 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
64
110306
838fb634d1b0 Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents: 110111
diff changeset
65 (defun netrc-parse (&optional file)
85712
a3c27999decb Update Gnus to No Gnus 0.7 from the Gnus CVS trunk
Miles Bader <miles@gnu.org>
parents: 78230
diff changeset
66 (interactive "fFile to Parse: ")
92694
d3767aa9ae49 Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 87649
diff changeset
67 "Parse FILE and return a list of all entries in the file."
110306
838fb634d1b0 Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents: 110111
diff changeset
68 (unless file
838fb634d1b0 Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents: 110111
diff changeset
69 (setq file netrc-file))
99506
fa1e1238846b Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 95624
diff changeset
70 (if (listp file)
fa1e1238846b Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 95624
diff changeset
71 file
fa1e1238846b Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 95624
diff changeset
72 (when (file-exists-p file)
fa1e1238846b Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 95624
diff changeset
73 (with-temp-buffer
fa1e1238846b Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 95624
diff changeset
74 (let ((tokens '("machine" "default" "login"
fa1e1238846b Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 95624
diff changeset
75 "password" "account" "macdef" "force"
fa1e1238846b Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 95624
diff changeset
76 "port"))
fa1e1238846b Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 95624
diff changeset
77 (encryption-model (when (netrc-bound-and-true-p encrypt-file-alist)
fa1e1238846b Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 95624
diff changeset
78 (encrypt-find-model file)))
fa1e1238846b Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 95624
diff changeset
79 alist elem result pair)
fa1e1238846b Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 95624
diff changeset
80 (if encryption-model
fa1e1238846b Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 95624
diff changeset
81 (encrypt-insert-file-contents file encryption-model)
fa1e1238846b Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 95624
diff changeset
82 (insert-file-contents file))
fa1e1238846b Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 95624
diff changeset
83 (goto-char (point-min))
fa1e1238846b Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 95624
diff changeset
84 ;; Go through the file, line by line.
44810
c61f121692e4 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
85 (while (not (eobp))
99506
fa1e1238846b Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 95624
diff changeset
86 (narrow-to-region (point) (point-at-eol))
fa1e1238846b Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 95624
diff changeset
87 ;; For each line, get the tokens and values.
fa1e1238846b Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 95624
diff changeset
88 (while (not (eobp))
fa1e1238846b Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 95624
diff changeset
89 (skip-chars-forward "\t ")
fa1e1238846b Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 95624
diff changeset
90 ;; Skip lines that begin with a "#".
fa1e1238846b Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 95624
diff changeset
91 (if (eq (char-after) ?#)
fa1e1238846b Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 95624
diff changeset
92 (goto-char (point-max))
fa1e1238846b Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 95624
diff changeset
93 (unless (eobp)
fa1e1238846b Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 95624
diff changeset
94 (setq elem
fa1e1238846b Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 95624
diff changeset
95 (if (= (following-char) ?\")
fa1e1238846b Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 95624
diff changeset
96 (read (current-buffer))
fa1e1238846b Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 95624
diff changeset
97 (buffer-substring
fa1e1238846b Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 95624
diff changeset
98 (point) (progn (skip-chars-forward "^\t ")
fa1e1238846b Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 95624
diff changeset
99 (point)))))
fa1e1238846b Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 95624
diff changeset
100 (cond
fa1e1238846b Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 95624
diff changeset
101 ((equal elem "macdef")
fa1e1238846b Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 95624
diff changeset
102 ;; We skip past the macro definition.
fa1e1238846b Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 95624
diff changeset
103 (widen)
fa1e1238846b Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 95624
diff changeset
104 (while (and (zerop (forward-line 1))
fa1e1238846b Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 95624
diff changeset
105 (looking-at "$")))
fa1e1238846b Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 95624
diff changeset
106 (narrow-to-region (point) (point)))
fa1e1238846b Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 95624
diff changeset
107 ((member elem tokens)
fa1e1238846b Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 95624
diff changeset
108 ;; Tokens that don't have a following value are ignored,
fa1e1238846b Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 95624
diff changeset
109 ;; except "default".
fa1e1238846b Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 95624
diff changeset
110 (when (and pair (or (cdr pair)
fa1e1238846b Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 95624
diff changeset
111 (equal (car pair) "default")))
fa1e1238846b Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 95624
diff changeset
112 (push pair alist))
fa1e1238846b Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 95624
diff changeset
113 (setq pair (list elem)))
fa1e1238846b Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 95624
diff changeset
114 (t
fa1e1238846b Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 95624
diff changeset
115 ;; Values that haven't got a preceding token are ignored.
fa1e1238846b Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 95624
diff changeset
116 (when pair
fa1e1238846b Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 95624
diff changeset
117 (setcdr pair elem)
fa1e1238846b Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 95624
diff changeset
118 (push pair alist)
fa1e1238846b Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 95624
diff changeset
119 (setq pair nil)))))))
fa1e1238846b Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 95624
diff changeset
120 (when alist
fa1e1238846b Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 95624
diff changeset
121 (push (nreverse alist) result))
fa1e1238846b Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 95624
diff changeset
122 (setq alist nil
fa1e1238846b Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 95624
diff changeset
123 pair nil)
fa1e1238846b Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 95624
diff changeset
124 (widen)
fa1e1238846b Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 95624
diff changeset
125 (forward-line 1))
fa1e1238846b Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 95624
diff changeset
126 (nreverse result))))))
44810
c61f121692e4 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
127
c61f121692e4 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
128 (defun netrc-machine (list machine &optional port defaultport)
c61f121692e4 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
129 "Return the netrc values from LIST for MACHINE or for the default entry.
c61f121692e4 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
130 If PORT specified, only return entries with matching port tokens.
c61f121692e4 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
131 Entries without port tokens default to DEFAULTPORT."
c61f121692e4 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
132 (let ((rest list)
c61f121692e4 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
133 result)
c61f121692e4 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
134 (while list
c61f121692e4 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
135 (when (equal (cdr (assoc "machine" (car list))) machine)
c61f121692e4 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
136 (push (car list) result))
c61f121692e4 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
137 (pop list))
c61f121692e4 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
138 (unless result
c61f121692e4 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
139 ;; No machine name matches, so we look for default entries.
c61f121692e4 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
140 (while rest
c61f121692e4 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
141 (when (assoc "default" (car rest))
c61f121692e4 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
142 (push (car rest) result))
c61f121692e4 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
143 (pop rest)))
c61f121692e4 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
144 (when result
c61f121692e4 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
145 (setq result (nreverse result))
c61f121692e4 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
146 (while (and result
85712
a3c27999decb Update Gnus to No Gnus 0.7 from the Gnus CVS trunk
Miles Bader <miles@gnu.org>
parents: 78230
diff changeset
147 (not (netrc-port-equal
a3c27999decb Update Gnus to No Gnus 0.7 from the Gnus CVS trunk
Miles Bader <miles@gnu.org>
parents: 78230
diff changeset
148 (or port defaultport "nntp")
95193
d90ff358ee27 Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 94677
diff changeset
149 ;; when port is not given in the netrc file,
d90ff358ee27 Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 94677
diff changeset
150 ;; it should mean "any port"
85712
a3c27999decb Update Gnus to No Gnus 0.7 from the Gnus CVS trunk
Miles Bader <miles@gnu.org>
parents: 78230
diff changeset
151 (or (netrc-get (car result) "port")
95193
d90ff358ee27 Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 94677
diff changeset
152 defaultport port))))
44810
c61f121692e4 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
153 (pop result))
c61f121692e4 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
154 (car result))))
c61f121692e4 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
155
85712
a3c27999decb Update Gnus to No Gnus 0.7 from the Gnus CVS trunk
Miles Bader <miles@gnu.org>
parents: 78230
diff changeset
156 (defun netrc-machine-user-or-password (mode authinfo-file-or-list machines ports defaults)
a3c27999decb Update Gnus to No Gnus 0.7 from the Gnus CVS trunk
Miles Bader <miles@gnu.org>
parents: 78230
diff changeset
157 "Get the user name or password according to MODE from AUTHINFO-FILE-OR-LIST.
a3c27999decb Update Gnus to No Gnus 0.7 from the Gnus CVS trunk
Miles Bader <miles@gnu.org>
parents: 78230
diff changeset
158 Matches a machine from MACHINES and a port from PORTS, giving
a3c27999decb Update Gnus to No Gnus 0.7 from the Gnus CVS trunk
Miles Bader <miles@gnu.org>
parents: 78230
diff changeset
159 default ports DEFAULTS to `netrc-machine'.
a3c27999decb Update Gnus to No Gnus 0.7 from the Gnus CVS trunk
Miles Bader <miles@gnu.org>
parents: 78230
diff changeset
160
a3c27999decb Update Gnus to No Gnus 0.7 from the Gnus CVS trunk
Miles Bader <miles@gnu.org>
parents: 78230
diff changeset
161 MODE can be \"login\" or \"password\", suitable for passing to
a3c27999decb Update Gnus to No Gnus 0.7 from the Gnus CVS trunk
Miles Bader <miles@gnu.org>
parents: 78230
diff changeset
162 `netrc-get'."
a3c27999decb Update Gnus to No Gnus 0.7 from the Gnus CVS trunk
Miles Bader <miles@gnu.org>
parents: 78230
diff changeset
163 (let ((authinfo-list (if (stringp authinfo-file-or-list)
a3c27999decb Update Gnus to No Gnus 0.7 from the Gnus CVS trunk
Miles Bader <miles@gnu.org>
parents: 78230
diff changeset
164 (netrc-parse authinfo-file-or-list)
a3c27999decb Update Gnus to No Gnus 0.7 from the Gnus CVS trunk
Miles Bader <miles@gnu.org>
parents: 78230
diff changeset
165 authinfo-file-or-list))
a3c27999decb Update Gnus to No Gnus 0.7 from the Gnus CVS trunk
Miles Bader <miles@gnu.org>
parents: 78230
diff changeset
166 (ports (or ports '(nil)))
a3c27999decb Update Gnus to No Gnus 0.7 from the Gnus CVS trunk
Miles Bader <miles@gnu.org>
parents: 78230
diff changeset
167 (defaults (or defaults '(nil)))
a3c27999decb Update Gnus to No Gnus 0.7 from the Gnus CVS trunk
Miles Bader <miles@gnu.org>
parents: 78230
diff changeset
168 info)
101804
d775b84fdd71 Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 100908
diff changeset
169 (if (listp mode)
110111
5b9f64b04a04 Delete all trailing white space.
Katsumi Yamaoka <yamaoka@jpl.org>
parents: 110102
diff changeset
170 (setq info
5b9f64b04a04 Delete all trailing white space.
Katsumi Yamaoka <yamaoka@jpl.org>
parents: 110102
diff changeset
171 (mapcar
5b9f64b04a04 Delete all trailing white space.
Katsumi Yamaoka <yamaoka@jpl.org>
parents: 110102
diff changeset
172 (lambda (mode-element)
101804
d775b84fdd71 Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 100908
diff changeset
173 (netrc-machine-user-or-password
d775b84fdd71 Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 100908
diff changeset
174 mode-element
d775b84fdd71 Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 100908
diff changeset
175 authinfo-list
d775b84fdd71 Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 100908
diff changeset
176 machines
d775b84fdd71 Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 100908
diff changeset
177 ports
d775b84fdd71 Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 100908
diff changeset
178 defaults))
d775b84fdd71 Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 100908
diff changeset
179 mode))
d775b84fdd71 Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 100908
diff changeset
180 (dolist (machine machines)
d775b84fdd71 Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 100908
diff changeset
181 (dolist (default defaults)
d775b84fdd71 Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 100908
diff changeset
182 (dolist (port ports)
d775b84fdd71 Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 100908
diff changeset
183 (let ((alist (netrc-machine authinfo-list machine port default)))
d775b84fdd71 Merge from gnus--devo--0
Miles Bader <miles@gnu.org>
parents: 100908
diff changeset
184 (setq info (or (netrc-get alist mode) info)))))))
85712
a3c27999decb Update Gnus to No Gnus 0.7 from the Gnus CVS trunk
Miles Bader <miles@gnu.org>
parents: 78230
diff changeset
185 info))
a3c27999decb Update Gnus to No Gnus 0.7 from the Gnus CVS trunk
Miles Bader <miles@gnu.org>
parents: 78230
diff changeset
186
44810
c61f121692e4 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
187 (defun netrc-get (alist type)
c61f121692e4 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
188 "Return the value of token TYPE from ALIST."
c61f121692e4 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
189 (cdr (assoc type alist)))
c61f121692e4 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
190
85712
a3c27999decb Update Gnus to No Gnus 0.7 from the Gnus CVS trunk
Miles Bader <miles@gnu.org>
parents: 78230
diff changeset
191 (defun netrc-port-equal (port1 port2)
a3c27999decb Update Gnus to No Gnus 0.7 from the Gnus CVS trunk
Miles Bader <miles@gnu.org>
parents: 78230
diff changeset
192 (when (numberp port1)
a3c27999decb Update Gnus to No Gnus 0.7 from the Gnus CVS trunk
Miles Bader <miles@gnu.org>
parents: 78230
diff changeset
193 (setq port1 (or (netrc-find-service-name port1) port1)))
a3c27999decb Update Gnus to No Gnus 0.7 from the Gnus CVS trunk
Miles Bader <miles@gnu.org>
parents: 78230
diff changeset
194 (when (numberp port2)
a3c27999decb Update Gnus to No Gnus 0.7 from the Gnus CVS trunk
Miles Bader <miles@gnu.org>
parents: 78230
diff changeset
195 (setq port2 (or (netrc-find-service-name port2) port2)))
a3c27999decb Update Gnus to No Gnus 0.7 from the Gnus CVS trunk
Miles Bader <miles@gnu.org>
parents: 78230
diff changeset
196 (equal port1 port2))
a3c27999decb Update Gnus to No Gnus 0.7 from the Gnus CVS trunk
Miles Bader <miles@gnu.org>
parents: 78230
diff changeset
197
a3c27999decb Update Gnus to No Gnus 0.7 from the Gnus CVS trunk
Miles Bader <miles@gnu.org>
parents: 78230
diff changeset
198 (defun netrc-parse-services ()
a3c27999decb Update Gnus to No Gnus 0.7 from the Gnus CVS trunk
Miles Bader <miles@gnu.org>
parents: 78230
diff changeset
199 (when (file-exists-p netrc-services-file)
a3c27999decb Update Gnus to No Gnus 0.7 from the Gnus CVS trunk
Miles Bader <miles@gnu.org>
parents: 78230
diff changeset
200 (let ((services nil))
a3c27999decb Update Gnus to No Gnus 0.7 from the Gnus CVS trunk
Miles Bader <miles@gnu.org>
parents: 78230
diff changeset
201 (with-temp-buffer
a3c27999decb Update Gnus to No Gnus 0.7 from the Gnus CVS trunk
Miles Bader <miles@gnu.org>
parents: 78230
diff changeset
202 (insert-file-contents netrc-services-file)
a3c27999decb Update Gnus to No Gnus 0.7 from the Gnus CVS trunk
Miles Bader <miles@gnu.org>
parents: 78230
diff changeset
203 (while (search-forward "#" nil t)
a3c27999decb Update Gnus to No Gnus 0.7 from the Gnus CVS trunk
Miles Bader <miles@gnu.org>
parents: 78230
diff changeset
204 (delete-region (1- (point)) (point-at-eol)))
a3c27999decb Update Gnus to No Gnus 0.7 from the Gnus CVS trunk
Miles Bader <miles@gnu.org>
parents: 78230
diff changeset
205 (goto-char (point-min))
a3c27999decb Update Gnus to No Gnus 0.7 from the Gnus CVS trunk
Miles Bader <miles@gnu.org>
parents: 78230
diff changeset
206 (while (re-search-forward
a3c27999decb Update Gnus to No Gnus 0.7 from the Gnus CVS trunk
Miles Bader <miles@gnu.org>
parents: 78230
diff changeset
207 "^ *\\([^ \n\t]+\\)[ \t]+\\([0-9]+\\)/\\([^ \t\n]+\\)" nil t)
a3c27999decb Update Gnus to No Gnus 0.7 from the Gnus CVS trunk
Miles Bader <miles@gnu.org>
parents: 78230
diff changeset
208 (push (list (match-string 1) (string-to-number (match-string 2))
a3c27999decb Update Gnus to No Gnus 0.7 from the Gnus CVS trunk
Miles Bader <miles@gnu.org>
parents: 78230
diff changeset
209 (intern (downcase (match-string 3))))
a3c27999decb Update Gnus to No Gnus 0.7 from the Gnus CVS trunk
Miles Bader <miles@gnu.org>
parents: 78230
diff changeset
210 services))
a3c27999decb Update Gnus to No Gnus 0.7 from the Gnus CVS trunk
Miles Bader <miles@gnu.org>
parents: 78230
diff changeset
211 (nreverse services)))))
a3c27999decb Update Gnus to No Gnus 0.7 from the Gnus CVS trunk
Miles Bader <miles@gnu.org>
parents: 78230
diff changeset
212
a3c27999decb Update Gnus to No Gnus 0.7 from the Gnus CVS trunk
Miles Bader <miles@gnu.org>
parents: 78230
diff changeset
213 (defun netrc-find-service-name (number &optional type)
a3c27999decb Update Gnus to No Gnus 0.7 from the Gnus CVS trunk
Miles Bader <miles@gnu.org>
parents: 78230
diff changeset
214 (let ((services (netrc-parse-services))
a3c27999decb Update Gnus to No Gnus 0.7 from the Gnus CVS trunk
Miles Bader <miles@gnu.org>
parents: 78230
diff changeset
215 service)
a3c27999decb Update Gnus to No Gnus 0.7 from the Gnus CVS trunk
Miles Bader <miles@gnu.org>
parents: 78230
diff changeset
216 (setq type (or type 'tcp))
a3c27999decb Update Gnus to No Gnus 0.7 from the Gnus CVS trunk
Miles Bader <miles@gnu.org>
parents: 78230
diff changeset
217 (while (and (setq service (pop services))
a3c27999decb Update Gnus to No Gnus 0.7 from the Gnus CVS trunk
Miles Bader <miles@gnu.org>
parents: 78230
diff changeset
218 (not (and (= number (cadr service))
86963
d549ccffa35b (top-level): Don't load `encrypt' features.
Glenn Morris <rgm@gnu.org>
parents: 85712
diff changeset
219 (eq type (car (cddr service)))))))
85712
a3c27999decb Update Gnus to No Gnus 0.7 from the Gnus CVS trunk
Miles Bader <miles@gnu.org>
parents: 78230
diff changeset
220 (car service)))
a3c27999decb Update Gnus to No Gnus 0.7 from the Gnus CVS trunk
Miles Bader <miles@gnu.org>
parents: 78230
diff changeset
221
a3c27999decb Update Gnus to No Gnus 0.7 from the Gnus CVS trunk
Miles Bader <miles@gnu.org>
parents: 78230
diff changeset
222 (defun netrc-find-service-number (name &optional type)
a3c27999decb Update Gnus to No Gnus 0.7 from the Gnus CVS trunk
Miles Bader <miles@gnu.org>
parents: 78230
diff changeset
223 (let ((services (netrc-parse-services))
a3c27999decb Update Gnus to No Gnus 0.7 from the Gnus CVS trunk
Miles Bader <miles@gnu.org>
parents: 78230
diff changeset
224 service)
a3c27999decb Update Gnus to No Gnus 0.7 from the Gnus CVS trunk
Miles Bader <miles@gnu.org>
parents: 78230
diff changeset
225 (setq type (or type 'tcp))
a3c27999decb Update Gnus to No Gnus 0.7 from the Gnus CVS trunk
Miles Bader <miles@gnu.org>
parents: 78230
diff changeset
226 (while (and (setq service (pop services))
a3c27999decb Update Gnus to No Gnus 0.7 from the Gnus CVS trunk
Miles Bader <miles@gnu.org>
parents: 78230
diff changeset
227 (not (and (string= name (car service))
86963
d549ccffa35b (top-level): Don't load `encrypt' features.
Glenn Morris <rgm@gnu.org>
parents: 85712
diff changeset
228 (eq type (car (cddr service)))))))
85712
a3c27999decb Update Gnus to No Gnus 0.7 from the Gnus CVS trunk
Miles Bader <miles@gnu.org>
parents: 78230
diff changeset
229 (cadr service)))
a3c27999decb Update Gnus to No Gnus 0.7 from the Gnus CVS trunk
Miles Bader <miles@gnu.org>
parents: 78230
diff changeset
230
110410
f2e111723c3a Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents: 110306
diff changeset
231 ;;;###autoload
110306
838fb634d1b0 Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents: 110111
diff changeset
232 (defun netrc-credentials (machine &rest ports)
838fb634d1b0 Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents: 110111
diff changeset
233 "Return a user name/password pair.
838fb634d1b0 Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents: 110111
diff changeset
234 Port specifications will be prioritised in the order they are
838fb634d1b0 Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents: 110111
diff changeset
235 listed in the PORTS list."
838fb634d1b0 Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents: 110111
diff changeset
236 (let ((list (netrc-parse))
838fb634d1b0 Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents: 110111
diff changeset
237 found)
838fb634d1b0 Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents: 110111
diff changeset
238 (while (and ports
838fb634d1b0 Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents: 110111
diff changeset
239 (not found))
838fb634d1b0 Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents: 110111
diff changeset
240 (setq found (netrc-machine list machine (pop ports))))
838fb634d1b0 Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents: 110111
diff changeset
241 (when found
838fb634d1b0 Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents: 110111
diff changeset
242 (list (cdr (assoc "login" found))
838fb634d1b0 Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents: 110111
diff changeset
243 (cdr (assoc "password" found))))))
838fb634d1b0 Merge changes made in Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents: 110111
diff changeset
244
44810
c61f121692e4 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
245 (provide 'netrc)
c61f121692e4 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
246
c61f121692e4 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
247 ;;; netrc.el ends here