;;; netrc.el --- .netrc parsing functionality
-;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2004, 2005
;; Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
;;; .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."
(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))
(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)))