* gnus-group.el (gnus-group-make-tool-bar): Remove duplicate check
[gnus] / lisp / netrc.el
index 85ab774..a4c57ef 100644 (file)
@@ -1,6 +1,6 @@
 ;;; netrc.el --- .netrc parsing functionality
-;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002
-;;        Free Software Foundation, Inc.
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+;;   2005, 2006 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Modularizer: Ted Zlatanov <tzz@lifelogs.com>
@@ -20,8 +20,8 @@
 
 ;; 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., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
 
 ;;; Commentary:
 
 ;;; .netrc and .authinfo rc parsing
 ;;;
 
-;; autoload password
+;; autoload encrypt
 (eval-and-compile
-  (autoload 'password-read "password"))
+  (autoload 'encrypt-find-model "encrypt")
+  (autoload 'encrypt-insert-file-contents "encrypt"))
 
 (defgroup netrc nil
- "Netrc configuration.")
-
-(defcustom netrc-encrypting-method nil
-  "Decoding method used for the netrc file.
-Use the OpenSSL symmetric ciphers here.  Leave nil for no
-decoding.  Encrypt the file with netrc-encrypt, but make sure you
-have set netrc-encrypting-method to a non-nil value."
-  :type '(choice
-         (const :tag "DES-3" "des3")
-         (const :tag "IDEA" "idea")
-         (const :tag "RC4" "rc4")
-         (string :tag "Explicit cipher name")
-         (const :tag "None" nil))
-  :group 'netrc)
-
-(defcustom netrc-openssl-path (executable-find "openssl")
-  "File path of the OpenSSL shell."
-  :type '(choice (file :tag "Location of openssl")
-                (const :tag "openssl is not installed" nil))
-  :group 'netrc)
+ "Netrc configuration."
+ :group 'comm)
 
 (defvar netrc-services-file "/etc/services"
   "The name of the services file.")
 
-(defun netrc-encrypt (plain-file encrypted-file)
-  (interactive "fPlain File: \nFEncrypted File: ")
-  "Encrypt FILE to ENCRYPTED-FILE with netrc-encrypting-method cipher."
-  (when (and (file-exists-p plain-file)
-            (stringp encrypted-file)
-            netrc-encrypting-method
-            netrc-openssl-path)
-    (let ((buffer-file-coding-system 'binary)
-         (coding-system-for-read 'binary)
-         (coding-system-for-write 'binary)
-         (password 
-          (password-read
-           (format "OpenSSL Password for cipher %s? "
-                   netrc-encrypting-method)
-           (format "netrc-openssl-password-%s"
-                   netrc-encrypting-method))))
-      (when password
-       (with-temp-buffer
-         (insert-file-contents plain-file)
-         (setenv "NETRC_OPENSSL_PASSWORD" password)
-         (shell-command-on-region 
-          (point-min) 
-          (point-max)
-          (format "%s %s -pass env:NETRC_OPENSSL_PASSWORD -e"
-                  netrc-openssl-path
-                  netrc-encrypting-method)
-          t
-          t)
-         (write-file encrypted-file t))))))
-
 (defun netrc-parse (file)
   (interactive "fFile to Parse: ")
   "Parse FILE and return an list of all entries in the file."
@@ -101,30 +54,13 @@ have set netrc-encrypting-method to a non-nil value."
       (let ((tokens '("machine" "default" "login"
                      "password" "account" "macdef" "force"
                      "port"))
+           (encryption-model (encrypt-find-model file))
            alist elem result pair)
-       (if (and netrc-encrypting-method
-                netrc-openssl-path)
-           (let ((buffer-file-coding-system 'binary)
-                 (coding-system-for-read 'binary)
-                 (coding-system-for-write 'binary)
-                 (password 
-                  (password-read
-                   (format "OpenSSL Password for cipher %s? "
-                           netrc-encrypting-method)
-                   (format "netrc-openssl-password-%s" 
-                           netrc-encrypting-method))))
-             (when password
-               (insert-file-contents file)
-               (setenv "NETRC_OPENSSL_PASSWORD" password)
-               (shell-command-on-region
-                (point-min) 
-                (point-max)
-                (format "%s %s -pass env:NETRC_OPENSSL_PASSWORD -d"
-                        netrc-openssl-path
-                        netrc-encrypting-method)
-                t
-                t)))
+
+       (if encryption-model
+           (encrypt-insert-file-contents file encryption-model)
          (insert-file-contents file))
+
        (goto-char (point-min))
        ;; Go through the file, line by line.
        (while (not (eobp))
@@ -196,6 +132,26 @@ Entries without port tokens default to DEFAULTPORT."
        (pop result))
       (car result))))
 
+(defun netrc-machine-user-or-password (mode authinfo-file-or-list machines ports defaults)
+  "Get the user name or password according to MODE from AUTHINFO-FILE-OR-LIST.
+Matches a machine from MACHINES and a port from PORTS, giving
+default ports DEFAULTS to `netrc-machine'.
+
+MODE can be \"login\" or \"password\", suitable for passing to
+`netrc-get'."
+  (let ((authinfo-list (if (stringp authinfo-file-or-list)
+                          (netrc-parse authinfo-file-or-list)
+                        authinfo-file-or-list))
+       (ports (or ports '(nil)))
+       (defaults (or defaults '(nil)))
+       info)
+    (dolist (machine machines)
+      (dolist (default defaults)
+       (dolist (port ports)
+         (let ((alist (netrc-machine authinfo-list machine port default)))
+         (setq info (or (netrc-get alist mode) info))))))
+    info))
+
 (defun netrc-get (alist type)
   "Return the value of token TYPE from ALIST."
   (cdr (assoc type alist)))