Hyphen and dash fixes in texinfo files.
[bpt/emacs.git] / doc / misc / auth.texi
CommitLineData
9eb59592 1\input texinfo @c -*-texinfo-*-
7fbf7cae
TZ
2
3@include gnus-overrides.texi
4
e280480a 5@setfilename ../../info/auth
5dc584b5 6@settitle Emacs auth-source Library @value{VERSION}
9eb59592 7
b8e0f0cd 8@set VERSION 0.3
9eb59592 9
9eb59592
MB
10@copying
11This file describes the Emacs auth-source library.
12
f99f1641 13Copyright @copyright{} 2008--2012 Free Software Foundation, Inc.
9eb59592
MB
14
15@quotation
16Permission is granted to copy, distribute and/or modify this document
17under the terms of the GNU Free Documentation License, Version 1.3 or
18any later version published by the Free Software Foundation; with no
19Invariant Sections, with the Front-Cover texts being ``A GNU Manual,''
20and with the Back-Cover Texts as in (a) below. A copy of the license
0b1af106 21is included in the section entitled ``GNU Free Documentation License''.
9eb59592
MB
22
23(a) The FSF's Back-Cover Text is: ``You have the freedom to copy and
6bf430d1 24modify this GNU manual.''
9eb59592
MB
25@end quotation
26@end copying
27
0c973505 28@dircategory Emacs lisp libraries
5dc584b5 29@direntry
62e034c2 30* Auth-source: (auth). The Emacs auth-source library.
5dc584b5 31@end direntry
9eb59592
MB
32
33@titlepage
7fbf7cae
TZ
34@ifset WEBHACKDEVEL
35@title Emacs auth-source Library (DEVELOPMENT VERSION)
36@end ifset
37@ifclear WEBHACKDEVEL
9eb59592 38@title Emacs auth-source Library
7fbf7cae 39@end ifclear
9eb59592
MB
40@author by Ted Zlatanov
41@page
9eb59592
MB
42@vskip 0pt plus 1filll
43@insertcopying
44@end titlepage
9eb59592 45
5dc584b5 46@contents
9eb59592 47
5dc584b5 48@ifnottex
9eb59592
MB
49@node Top
50@top Emacs auth-source
51This manual describes the Emacs auth-source library.
52
53It is a way for multiple applications to share a single configuration
54(in Emacs and in files) for user convenience.
55
5dc584b5
KB
56@insertcopying
57
9eb59592
MB
58@menu
59* Overview:: Overview of the auth-source library.
fe3c5669
PE
60* Help for users::
61* Secret Service API::
62* Help for developers::
63* GnuPG and EasyPG Assistant Configuration::
0b1af106 64* GNU Free Documentation License:: The license for this documentation.
fe3c5669
PE
65* Index::
66* Function Index::
67* Variable Index::
9eb59592 68@end menu
5dc584b5 69@end ifnottex
9eb59592
MB
70
71@node Overview
72@chapter Overview
73
38dc51ba 74The auth-source library is simply a way for Emacs and Gnus, among
b8e0f0cd
G
75others, to answer the old burning question ``What are my user name and
76password?''
b0b63450 77
b8e0f0cd
G
78(This is different from the old question about burning ``Where is the
79fire extinguisher, please?''.)
80
81The auth-source library supports more than just the user name or the
82password (known as the secret).
83
84Similarly, the auth-source library supports multiple storage backend,
85currently either the classic ``netrc'' backend, examples of which you
1df7defd 86can see later in this document, or the Secret Service API@. This is
b8e0f0cd 87done with EIEIO-based backends and you can write your own if you want.
9eb59592
MB
88
89@node Help for users
90@chapter Help for users
91
b0b63450
MB
92``Netrc'' files are a de facto standard. They look like this:
93@example
38dc51ba 94machine @var{mymachine} login @var{myloginname} password @var{mypassword} port @var{myport}
b0b63450 95@end example
9eb59592 96
b8e0f0cd
G
97The @code{machine} is the server (either a DNS name or an IP address).
98It's known as @var{:host} in @code{auth-source-search} queries. You
99can also use @code{host}.
100
101The @code{port} is the connection port or protocol. It's known as
35123c04 102@var{:port} in @code{auth-source-search} queries.
b8e0f0cd
G
103
104The @code{user} is the user name. It's known as @var{:user} in
105@code{auth-source-search} queries. You can also use @code{login} and
106@code{account}.
107
108Spaces are always OK as far as auth-source is concerned (but other
109programs may not like them). Just put the data in quotes, escaping
3c93d00f 110quotes as you'd expect with @samp{\}.
b8e0f0cd
G
111
112All these are optional. You could just say (but we don't recommend
113it, we're just showing that it's possible)
38dc51ba 114
b8e0f0cd
G
115@example
116password @var{mypassword}
117@end example
38dc51ba 118
b8e0f0cd
G
119to use the same password everywhere. Again, @emph{DO NOT DO THIS} or
120you will be pwned as the kids say.
38dc51ba 121
3c93d00f
GM
122``Netrc'' files are usually called @file{.authinfo} or @file{.netrc};
123nowadays @file{.authinfo} seems to be more popular and the auth-source
4a3988d5
G
124library encourages this confusion by accepting both, as you'll see
125later.
38dc51ba 126
b8e0f0cd 127If you have problems with the search, set @code{auth-source-debug} to
733afdf4 128@code{'trivia} and see what host, port, and user the library is
3c93d00f 129checking in the @samp{*Messages*} buffer. Ditto for any other
733afdf4
TZ
130problems, your first step is always to see what's being checked. The
131second step, of course, is to write a blog entry about it and wait for
132the answer in the comments.
38dc51ba
KY
133
134You can customize the variable @code{auth-sources}. The following may
b0b63450
MB
135be needed if you are using an older version of Emacs or if the
136auth-source library is not loaded for some other reason.
9eb59592
MB
137
138@lisp
b0b63450 139(require 'auth-source) ;; probably not necessary
9eb59592
MB
140(customize-variable 'auth-sources) ;; optional, do it once
141@end lisp
142
143@defvar auth-sources
144
38dc51ba 145The @code{auth-sources} variable tells the auth-source library where
bd3e840f
KY
146your netrc files or Secret Service API collection items live for a
147particular host and protocol. While you can get fancy, the default
148and simplest configuration is:
9eb59592
MB
149
150@lisp
35123c04
TZ
151;;; old default: required :host and :port, not needed anymore
152(setq auth-sources '((:source "~/.authinfo.gpg" :host t :port t)))
bd3e840f
KY
153;;; mostly equivalent (see below about fallbacks) but shorter:
154(setq auth-sources '((:source "~/.authinfo.gpg")))
b8e0f0cd 155;;; even shorter and the @emph{default}:
4a3988d5 156(setq auth-sources '("~/.authinfo.gpg" "~/.authinfo" "~/.netrc"))
5415d076
G
157;;; use the Secrets API @var{Login} collection (@pxref{Secret Service API})
158(setq auth-sources '("secrets:Login"))
9eb59592
MB
159@end lisp
160
38dc51ba 161By adding multiple entries to @code{auth-sources} with a particular
b0b63450
MB
162host or protocol, you can have specific netrc files for that host or
163protocol. Usually this is unnecessary but may make sense if you have
164shared netrc files or some other unusual setup (90% of Emacs users
165have unusual setups and the remaining 10% are @emph{really} unusual).
9eb59592 166
b8e0f0cd 167Here's a mixed example using two sources:
bd3e840f
KY
168
169@lisp
170(setq auth-sources '((:source (:secrets default) :host "myserver" :user "joe")
b8e0f0cd 171 "~/.authinfo.gpg"))
bd3e840f
KY
172@end lisp
173
b0b63450 174@end defvar
9eb59592 175
38dc51ba 176If you don't customize @code{auth-sources}, you'll have to live with
723ea6b5
TZ
177the defaults: the unencrypted netrc file @file{~/.authinfo} will be
178used for any host and any port.
b8e0f0cd 179
723ea6b5
TZ
180If that fails, any host and any port are looked up in the netrc file
181@file{~/.authinfo.gpg}, which is a GnuPG encrypted file (@pxref{GnuPG
182and EasyPG Assistant Configuration}).
183
184Finally, the unencrypted netrc file @file{~/.netrc} will be used for
185any host and any port.
9eb59592 186
b8e0f0cd 187The typical netrc line example is without a port.
b0b63450
MB
188
189@example
190machine YOURMACHINE login YOU password YOURPASSWORD
191@end example
192
193This will match any authentication port. Simple, right? But what if
194there's a SMTP server on port 433 of that machine that needs a
195different password from the IMAP server?
196
197@example
198machine YOURMACHINE login YOU password SMTPPASSWORD port 433
199machine YOURMACHINE login YOU password GENERALPASSWORD
200@end example
201
9eb59592
MB
202For url-auth authentication (HTTP/HTTPS), you need to put this in your
203netrc file:
204
205@example
206machine yourmachine.com:80 port http login testuser password testpass
207@end example
208
b0b63450 209This will match any realm and authentication method (basic or digest)
1df7defd 210over HTTP@. HTTPS is set up similarly. If you want finer controls,
b0b63450 211explore the url-auth source code and variables.
9eb59592
MB
212
213For Tramp authentication, use:
214
215@example
216machine yourmachine.com port scp login testuser password testpass
217@end example
218
219Note that the port denotes the Tramp connection method. When you
220don't use a port entry, you match any Tramp method, as explained
b0b63450
MB
221earlier. Since Tramp has about 88 connection methods, this may be
222necessary if you have an unusual (see earlier comment on those) setup.
9eb59592 223
bd3e840f
KY
224@node Secret Service API
225@chapter Secret Service API
226
0317dd51
MA
227The @dfn{Secret Service API} is a standard from
228@uref{http://www.freedesktop.org/wiki/Specifications/secret-storage-spec,,freedesktop.org}
ca2c89b6
TZ
229to securely store passwords and other confidential information. This
230API is implemented by system daemons such as the GNOME Keyring and the
231KDE Wallet (these are GNOME and KDE packages respectively and should
232be available on most modern GNU/Linux systems).
0317dd51 233
ca2c89b6 234The auth-source library uses the @file{secrets.el} library to connect
1df7defd 235through the Secret Service API@. You can also use that library in
ca2c89b6 236other packages, it's not exclusive to auth-source.
0317dd51
MA
237
238@defvar secrets-enabled
239After loading @file{secrets.el}, a non-@code{nil} value of this
240variable indicates the existence of a daemon providing the Secret
241Service API.
242@end defvar
243
244@deffn Command secrets-show-secrets
ca2c89b6 245This command shows all collections, items, and their attributes.
0317dd51
MA
246@end deffn
247
ca2c89b6
TZ
248The atomic objects managed by the Secret Service API are @dfn{secret
249items}, which contain things an application wishes to store securely,
250like a password. Secret items have a label (a name), the @dfn{secret}
251(which is the string we want, like a password), and a set of lookup
252attributes. The attributes can be used to search and retrieve a
253secret item at a later date.
0317dd51
MA
254
255Secret items are grouped in @dfn{collections}. A collection is
ca2c89b6
TZ
256sometimes called a @samp{keyring} or @samp{wallet} in GNOME Keyring
257and KDE Wallet but it's the same thing, a group of secrets.
258Collections are personal and protected so only the owner can open them.
0317dd51 259
c8bf3227 260The most common collection is called @code{"login"}.
ca2c89b6 261
c8bf3227 262A collection can have an alias. The alias @code{"default"} is
ca2c89b6
TZ
263commonly used so the clients don't have to know the specific name of
264the collection they open. Other aliases are not supported yet.
c8bf3227 265Since aliases are globally accessible, set the @code{"default"} alias
ca2c89b6 266only when you're sure it's appropriate.
0317dd51
MA
267
268@defun secrets-list-collections
ca2c89b6 269This function returns all the collection names as a list.
0317dd51
MA
270@end defun
271
272@defun secrets-set-alias collection alias
273Set @var{alias} as alias of collection labeled @var{collection}.
c8bf3227 274Currently only the alias @code{"default"} is supported.
0317dd51
MA
275@end defun
276
277@defun secrets-get-alias alias
278Return the collection name @var{alias} is referencing to.
c8bf3227 279Currently only the alias @code{"default"} is supported.
0317dd51
MA
280@end defun
281
282Collections can be created and deleted by the functions
283@code{secrets-create-collection} and @code{secrets-delete-collection}.
ca2c89b6 284Usually, this is not done from within Emacs. Do not delete standard
c8bf3227 285collections such as @code{"login"}.
ca2c89b6 286
c8bf3227 287The special collection @code{"session"} exists for the lifetime of the
ca2c89b6
TZ
288corresponding client session (in our case, Emacs's lifetime). It is
289created automatically when Emacs uses the Secret Service interface and
290it is deleted when Emacs is killed. Therefore, it can be used to
c8bf3227 291store and retrieve secret items temporarily. The @code{"session"}
ca2c89b6
TZ
292collection is better than a persistent collection when the secret
293items should not live longer than Emacs. The session collection can
c8bf3227 294be specified either by the string @code{"session"}, or by @code{nil},
ca2c89b6 295whenever a collection parameter is needed in the following functions.
0317dd51
MA
296
297@defun secrets-list-items collection
ca2c89b6 298Returns all the item labels of @var{collection} as a list.
0317dd51
MA
299@end defun
300
301@defun secrets-create-item collection item password &rest attributes
302This function creates a new item in @var{collection} with label
aebd5f1a 303@var{item} and password @var{password}. @var{attributes} are
0317dd51
MA
304key-value pairs set for the created item. The keys are keyword
305symbols, starting with a colon. Example:
306
307@example
ca2c89b6
TZ
308;;; The session "session", the label is "my item"
309;;; and the secret (password) is "geheim"
0317dd51
MA
310(secrets-create-item "session" "my item" "geheim"
311 :method "sudo" :user "joe" :host "remote-host")
312@end example
313@end defun
314
315@defun secrets-get-secret collection item
316Return the secret of item labeled @var{item} in @var{collection}.
317If there is no such item, return @code{nil}.
318@end defun
319
320@defun secrets-delete-item collection item
321This function deletes item @var{item} in @var{collection}.
322@end defun
323
324The lookup attributes, which are specified during creation of a
325secret item, must be a key-value pair. Keys are keyword symbols,
326starting with a colon; values are strings. They can be retrieved
ca2c89b6 327from a given secret item and they can be used for searching of items.
0317dd51
MA
328
329@defun secrets-get-attribute collection item attribute
330Returns the value of key @var{attribute} of item labeled @var{item} in
331@var{collection}. If there is no such item, or the item doesn't own
332this key, the function returns @code{nil}.
333@end defun
334
335@defun secrets-get-attributes collection item
336Return the lookup attributes of item labeled @var{item} in
337@var{collection}. If there is no such item, or the item has no
338attributes, it returns @code{nil}. Example:
339
340@example
341(secrets-get-attributes "session" "my item")
342 @result{} ((:user . "joe") (:host ."remote-host"))
343@end example
344@end defun
345
346@defun secrets-search-items collection &rest attributes
ca2c89b6
TZ
347Search for the items in @var{collection} with matching
348@var{attributes}. The @var{attributes} are key-value pairs, as used
349in @code{secrets-create-item}. Example:
0317dd51
MA
350
351@example
352(secrets-search-items "session" :user "joe")
353 @result{} ("my item" "another item")
354@end example
355@end defun
bd3e840f 356
ca2c89b6
TZ
357The auth-source library uses the @file{secrets.el} library and thus
358the Secret Service API when you specify a source matching
c8bf3227
TZ
359@code{"secrets:COLLECTION"}. For instance, you could use
360@code{"secrets:session"} to use the @code{"session"} collection, open only
361for the lifetime of Emacs. Or you could use @code{"secrets:Login"} to
362open the @code{"Login"} collection. As a special case, you can use the
ca2c89b6 363symbol @code{default} in @code{auth-sources} (not a string, but a
c8bf3227 364symbol) to specify the @code{"default"} alias. Here is a contrived
ca2c89b6
TZ
365example that sets @code{auth-sources} to search three collections and
366then fall back to @file{~/.authinfo.gpg}.
367
368@example
369(setq auth-sources '(default
370 "secrets:session"
371 "secrets:Login"
372 "~/.authinfo.gpg"))
373@end example
374
9eb59592
MB
375@node Help for developers
376@chapter Help for developers
377
733afdf4
TZ
378The auth-source library lets you control logging output easily.
379
380@defvar auth-source-debug
3c93d00f
GM
381Set this variable to @code{'trivia} to see lots of output in
382@samp{*Messages*}, or set it to a function that behaves like
383@code{message} to do your own logging.
733afdf4
TZ
384@end defvar
385
b8e0f0cd 386The auth-source library only has a few functions for external use.
9eb59592 387
aebd5f1a
GM
388@defun auth-source-search &rest spec &key type max host user port secret require create delete &allow-other-keys
389This function searches (or modifies) authentication backends according
390to @var{spec}. See the function's doc-string for details.
391@c TODO more details.
b8e0f0cd 392@end defun
9eb59592 393
733afdf4 394Let's take a look at an example of using @code{auth-source-search}
aebd5f1a 395from Gnus's @code{nnimap.el}.
733afdf4
TZ
396
397@example
398(defun nnimap-credentials (address ports)
399 (let* ((auth-source-creation-prompts
400 '((user . "IMAP user at %h: ")
401 (secret . "IMAP password for %u@@%h: ")))
402 (found (nth 0 (auth-source-search :max 1
403 :host address
404 :port ports
405 :require '(:user :secret)
406 :create t))))
407 (if found
408 (list (plist-get found :user)
3107d2a5
KY
409 (let ((secret (plist-get found :secret)))
410 (if (functionp secret)
411 (funcall secret)
412 secret))
413 (plist-get found :save-function))
733afdf4
TZ
414 nil)))
415@end example
416
417This call requires the user and password (secret) to be in the
418results. It also requests that an entry be created if it doesn't
419exist already. While the created entry is being assembled, the shown
420prompts will be used to interact with the user. The caller can also
421pass data in @code{auth-source-creation-defaults} to supply defaults
422for any of the prompts.
423
424Note that the password needs to be evaluated if it's a function. It's
425wrapped in a function to provide some security.
426
6196cffe 427Later, after a successful login, @code{nnimap.el} calls the
733afdf4
TZ
428@code{:save-function} like so:
429
430@example
431(when (functionp (nth 2 credentials))
432 (funcall (nth 2 credentials)))
3107d2a5 433@end example
733afdf4 434
4248cca2 435This will work whether the @code{:save-function} was provided or not.
733afdf4
TZ
436@code{:save-function} will be provided only when a new entry was
437created, so this effectively says ``after a successful login, save the
438authentication information we just used, if it was newly created.''
439
4248cca2
TZ
440After the first time it's called, the @code{:save-function} will not
441run again (but it will log something if you have set
442@code{auth-source-debug} to @code{'trivia}). This is so it won't ask
443the same question again, which is annoying. This is so it won't ask
444the same question again, which is annoying. This is so it won't ask
445the same question again, which is annoying.
446
447So the responsibility of the API user that specified @code{:create t}
448is to call the @code{:save-function} if it's provided.
449
aebd5f1a
GM
450@defun auth-source-delete &rest spec &key delete &allow-other-keys
451This function deletes entries matching @var{spec} from the
452authentication backends. It returns the entries that were deleted.
453The backend may not actually delete the entries.
b8e0f0cd 454@end defun
bd3e840f 455
aebd5f1a
GM
456@defun auth-source-forget spec
457This function forgets any cached data that exactly matches @var{spec}.
458It returns @code{t} if it forget some data, and @code{nil} if no
459matching data was found.
b8e0f0cd
G
460@end defun
461
aebd5f1a
GM
462@defun auth-source-forget+ &rest spec &allow-other-keys
463This function forgets any cached data matching @var{spec}.
464It returns the number of items forgotten.
9eb59592
MB
465@end defun
466
36d3245f
G
467@node GnuPG and EasyPG Assistant Configuration
468@appendix GnuPG and EasyPG Assistant Configuration
469
98e2b864 470If you don't customize @code{auth-sources}, the auth-source library
3c93d00f
GM
471reads @file{~/.authinfo.gpg}, which is a GnuPG encrypted file. Then
472it will check @file{~/.authinfo} but it's not recommended to use such
7ba93e94 473an unencrypted file.
98e2b864 474
36d3245f 475In Emacs 23 or later there is an option @code{auto-encryption-mode} to
3c93d00f 476automatically decrypt @file{*.gpg} files. It is enabled by default.
a1d16a7b 477If you are using earlier versions of Emacs, you will need:
36d3245f
G
478
479@lisp
480(require 'epa-file)
481(epa-file-enable)
482@end lisp
483
98e2b864 484If you want your GnuPG passwords to be cached, set up @code{gpg-agent}
fe3c5669 485or EasyPG Assistant
c56dfd36 486(@pxref{Caching Passphrases, , Caching Passphrases, epa}).
36d3245f 487
98e2b864 488To quick start, here are some questions:
36d3245f
G
489
490@enumerate
a1d16a7b
G
491@item
492Do you use GnuPG version 2 instead of GnuPG version 1?
493@item
494Do you use symmetric encryption rather than public key encryption?
495@item
496Do you want to use gpg-agent?
36d3245f
G
497@end enumerate
498
499Here are configurations depending on your answers:
500
501@multitable {111} {222} {333} {configuration configuration configuration}
502@item @b{1} @tab @b{2} @tab @b{3} @tab Configuration
98e2b864 503@item Yes @tab Yes @tab Yes @tab Set up gpg-agent.
36d3245f 504@item Yes @tab Yes @tab No @tab You can't, without gpg-agent.
98e2b864 505@item Yes @tab No @tab Yes @tab Set up gpg-agent.
36d3245f
G
506@item Yes @tab No @tab No @tab You can't, without gpg-agent.
507@item No @tab Yes @tab Yes @tab Set up elisp passphrase cache.
508@item No @tab Yes @tab No @tab Set up elisp passphrase cache.
98e2b864 509@item No @tab No @tab Yes @tab Set up gpg-agent.
36d3245f
G
510@item No @tab No @tab No @tab You can't, without gpg-agent.
511@end multitable
512
a1d16a7b
G
513To set up gpg-agent, follow the instruction in GnuPG manual
514(@pxref{Invoking GPG-AGENT, , Invoking GPG-AGENT, gnupg}).
36d3245f
G
515
516To set up elisp passphrase cache, set
517@code{epa-file-cache-passphrase-for-symmetric-encryption}.
518
0b1af106
GM
519@node GNU Free Documentation License
520@appendix GNU Free Documentation License
521@include doclicense.texi
522
9eb59592 523@node Index
0b1af106 524@unnumbered Index
9eb59592
MB
525@printindex cp
526
527@node Function Index
0b1af106 528@unnumbered Function Index
9eb59592
MB
529@printindex fn
530
531@node Variable Index
0b1af106 532@unnumbered Variable Index
9eb59592
MB
533@printindex vr
534
9eb59592
MB
535@bye
536
537@c End: