* gnus-int.el (gnus-request-accept-article): Inform the agent that
[gnus] / lisp / netrc.el
1 ;;; netrc.el --- .netrc parsing functionality
2 ;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002
3 ;;        Free Software Foundation, Inc.
4
5 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
6 ;; Modularizer: Ted Zlatanov <tzz@lifelogs.com>
7 ;; Keywords: news
8
9 ;; This file is part of GNU Emacs.
10
11 ;; GNU Emacs is free software; you can redistribute it and/or modify
12 ;; it under the terms of the GNU General Public License as published by
13 ;; the Free Software Foundation; either version 2, or (at your option)
14 ;; any later version.
15
16 ;; GNU Emacs is distributed in the hope that it will be useful,
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19 ;; GNU General Public License for more details.
20
21 ;; You should have received a copy of the GNU General Public License
22 ;; along with GNU Emacs; see the file COPYING.  If not, write to the
23 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
24 ;; Boston, MA 02111-1307, USA.
25
26 ;;; Commentary:
27
28 ;; Just the .netrc parsing functionality, abstracted so other packages
29 ;; besides Gnus can use it.
30
31 ;;; Code:
32
33 ;;;
34 ;;; .netrc and .authinfo rc parsing
35 ;;;
36
37 ;; autoload password
38 (eval-and-compile
39   (autoload 'password-read "password"))
40
41 (defgroup netrc nil
42  "Netrc configuration.")
43
44 (defcustom netrc-encrypting-method nil
45   "Decoding method used for the netrc file.
46 Use the OpenSSL symmetric ciphers here.  Leave nil for no
47 decoding.  Encrypt the file with netrc-encrypt, but make sure you
48 have set netrc-encrypting-method to a non-nil value."
49   :type '(choice
50           (const :tag "DES-3" "des3")
51           (const :tag "IDEA" "idea")
52           (const :tag "RC4" "rc4")
53           (string :tag "Explicit cipher name")
54           (const :tag "None" nil))
55   :group 'netrc)
56
57 (defcustom netrc-openssl-path (executable-find "openssl")
58   "File path of the OpenSSL shell."
59   :type '(choice (file :tag "Location of openssl")
60                  (const :tag "openssl is not installed" nil))
61   :group 'netrc)
62
63 (defun netrc-encrypt (plain-file encrypted-file)
64   (interactive "fPlain File: \nFEncrypted File: ")
65   "Encrypt FILE to ENCRYPTED-FILE with netrc-encrypting-method cipher."
66   (when (and (file-exists-p plain-file)
67              (stringp encrypted-file)
68              netrc-encrypting-method
69              netrc-openssl-path)
70     (let ((buffer-file-coding-system 'binary)
71           (coding-system-for-read 'binary)
72           (coding-system-for-write 'binary)
73           (password 
74            (password-read
75             (format "OpenSSL Password for cipher %s? "
76                     netrc-encrypting-method)
77             (format "netrc-openssl-password-%s"
78                     netrc-encrypting-method))))
79       (when password
80         (with-temp-buffer
81           (insert-file-contents plain-file)
82           (setenv "NETRC_OPENSSL_PASSWORD" password)
83           (shell-command-on-region 
84            (point-min) 
85            (point-max)
86            (format "%s %s -pass env:NETRC_OPENSSL_PASSWORD -e"
87                    netrc-openssl-path
88                   &nb