* auth.texi (Overview, Help for users, Help for developers): Update docs.
[gnus] / texi / auth.texi
1 \input texinfo                  @c -*-texinfo-*-
2
3 @include gnus-overrides.texi
4
5 @setfilename auth
6 @settitle Emacs auth-source Library @value{VERSION}
7
8 @set VERSION 0.3
9
10 @copying
11 This file describes the Emacs auth-source library.
12
13 Copyright @copyright{} 2008-2011 Free Software Foundation, Inc.
14
15 @quotation
16 Permission is granted to copy, distribute and/or modify this document
17 under the terms of the GNU Free Documentation License, Version 1.3 or
18 any later version published by the Free Software Foundation; with no
19 Invariant Sections, with the Front-Cover texts being ``A GNU Manual,''
20 and with the Back-Cover Texts as in (a) below.  A copy of the license
21 is included in the section entitled ``GNU Free Documentation License''
22 in the Emacs manual.
23
24 (a) The FSF's Back-Cover Text is: ``You have the freedom to copy and
25 modify this GNU manual.  Buying copies from the FSF supports it in
26 developing GNU and promoting software freedom.''
27
28 This document is part of a collection distributed under the GNU Free
29 Documentation License.  If you want to distribute this document
30 separately from the collection, you can do so by adding a copy of the
31 license to the document, as described in section 6 of the license.
32 @end quotation
33 @end copying
34
35 @dircategory Emacs
36 @direntry
37 * Auth-source: (auth).          The Emacs auth-source library.
38 @end direntry
39
40 @titlepage
41 @ifset WEBHACKDEVEL
42 @title Emacs auth-source Library (DEVELOPMENT VERSION)
43 @end ifset
44 @ifclear WEBHACKDEVEL
45 @title Emacs auth-source Library
46 @end ifclear
47 @author by Ted Zlatanov
48 @page
49 @vskip 0pt plus 1filll
50 @insertcopying
51 @end titlepage
52
53 @contents
54
55 @ifnottex
56 @node Top
57 @top Emacs auth-source
58 This manual describes the Emacs auth-source library.
59
60 It is a way for multiple applications to share a single configuration
61 (in Emacs and in files) for user convenience.
62
63 @insertcopying
64
65 @menu
66 * Overview::                    Overview of the auth-source library.
67 * Help for users::              
68 * Secret Service API::          
69 * Help for developers::         
70 * GnuPG and EasyPG Assistant Configuration::  
71 * Index::                       
72 * Function Index::              
73 * Variable Index::              
74 @end menu
75 @end ifnottex
76
77 @node Overview
78 @chapter Overview
79
80 The auth-source library is simply a way for Emacs and Gnus, among
81 others, to answer the old burning question ``What are my user name and
82 password?''
83
84 (This is different from the old question about burning ``Where is the
85 fire extinguisher, please?''.)
86
87 The auth-source library supports more than just the user name or the
88 password (known as the secret).
89
90 Similarly, the auth-source library supports multiple storage backend,
91 currently either the classic ``netrc'' backend, examples of which you
92 can see later in this document, or the Secret Service API.  This is
93 done with EIEIO-based backends and you can write your own if you want.
94
95 @node Help for users
96 @chapter Help for users
97
98 ``Netrc'' files are a de facto standard.  They look like this:
99 @example
100 machine @var{mymachine} login @var{myloginname} password @var{mypassword} port @var{myport}
101 @end example
102
103 The @code{machine} is the server (either a DNS name or an IP address).
104 It's known as @var{:host} in @code{auth-source-search} queries.  You
105 can also use @code{host}.
106
107 The @code{port} is the connection port or protocol.  It's known as
108 @var{:port} in @code{auth-source-search} queries.  You can also use
109 @code{protocol}.
110
111 The @code{user} is the user name.  It's known as @var{:user} in
112 @code{auth-source-search} queries.  You can also use @code{login} and
113 @code{account}.
114
115 All these are optional.  You could just say (but we don't recommend
116 it, we're just showing that it's possible)
117
118 @example
119 password @var{mypassword}
120 @end example
121
122 to use the same password everywhere.  Again, @emph{DO NOT DO THIS} or
123 you will be pwned as the kids say.
124
125 ``Netrc'' files are usually called @code{.authinfo} or @code{.netrc};
126 nowadays @code{.authinfo} seems to be more popular and the auth-source
127 library encourages this confusion by making it the default, as you'll
128 see later.
129
130 If you have problems with the search, set @code{auth-source-debug} to
131 @code{t} and see what host, port, and user the library is checking in
132 the @code{*Messages*} buffer.  Ditto for any other problems, your
133 first step is always to see what's being checked.  The second step, of
134 course, is to write a blog entry about it and wait for the answer in
135 the comments.
136
137 You can customize the variable @code{auth-sources}.  The following may
138 be needed if you are using an older version of Emacs or if the
139 auth-source library is not loaded for some other reason.
140
141 @lisp
142 (require 'auth-source)             ;; probably not necessary
143 (customize-variable 'auth-sources) ;; optional, do it once
144 @end lisp
145
146 @defvar auth-sources
147
148 The @code{auth-sources} variable tells the auth-source library where
149 your netrc files or Secret Service API collection items live for a
150 particular host and protocol.  While you can get fancy, the default
151 and simplest configuration is:
152
153 @lisp
154 ;;; old default: required :host and :protocol, not needed anymore
155 (setq auth-sources '((:source "~/.authinfo.gpg" :host t :protocol t)))
156 ;;; mostly equivalent (see below about fallbacks) but shorter:
157 (setq auth-sources '((:source "~/.authinfo.gpg")))
158 ;;; even shorter and the @emph{default}:
159 (setq auth-sources '("~/.authinfo.gpg" "~/.authinfo"))
160 ;;; use the Secrets API @var{login} collection (@pxref{Secret Service API})
161 (setq auth-sources '("secrets:login"))
162 @end lisp
163
164 By adding multiple entries to @code{auth-sources} with a particular
165 host or protocol, you can have specific netrc files for that host or
166 protocol.  Usually this is unnecessary but may make sense if you have
167 shared netrc files or some other unusual setup (90% of Emacs users
168 have unusual setups and the remaining 10% are @emph{really} unusual).
169
170 Here's a mixed example using two sources:
171
172 @lisp
173 (setq auth-sources '((:source (:secrets default) :host "myserver" :user "joe")
174                      "~/.authinfo.gpg"))
175 @end lisp
176
177 @end defvar
178
179 If you don't customize @code{auth-sources}, you'll have to live with
180 the defaults: any host and any port are looked up in the netrc
181 file @code{~/.authinfo.gpg}, which is a GnuPG encrypted file
182 (@pxref{GnuPG and EasyPG Assistant Configuration}).  
183
184 If that fails, the unencrypted netrc file @code{~/.authinfo} will
185 be used.
186
187 The typical netrc line example is without a port.
188
189 @example
190 machine YOURMACHINE login YOU password YOURPASSWORD
191 @end example
192
193 This will match any authentication port.  Simple, right?  But what if
194 there's a SMTP server on port 433 of that machine that needs a
195 different password from the IMAP server?
196
197 @example
198 machine YOURMACHINE login YOU password SMTPPASSWORD port 433
199 machine YOURMACHINE login YOU password GENERALPASSWORD
200 @end example
201
202 For url-auth authentication (HTTP/HTTPS), you need to put this in your
203 netrc file:
204
205 @example
206 machine yourmachine.com:80 port http login testuser password testpass
207 @end example
208
209 This will match any realm and authentication method (basic or digest)
210 over HTTP.  HTTPS is set up similarly.  If you want finer controls,
211 explore the url-auth source code and variables.
212
213 For Tramp authentication, use:
214
215 @example
216 machine yourmachine.com port scp login testuser password testpass
217 @end example
218
219 Note that the port denotes the Tramp connection method.  When you
220 don't use a port entry, you match any Tramp method, as explained
221 earlier.  Since Tramp has about 88 connection methods, this may be
222 necessary if you have an unusual (see earlier comment on those) setup.
223
224 @node Secret Service API
225 @chapter Secret Service API
226
227 TODO: how does it work generally, how does secrets.el work, some examples.
228
229 @node Help for developers
230 @chapter Help for developers
231
232 The auth-source library only has a few functions for external use.
233
234 @defun auth-source-search SPEC
235
236 TODO: how to include docstring?
237
238 @end defun
239
240 @defun auth-source-delete SPEC
241
242 TODO: how to include docstring?
243
244 @end defun
245
246 @defun auth-source-forget SPEC
247
248 TODO: how to include docstring?
249
250 @end defun
251
252 @defun auth-source-forget+ SPEC
253
254 TODO: how to include docstring?
255
256 @end defun
257
258 @node GnuPG and EasyPG Assistant Configuration
259 @appendix GnuPG and EasyPG Assistant Configuration
260
261 If you don't customize @code{auth-sources}, the auth-source library
262 reads @code{~/.authinfo.gpg}, which is a GnuPG encrypted file.
263
264 In Emacs 23 or later there is an option @code{auto-encryption-mode} to
265 automatically decrypt @code{*.gpg} files.  It is enabled by default.
266 If you are using earlier versions of Emacs, you will need:
267
268 @lisp
269 (require 'epa-file)
270 (epa-file-enable)
271 @end lisp
272
273 If you want your GnuPG passwords to be cached, set up @code{gpg-agent}
274 or EasyPG Assitant
275 (@pxref{Caching Passphrases, , Caching Passphrases, epa}).
276
277 To quick start, here are some questions:
278
279 @enumerate
280 @item
281 Do you use GnuPG version 2 instead of GnuPG version 1?
282 @item
283 Do you use symmetric encryption rather than public key encryption?
284 @item
285 Do you want to use gpg-agent?
286 @end enumerate
287
288 Here are configurations depending on your answers:
289
290 @multitable {111} {222} {333} {configuration configuration configuration}
291 @item @b{1} @tab @b{2} @tab @b{3} @tab Configuration
292 @item Yes @tab Yes @tab Yes @tab Set up gpg-agent.
293 @item Yes @tab Yes @tab No @tab You can't, without gpg-agent.
294 @item Yes @tab No @tab Yes @tab Set up gpg-agent.
295 @item Yes @tab No @tab No @tab You can't, without gpg-agent.
296 @item No @tab Yes @tab Yes @tab Set up elisp passphrase cache.
297 @item No @tab Yes @tab No @tab Set up elisp passphrase cache.
298 @item No @tab No @tab Yes @tab Set up gpg-agent.
299 @item No @tab No @tab No @tab You can't, without gpg-agent.
300 @end multitable
301
302 To set up gpg-agent, follow the instruction in GnuPG manual
303 (@pxref{Invoking GPG-AGENT, , Invoking GPG-AGENT, gnupg}).
304
305 To set up elisp passphrase cache, set
306 @code{epa-file-cache-passphrase-for-symmetric-encryption}.
307
308 @node Index
309 @chapter Index
310 @printindex cp
311
312 @node Function Index
313 @chapter Function Index
314 @printindex fn
315
316 @node Variable Index
317 @chapter Variable Index
318 @printindex vr
319
320 @bye
321
322 @c End: