Bump version for development.
[pwmd.git] / doc / pwmd.texi
blob2560e7dd94e55b57fb1923d7ae7b9dde98746b47
1 >\input texinfo @c -*-texinfo-*- 
2 @c %**start of header 
3 @setfilename pwmd.info 
4 @settitle PWMD Manual
6 @macro manpage {a}
7 @end macro
8 @macro mansect {a}
9 @end macro
10 @macro manpause
11 @end macro
12 @macro mancont
13 @end macro
14 @c %**end of header
16 @dircategory Miscellaneous
17 @direntry
18 * pwmd: (pwmd).         Password Manager Daemon
19 @end direntry
21 @titlepage 
22 @title PWMD Manual
23 @subtitle Commands and syntax
24 @author by Ben Kibbey
25 @end titlepage
27 @c    Node, Next, Previous, Up 
28 @node Top ,     ,         , (dir) 
30 @ifinfo 
31 This manual documents @command{pwmd} version 3.1 protocol commands and
32 their syntax.
33 @end ifinfo 
35 @menu 
36 * Introduction::          Overview of pwmd.
37 * Access Control::        ACL of a single XML element.
38 * Cache Control::         Key and data file cache handling.
39 * Invoking::              Command line options.
40 * Configuration::         Configuration file options.
41 * Commands::              Protocol commands.
42 * Bulk Commands::         Running multiple commands in sequence.
43 * Status Messages::       Status lines and their meaning.
44 * Target Attribute::      A kind of symbolic link.
45 * Other Attributes::      Other attributes specially handled by pwmd.
46 * Key Expiration::        What to do when a key expires.
47 * Signals::               Signals known to pwmd.
48 * Concept Index::         Index of concepts.
49 @end menu
51 @c    Node,     Next,    Previous, Up 
52 @node Introduction, Access Control,        , Top 
53 @chapter Overview of @command{pwmd} 
55 @manpage pwmd.1
56 @ifset manverb
57 .B pwmd
58 \- a universal data server
59 @end ifset
61 @mansect synopsis
62 @ifset manverb
63 .B pwmd
64 [options] [file1] [...]
65 @end ifset
67 @mansect description
68 @dfn{Password Manager Daemon} (or @command{pwmd}) is a server that
69 applications connect to and send commands to put and get data that is stored
70 in an OpenPGP encrypted @acronym{XML} document. It mimics a filesystem in a
71 lot of ways including per element @acronym{ACL}'s, but also has the advantage
72 of remote connections over @acronym{TLS} and a document cache. The document cache is
73 needed for a data file encrypted with secret keys stored on a smartcard.
75 The server uses the Assuan protocol (@inforef{Implementation,,assuan}) which
76 is the same used by @command{gpg-agent}, @command{pinentry}, @command{gpgme}
77 and @command{scdaemon}. It also uses @cite{libgpg-error} for error reporting
78 with @var{GPG_ERR_SOURCE_USER_1} being the error source.
79 @ifset isman
81 You can import an existing @command{pwmd} version @var{3.0.x} data file by
82 dumping the raw @acronym{XML} data with
83 .BR pwmd-dump(1)
84 to a file, then
85 importing that file by using @command{pwmd}'s @option{--import} command line
86 option. Please
87 see the
88 .BR pwmd-dump(1)
89 manual page for details.
91 It is recommended to read the texinfo documentation of @command{pwmd}
92 since it contains protocol commands and syntax and other details not
93 found here.
94 @end ifset
95 @manpause
97 The @acronym{XML} document uses the following @acronym{DTD}:
99 @example
100     <?xml version="1.0"?>
101     <!DOCTYPE pwmd [
102     <!ELEMENT pwmd (element*)>
103     <!ATTLIST element _name CDATA #REQUIRED>
104     ]>
105 @end example
107 The @code{pwmd} element is the document root node while all other elements
108 of the document have the name @code{element} with an attribute @code{_name}
109 whose value uniquely identifies the element at the current element tree depth.
110 It is done this way to avoid @acronym{XML} parsing errors for commonly used
111 characters.  A @acronym{URL} for example would be an invalid @acronym{XML}
112 element since the @acronym{URI} contains a @samp{:} which is also the
113 @acronym{XML} namespace separator.
115 As mentioned, an element name must be unique for the current element tree
116 depth. You cannot have two elements containing the same @code{_name} attribute
117 value. @command{pwmd} will stop searching for an element of an @emph{element
118 path} at the first match then continue searching for the next element of the
119 element path beginning at the child node of the matched element.
121 An @emph{element path} is a @code{TAB} delimited character string where each
122 @code{TAB} separates each element in the path.  For example, the element path
123 @code{a@code{TAB}b@code{TAB}c} has the following @acronym{XML} document
124 structure:
126 @example
127         <pwmd>
128             <element _name="a">
129                 <element _name="b">
130                     <element _name="c">
131                         [... element value or content ...]
132                     </element>
133                 </element>
134             </element>
135         </pwmd>
136 @end example
138 The only restriction of an element name is that it contain no whitespace
139 characters.
141 @c    Node,     Next,    Previous, Up 
142 @node Access Control, Cache Control, Introduction, Top 
143 @chapter Access Control
145 Like a filesystem has an @acronym{ACL} to grant or limit access to directories
146 or files for a specific user or group, @command{pwmd} can limit a local user,
147 group or a @acronym{TLS} connection to a specific element path. This is done
148 by storing an @acronym{ACL} in the element attribute @var{_acl}. Its syntax is
149 similar to the @var{allowed} configuration parameter (@pxref{Configuration})
150 with the exception that a @acronym{TLS} fingerprint hash is prefixed with a
151 @code{#}.
153 Access is denied for any user that is not in the @acronym{ACL} of an element
154 with the exception of an invoking user (see the @var{invoking_user}). The
155 connected client must be in the @acronym{ACL} for each element in an element
156 path otherwise an error is returned.  As an example:
158 @example
159 <element _name="test" _acl="username,-@@wheel,root,#ABCDEF">
160         <element _name="child"/>
161 </element>
162 @end example
164 The user @code{username} would be allowed access to the @code{test} element
165 but not if it is a member of the @code{wheel} group although, the @code{root}
166 user, who may be a member of the @code{wheel} group, is allowed. The SHA-256
167 @acronym{TLS} fingerprint hash @code{#ABCDEF} is also allowed.  No users other than an
168 @var{invoking_user} are allowed access to the @code{child} element.
170 The first user listed in the @acronym{ACL} is considered the owner of the
171 element. This determines which clients may modify an @var{_acl} attribute and
172 store content for an element. An @var{invoking_user} may always modify an 
173 @acronym{ACL}.
175 @c    Node,     Next,    Previous, Up 
176 @node Cache Control, Invoking, Access Control, Top 
177 @chapter Cache Control
179 @mancont
180 @mansect cache notes
181 While @command{pwmd} has its own cache settings for an @acronym{XML} document,
182 @command{gpg-agent} has cache settings for the keys used for crypto operations
183 of a data file. Specifically the @option{ignore-cache-for-signing},
184 @option{default-cache-ttl} and @option{max-cache-ttl} options. These
185 @command{gpg-agent} options may need to be adjusted depending on your usage
186 needs. For example, the @code{OPEN} command may not require a passphrase to
187 open a data file due to the gpg-agent having a cached key even though the
188 @code{ISCACHED} command returns an error indicating the data file is not
189 cached; which usually means a passphrase would be required. Keys for symmetric
190 data files are never kept in the @command{gpg-agent} cache regardless of
191 @command{gpg-agent} cache settings.
193 A copy-on-write operation is done for commands that modify the document; the
194 client that invoked the command will work on a copy of the in-memory document.
195 The first client to @code{SAVE} the changes to disk will require other clients
196 to reopen the data file due to the checksum being updated.
198 @c    Node,     Next,    Previous, Up 
199 @node Invoking, Configuration, Cache Control, Top 
200 @chapter Invoking @command{pwmd} 
202 @mansect options
203 @command{pwmd} uses GpgME for encryption, decryption and signing of the
204 OpenPGP data file. GpgME itself makes use of @command{gpg} for these
205 operations so some configuration of @command{gpg} may be needed.  Pwmd spawns
206 a separate @command{gpg-agent} process when @var{gpg_homedir}
207 (@pxref{Configuration}) is not set to an instance of an already running
208 gpg-agent. Any @command{gpg} configuration options that you need set should be
209 put in @var{~/.pwmd/.gnupg/gpg.conf} or the @var{gpg.conf} file located in
210 @var{gpg_homedir}. The same is true for the @var{gpg-agent.conf} file to set
211 any required @command{gpg-agent} options.
213 It is recommended to pass the @option{--allow-preset-passphrase}
214 option to @command{gpg-agent}. Doing so allows @command{pwmd}
215 cache pushing on startup. It is also recommended to pass the
216 @option{--allow-loopback-pinentry} to @command{gpg-agent} (this is the default
217 as of gnupg-2.1.15). This option allows a passphrase to be inquired from
218 @command{pwmd} when a @command{pinentry} is unavailable to the client
219 (@pxref{TLS}).
221 If you would like to use a keypair from your default gnupg keyring located in
222 ~/.gnupg, but would still like to use a separate gpg-agent process (the
223 default), you would need to first export the public key from the default
224 keyring then import it into the keyring that pwmd uses. You can do this by
225 first exporting the public key, then use the @option{--homedir ~/.pwmd/.gnupg}
226 option of @command{gpg} to import it into the new keyring. For private keys,
227 you would need to copy the private key associated with the exported public key
228 to @var{~/.pwmd/.gnupg/private-keys-v1.d}. If the private key is stored on
229 a smartcard you can also use the @code{KEYINFO --learn} command
230 (@pxref{KEYINFO}).
232 @cindex Running @command{pwmd} 
233 @command{pwmd} is executed as follows: 
235 @example 
236 pwmd @var{options} [ file1 ] [ @dots{} ]
237 @end example
239 Non-option arguments are data files to cache upon startup. When the data file
240 requires a passphrase for decryption a @command{pinentry} will prompt either
241 on the current TTY or from an X11 window when the @env{DISPLAY}
242 environment variable is set. @xref{Pinentry}.
244 @cindex Options 
245 @cindex Arguments 
246 The following command line options are supported:
248 @cindex Getting help 
249 @table @samp 
250 @item --debug protocol:level[,protocol:level]
251 Enable debugging output. This option can output sensitive information such as
252 passphrases and secret keys so care should be taken where the output gets
253 written to. The @var{protocol} is a single character representing the protocol
254 to log. Use @code{a} for @code{libassuan} with @var{level} being one or more
255 character flags: @code{i} for init, @code{x} for context, @code{e} for engine,
256 @code{d} for data, @code{s} for system IO or @code{c} for control.  To debug
257 @code{gpgme} use @code{g} as the @var{protocol} with @var{level} being an
258 integer from @code{1} to @code{9}. To enable @acronym{TLS} debugging output
259 use @code{t} as the @var{protocol} with @var{level} being an integer from
260 @code{1} to @code{9}. A value over @code{10} will enable all @acronym{TLS}
261 debugging output with @code{1} being the default.
263 @item --homedir directory
264 The root directory where pwmd will store its data and temporary files.  The
265 default is @file{~/.pwmd}.
267 @item --rcfile, -f rcfile
268 Specify an alternate configuration file. The default is
269 @file{~/.pwmd/config}.
271 @item --kill
272 Terminate an existing instance of pwmd. The process to terminate is determined
273 from the @option{--homedir} and @option{--rcfile} options.
275 @item --import, -I filename|-
276 Imports the @acronym{XML} @var{filename}. When @var{filename} is @code{-} the
277 @acronym{XML} is read from @code{stdin}. The @acronym{XML} file should be in conformance to
278 the @command{pwmd} @acronym{DTD} (@pxref{Introduction}). You will be prompted for
279 a passphrase to encrypt with.  The output is written to the filename specified
280 with @option{--outfile}. To make use of the imported data, place the output
281 file in @file{~/.pwmd/data}.
283 @item --output, -o filename|-
284 When importing, write the encrypted data file to @var{filename}. When
285 @var{filename} is @code{-} output will be written to @code{stdout}.
287 @item --passphrase-file, -k filename"
288 Obtain the passphrase to use when importing from the specified @var{filename}.
290 @item --keyid fingerprint[,fingerprint,...]
291 Specifies the fingerprint of the encryption key to use as a recipient when
292 importing. When not specified a new key-pair will be created.
294 @item --sign-keyid fingerprint
295 Specifies the fingerprint of the signing key to use for signing of the data
296 file when importing.  When not specified the signing key of the generated
297 key-pair or the signing key of the @option{--keyid} option will be used.
299 @item --symmetric, -s
300 Use symmetric or conventional encryption rather than pubic key encryption when
301 importing.  Signing is still possible by using the @option{--sign-keyid}
302 option. By default no signing is done when specifying this option.
304 @item --userid string
305 When importing, the user id used to identify the generated key. This should be
306 in the form @code{First Last <email>}.
308 @item --algo string
309 When importing, the algorithm to use when generating the new key pair. The
310 default is determined by @command{gpg}.
312 @item --expire seconds
313 When importing, the time, in seconds since epoch, when the generated key will
314 expire. Specifying @code{0} will never expire the key. The default is three
315 years.
317 @item --no-passphrase
318 When importing, don't require a passphrase for the generated key.
320 @item --disable-dump
321 Disable the @code{XPATH}, @code{XPATHATTR}, @code{LIST} and @code{DUMP}
322 protocol commands (@pxref{Commands}). This overrides any
323 @var{disable_list_and_dump} configuration parameter (@pxref{Configuration}).
325 @item --no-fork, -n
326 Run as a foreground process and do not fork into the background.
328 @item --force
329 Ignore cache pushing failures on startup. By default, @command{pwmd} will exit
330 if an error occurred due to an invalid passphrase or other error.
332 @item --version
333 Show the version, copyright and compile time features and exit.
335 @item --help 
336 Print a summary of options.
337 @end table
338 @manpause
340 @c    Node,     Next,    Previous, Up 
341 @node Configuration, TLS, Invoking, Top 
342 @chapter @command{pwmd} configuration file options
343 @mancont
344 @mansect configuration file
345 If no configuration file is specified with the @command{pwmd} @option{-f}
346 command line option, @command{pwmd} will read @file{~/.pwmd/config} if it
347 exists, and if not, will use defaults.  Blank lines and lines beginning with
348 @samp{#} are ignored. Some parameters may have data file specific settings by
349 placing them in a file section. A file section is declared by surrounding the
350 filename with braces (i.e., @samp{[filename]}).  Global options may be
351 specified in the @code{global} section @samp{e.g., [global]} and are the
352 default options for new or unspecified file sections.
354 A tilde @code{~} will be expanded to the home directory of the user starting
355 @command{pwmd} when contained in a parameter whose value is a filename.
357 @cindex Reloading the configuration file
358 The configuration file can be reloaded by sending the @emph{SIGHUP} signal to
359 a @command{pwmd} process. Some security sensitive settings may not be changed
360 until @command{pwmd} is restarted.
362 @cindex Global configuration options
363 The following options are only for use in the @code{[global]} section:
365 @table @samp 
366 @item socket_path = /path/to/socket
367 Listen on the specified socket. The default is @file{~/.pwmd/socket}.
369 @item socket_perms = octal_mode
370 Permissions to set after creating the socket. This will override any
371 @cite{umask(2)} setting.
373 @item backlog = integer
374 The number of connections to queue. When this limit is reached then new
375 connections will be refused. The default is @code{128}.
377 @item invoking_user = [-!]user,[-!]@@group,[-!]#SHA-256,...
378 This parameter is not to be confused with setuid or setguid upon startup. It's
379 syntax is the same as the @code{allowed} parameter except that it is a list of
380 local usernames, group names and @acronym{TLS} fingerprint hashes that may use the
381 @command{XPATH}, @command{XPATHATTR} and @command{DUMP} commands (except when
382 disabled with the @code{disable_list_and_dump} option) and also who may modify
383 elements that have no @code{_acl} attribute or is not listed in an
384 @code{_acl}. It is similar to the system administrator root account but for a
385 data file and element paths (@pxref{Access Control}). The default is specified
386 at compile-time and also by default is the user @code{nobody}.
388 @item invoking_file = filename
389 A file containing one entry per line. An entry has the same syntax as the
390 @code{invoking_user} parameter. When both this parameter and the
391 @code{invoking_user} parameter are specified then the @code{invoking_user}
392 parameter will behave as if the @code{invoking_file} entries have been
393 appended to the @code{invoking_user} parameter value.
395 @item strict_open = boolean
396 When @code{true}, disallow creation of a new data file when the current client
397 is not an @code{invoking_user}. The default is @code{false}.
399 @item strict_kill = boolean
400 When @code{false}, the @code{KILL} command (@pxref{KILL}) will allow killing
401 another client that is not of the same @code{UID} or @acronym{TLS} fingerprint of
402 the current client and when not an @code{invoking_user}. The default us
403 @code{false}.
405 @item allowed = [-!]user,[-!]@@group,[-!]/path/to/exec,[+,][-!]#SHA-256,...
406 A comma separated list of local user names, group names or @acronym{TLS}
407 fingerprint SHA-256 hashes (in the case of a remote client) which are
408 allowed to connect.  Groups should be prefixed with a @samp{@@}. When not
409 specified only the user who started @command{pwmd} may connect. An entry in
410 the list may be prefixed with a @code{-} or @code{!} to prevent access. The
411 order of the list is important since a user may be a member of multiple
412 groups, for example.
414 Connections from local clients may also be limited by command name. A command
415 name is the full path to the execuatble on the filesystem. The command check
416 is done after all other user and group name checks. When no command is
417 specified all commands are allowed. When the connecting client is not of the
418 same @acronym{UID} as the user that invoked @command{pwmd} this feature is
419 ignored.
421 This parameter may also be specified in a filename section to allow or deny a
422 client to @code{OPEN} (@pxref{OPEN}) a data file. It also affects the cache
423 commands @code{CLEARCACHE} (@pxref{CLEARCACHE}) and @code{CACHETIMEOUT}
424 (@pxref{CACHETIMEOUT}). When not specified in a file section, any client
425 allowed to connect may also open any filename provided they can decrypt it.
426 Note that when specified in a file section that any @var{allowed} parameter in
427 the @code{global} seciton is not considered.
429 The following example would deny all users in group @code{primary} but
430 allow @code{username} who may be a member of @code{primary}. It will also
431 allow any @acronym{TLS} client except for the client with @acronym{TLS}
432 fingerprint hash @code{#ABCDEF}. For local connections, the connecting client
433 must be using the /usr/bin/pwmc program:
435 @example
436 allowed=-@@primary,username,+,!#ABCDEF,/usr/bin/pwmc
437 @end example
439 @item allowed_file = filename
440 A file containing one entry per line. An entry has the same syntax as the
441 @code{allowed} parameter except that a line beginning with a semicolon is
442 ignored. When both this parameter and the @code{allowed} parameter are
443 specified then the @code{allowed_file} entries will be appended to the
444 @code{allowed} parameter value.
446 @item encrypt_to = boolean
447 When @code{true} and @command{SAVE}'ing a data file, allow @command{gpg} to
448 append it's configured key to the list of recipients. The default is
449 @code{false} meaning that only keys specified with @command{SAVE}
450 @option{--keyid} are recipients.
452 @item always_trust = boolean
453 When @code{true}, allow encrypting to untrusted recipients or public
454 encryption keys. If you receive an error when @command{SAVE}'ing stating that
455 the public key is unusable, either enable this option or edit the keys' trust
456 value:
457 @example
458 gpg --homedir ~/.pwmd/.gnupg --edit-key <fingerprint>
459 @end example
460 The default is @code{false}.
462 @item gpg_homedir = path
463 The location where @command{gpg} will store its public and private keys and
464 configuration. The default is @file{HOMEDIR/.gnupg} where @var{HOMEDIR} is the
465 default (@file{~/.pwmd}) or the value specified on the command line with the
466 @option{--homedir} command line option (@pxref{Invoking}). If you want to use
467 your standard @command{gpg} keyring then set this to @file{~/.gnupg}. Note
468 that a new instance of @command{gpg-agent} will be started when @emph{not}
469 using the standard keyring and that any configuration options for
470 @command{gpg-agent} will need to placed in
471 @file{HOMEDIR/.gnupg/gpg-agent.conf}.
473 @item disable_mlockall = boolean
474 When set to @code{false}, @cite{mlockall(2)} will be called on startup.  This
475 will use more physical memory but may also be more secure since no swapping to
476 disk will occur. The default is @var{true}. If possible, use an encrypted swap
477 file or partition and leave this set to @var{true}.
479 @item log_path = /path/to/logfile
480 Logs informational messages to the specified file. The default is
481 @file{~/.pwmd/log}.
483 @item enable_logging = boolean
484 Enable or disable logging to @var{log_path}. The default is @code{false}.
486 @item log_keepopen = boolean
487 When set to @code{false}, the log file specified with @var{log_path} will be
488 closed after writing each line. The default is @code{true}.
490 @item syslog = boolean
491 Enable logging to @cite{syslog(8)} with facility @emph{LOG_DAEMON} and priority
492 @emph{LOG_INFO}. The default is @code{false}.
494 @item log_level = level
495 When @code{0}, only connections and errors are logged. When @code{1}, data
496 file recipients and signers are logged during @code{OPEN} (@pxref{OPEN}) and
497 @code{SAVE} (@pxref{SAVE}). When @code{2}, client commands are also logged.
498 The default is @code{0}.
500 @item kill_scd = boolean
501 Attempt to kill @command{scdaemon} after a client disconnects.  The default is
502 @code{false}.
504 @item disable_list_and_dump = boolean
505 When @code{true} the @code{XPATH}, @code{XPATHATTR}, @code{LIST} and
506 @code{DUMP} protocol commands (@pxref{Commands}) will be disabled.
508 @item cache_push = file1,file2
509 A comma separated list of filenames to be cached upon startup. @command{pwmd}
510 will prompt for the passphrase for each file unless specified with
511 @var{passphrase_file} parameter in a matching file section.
513 @item priority = integer
514 The priority or niceness of the server. The default is inherited from the
515 parent process.
517 @item lock_timeout = integer
518 The default timeout in tenths of a second before giving up while waiting for a
519 file lock and returning an error. The default is @code{50}.
521 @end table
523 @cindex Data file configuration options
524 @ifset manverb
526 @end ifset
527 The following options are defaults for new files when specified in the
528 @samp{global} section. When placed in a data file section they are options
529 specific to that data file only.
531 @table @samp 
532 @item require_save_key = boolean
533 Require the passphrase needed for signing before writing changes of the
534 document to disk regardless of the key cache status. The default is
535 @code{true}. This option compliments @command{gpg-agent} option
536 @option{--ignore-cache-for-signing} and is used as a fail-safe.
538 @item backup = boolean
539 Whether to create a backup of the data file when saving. The backup filename
540 has the @file{.backup} extension appended to the opened file. The default is
541 @code{true}. 
543 @item cache_timeout = seconds
544 The number of seconds to keep the cache entry for this file. If @code{-1}, the
545 cache entry is kept forever. If @code{0}, each time an encrypted file is
546 @code{OPEN}ed (@pxref{OPEN}) a passphrase will be required. The default
547 is @code{600} or 10 minutes.
549 @item passphrase_file = /path/to/filename
550 Obtain the passphrase to open the data file from @var{filename}. If specified
551 in the @samp{global} section then the @var{passphrase_file} is a default for
552 all data files. Note that if a client changes the passphrase for this data
553 file then the @var{passphrase_file} will need to be updated with the new
554 passphrase.
556 @item recursion_depth = integer
557 The maximum number of times to resolve a @code{_target} attribute for an
558 element in an element path (@pxref{Target Attribute}). An error is returned
559 when this value is exceeded.  The default is @code{100} but can be disabled by
560 setting to @code{0} (@emph{not recommended}).
562 @item allowed = [-]user,[-]@@group,[!]#TLSFINGERPRINT,...
563 Same parameter value as the @code{allowed} parameter mentioned above in
564 the @samp{[global]} section but grants or denies a client from opening a
565 specific data file. The default is to allow any client that is allowed to
566 connect.
568 @end table
569 @menu
570 * TLS::                   Remote connections over TLS.
571 * Pinentry::              Configuration file and defaults.
572 @end menu
574 @node TLS, Pinentry, Configuration, Configuration
575 @chapter Configuring remote connections over TLS.
576 @ifset manverb
578 @end ifset
579 In addition to connecting to @command{pwmd} via a Unix Domain Socket, remote
580 connections can also be made to @command{pwmd} over @acronym{TLS}.
581 Authentication is done by using X.509 client certificates that are signed with
582 the same Certificate Authority (CA) as the server certificate.
584 The CA certificate is expected to be found in
585 @file{~/.pwmd/ca-cert.pem} while the @command{pwmd} server certificate and key
586 file should be put in @file{~/.pwmd/server-cert.pem} and
587 @file{~/.pwmd/server-key.pem}, respectively.
589 See the documentation of @command{certtool} or @command{openssl} for details
590 about creating self-signed certificates.
592 The following @acronym{TLS} configuration options are available:
594 @table @samp 
595 @item enable_tcp = boolean
596 Whether to enable @acronym{TCP}/@acronym{TLS} server support. If enabled, both @acronym{TCP} and the local
597 unix domain socket will listen for connections. The default is
598 @code{false}.
600 @item tcp_port = integer
601 The @acronym{TCP} port to listen on when @var{enable_tcp} is @code{true}. The default is
602 @code{6466}.
604 @item tcp_bind = string
605 The internet protocol to listen with. Must be one of @code{ipv4}, @code{ipv6}
606 or @code{any} to listen for both IPv4 and IPv6 connections. The default is
607 @code{any}.
609 @item tcp_interface = string
610 Only useful if running as root.
612 @item tls_timeout = seconds
613 The number of seconds to wait for a read() or write() call on a
614 @acronym{TLS} client file descriptor to complete before returning an
615 error. The default is @var{300}.
617 @item keepalive_interval = seconds
618 Send a keepalive status message to an idle remote client.  An idle
619 client is one that is not in a command. The purpose of this status
620 message is to disconnect a hung remote client and release any file mutex
621 locks so another client may open the same data file. The default is @code{60}.
623 @item tcp_require_key = boolean
624 When @code{true}, require the remote client to provide the passphrase to open
625 a data file even if the file is cached.  This option is a default for all
626 files when specified in the @samp{[global]} section. The default is
627 @code{false}.
629 @item tls_cipher_suite = string
630 The GnuTLS cipher suite and protocol to use. See the GnuTLS documentation for
631 information about the format of this string. The default is
632 @code{SECURE256:SECURE192:SECURE128:-VERS-SSL3.0:-VERS-TLS1.0:-VERS-TLS1.1:-AES-128-CBC:-AES-256-CBC}.
634 @item tls_dh_params_file = filename
635 The PEM encoded filename containing DH parameters. If not specified
636 then DH algorithms will not be available to the client. See the
637 @command{openssl dhparam} or @command{certtool} manual pages for details about
638 generating this file.
640 Note that SIGHUP will not reload this file once @acronym{TLS} support has been enabled.
641 You will need to restart @command{pwmd} for changes to take effect.
643 @item tls_use_crl = boolean
644 When @code{true}, enable the use of @option{tls_crl_file}. The default is
645 @code{false}.
647 @item tls_crl_file = filename
648 This file is an X.509 Certificate Revocation List (@acronym{CRL}) and can be
649 used to deny clients by adding client certificates to it. @command{pwmd} will
650 need to be restarted to recognize any changes to this file.  When not
651 specified the default of @file{~/.pwmd/crl.pem} will be used when
652 @option{tls_use_crl} is @code{true}.
654 @item tls_ca_file = filename
655 The filename of the @acronym{CA} certificate to use. When not specified the
656 default of @file{~/.pwmd/ca-cert.pem} will be used.
658 @item tls_server_cert_file = filename
659 The filename of the server certificate to use. When not specified the default
660 of @file{~/.pwmd/server-cert.pem} will be used.
662 @item tls_server_key_file = filename
663 The key filename of the server certificate to use. When not specified the
664 default of @file{~/.pwmd/server-key.pem} will be used.
666 @end table
668 @node Pinentry, Commands, TLS, Configuration
669 @chapter Pinentry configuration
670 @mansect Pinentry
671 The @command{pinentry} program is used to prompt the user for passphrase
672 input or as a confirmation dialog; it needs to know where to prompt for
673 the input; from a terminal or an X11 display.
675 It is the responsibility of the client to tell @command{pinentry} about the
676 terminal or X11 display before requiring the input. This is done with the
677 @command{OPTION} command (@pxref{OPTION}) to either set or unset needed
678 @command{pwmd} environment variables and by using the
679 @command{gpg-connect-agent} program. Please read it's documentation about the
680 @emph{UPDATESTARTUPTTY} command.
682 @ifclear isman
683 @c    Node,     Next,    Previous, Up
684 @node Commands, Bulk Commands, Pinentry, Top
685 @chapter Protocol commands and their syntax
686 @include menu.texi
687 @include commands.texi
689 @c    Node,     Next,    Previous, Up
690 @node Bulk Commands, Status Messages, Commands, Top
691 @chapter Running multiple commands in sequence
692 Multiple commands may be run in sequence by using the @code{BULK} command
693 (@pxref{BULK}). Using this feature may speed up remote connections since less
694 socket IO is needed. The @code{BULK} command uses an @emph{INQUIRE} to obtain
695 an canonical s-expression of commands to be run. The s-expression syntax is as
696 follows:
698 @example
699 (2:id<I>:<id> <P>:<prot><D>:[<data>] [2:rc<R>:<code>[|<code>...](2:id...) | 2:id...])
700 @end example
702 Each token is prefixed with an unsigned integer that specifies the length of
703 the token, followed by a colon '@code{:}', followed by the token itself. Pwmd
704 uses token pairs to create a @emph{name=value} relationship. Whitespace is
705 allowed between token pairs. For example, the following is valid:
707 @example
708 ( 2:id 7:FirstID 4:LIST0: 2:rc 1:0 (2:id6:Second 7:GETINFO7:version))
709 @end example
711 The @code{id} token begins a new command and requires an @var{<id>} token
712 of length @var{<I>} to uniquely identify this command. The next token pair is
713 the protocol command name, without any command arguments, of length @var{<P>}
714 to run followed by a colon '@code{:}', followed by the command @var{<prot>}
715 itself, followed by the length @var{<D>} of both command arguments and data,
716 followed by a colon '@code{:}' and finally the @var{<data>} itself.  If no
717 arguments or data are needed for the command, set the length of the data
718 @var{<D>} to @code{0} and append the required colon '@code{:}'.
720 A new command enclosed in parentheses may be run when the previous command
721 returns an error code that matches the @var{<code>} token of length @var{<R>}
722 by appending @var{rc} tokens to the end of the previous commands @var{<data>}
723 token. You may also test another return code for the previous command by
724 placing the next @var{rc} token at the end of the closing parentheses of the
725 previous return code command.
727 Multiple @code{rc} @var{code}'s may be specified for a single command by
728 separating them with a pipe @code{|} character. This lets you specify an
729 @emph{if-this-and-that} expression for a commands return code.
731 If another command is to be run after the previous and does not specify an
732 @var{rc} token, the return value is ignored for the previous command and the
733 next command is run.  There is no limit on the number of commands or
734 sub-commands except for system memory.
736 After inquiring the commands to be run, @code{BULK} will run each command with
737 @var{<data>} as its argument and store the result code and data of the command
738 in a @code{bulk-result} canonical s-expression of the syntax:
740 @example
741 (11:bulk-result2:id<I>:<id>2:rc<R>:<code><D>:[<data>][2:id...])
742 @end example
744 The @code{11:bulk-result} token begins the result of all commands. The
745 @var{<id>} token of length @var{<I>} is the same that was associated with the
746 command from the @emph{INQUIRE}'d syntax and is prefixed with @code{2:id}. The
747 return code of the command is prefixed with @code{2:rc} followed by the length
748 @var{<R>} of the unsigned integer @var{<code>} then the return @var{<code>}
749 itself.  If the command returned any @var{<data>}, it is prefixed with a
750 length @var{<D>} and immediately following the return @var{<code>}. Otherwise,
751 @var{<D>} will be @code{0} and followed by a colon '@code{:}'.
754 @c    Node,     Next,    Previous, Up 
755 @node Status Messages, Target Attribute, Bulk Commands, Top
756 @chapter Status messages and their meanings
757 Some commands send status messages to inform the client about certain
758 operations or as a progress indicator.  Status messages begin with a
759 @code{KEYWORD} followed by a status description for status messages that
760 require it. What status messages are sent, when, and how often may depend on
761 configuration settings (@pxref{Configuration}).
763 @multitable @columnfractions .20 .25 .55
764 @headitem Message @tab Parameters @tab Description
765 @item CACHE
766 @cindex CACHE
767 @tab @code{<integer>}
768 @tab The number of cached documents. Sent to each client after connecting
769 (@pxref{GETINFO}) and after every cache modification.
771 @item CLIENTS
772 @cindex CLIENTS
773 @tab @code{<integer>}
774 @tab The number of connected clients (@pxref{GETINFO}). Sent to each client
775 when another client either connects or disconnects.
777 @item DECRYPT
778 @cindex DECRYPT
779 @tab
780 @tab Sent to the current client during a decrypt operation. How often this
781 status message is sent is determined by the @code{keepalive_interval}
782 (@pxref{Configuration}) setting.
784 @item ENCRYPT
785 @cindex ENCRYPT
786 @tab
787 @tab Sent to the current client during an encrypt operation. How often this
788 status message is sent is determined by the @code{keepalive_interval}
789 (@pxref{Configuration}) setting.
791 @item GENKEY
792 @cindex GENKEY
793 @tab @code{[<sigkey_fpr> <pubkey_fpr>]}
794 @tab Sent to the current client during key generation. How often this
795 status message is sent is determined by the @code{keepalive_interval}
796 (@pxref{Configuration}) setting. The @var{sigkey_fpr} and @var{pubkey_fpr}
797 parameters are added when key generation has completed.
799 @item INQUIRE_MAXLEN
800 @cindex INQUIRE_MAXLEN
801 @tab @code{<bytes>}
802 @tab Sent to the client from @command{gpg-agent} when inquiring data. This
803 specifies the maximum number of bytes allowed for the client to send and
804 should not be exceeded.
806 @item KEEPALIVE
807 @cindex KEEPALIVE
808 @tab
809 @tab Sent to each idle client every @var{keepalive_interval}
810 (@pxref{Configuration}) seconds.
812 @item LOCKED
813 @cindex LOCKED
814 @tab
815 @tab Sent to the current client when another client is holding the lock for
816 the mutex associated with a file. How often this status message is sent is
817 determined by the @code{keepalive_interval} (@pxref{Configuration}) setting.
819 @item NEWFILE
820 @cindex NEWFILE
821 @tab
822 @tab Sent to the current client when the opened (@pxref{OPEN}) file does not
823 exist on the file-system.
825 @item XFER
826 @cindex XFER
827 @tab @code{<sent> <total>}
828 @tab Sent to the current client when transferring data. It has two space
829 delimited arguments. The first being the current amount of bytes transferred
830 and the other being the total bytes to be transferred. Note that since version
831 @code{3.1.1} of @command{pwmd} this status message is sent only once and
832 before the transfer begins with the @var{total} argument set to the size of the
833 data and the @var{sent} argument set to @code{0} leaving it to the client to
834 determine the progress of the transfer as the data is received.
836 @item STATE
837 @cindex STATE
838 @tab @code{<client_id> <state>}
839 @tab Sent to each client to indicate that @var{client_id} has changed to
840 @var{state} (@pxref{GETINFO} for client states). For a client to receive
841 another clients state the option @var{CLIENT-STATE} must be set.
842 @xref{OPTION} command.
844 @item EXPIRE
845 @cindex EXPIRE
846 @tab @code{<epoch_seconds> <epoch_future>|0}
847 @tab Sent to the current client when @code{GET} (@pxref{GET}) encounters an
848 @code{_expire} (@pxref{Other Attributes}) attribute that is in the past or when
849 @code{STORE} (@pxref{STORE}) updates the @code{_expire} attribute from the
850 @code{_age} attribute value. The second field will be @code{0} when @code{GET}
851 sends this status message.  Otherwise the second field is the time the next
852 expiry will be.
854 @item PASSPHRASE_HINT
855 @cindex PASSPHRASE_HINT
856 @tab <keyid> <userid>
857 @tab Forwarded from @code{GpgME}. Contains information that is useful in a
858 @command{pinentry}. Only sent when pinentry is disabled (@pxref{OPTION}).
860 @item PASSPHRASE_INFO
861 @cindex PASSPHRASE_INFO
862 @tab <flags> ...
863 @tab Forwarded from @code{GpgME}. Contains information that is useful in a
864 @command{pinentry}. Only sent when pinentry is disabled (@pxref{OPTION}).
866 @item REHANDSHAKE
867 @cindex REHANDSHAKE
868 @tab
869 @tab Sent to each @acronym{TLS} client just before performing a cipher renegotiation
870 after a SIGHUP signal was received.
872 @item BULK
873 @cindex BULK
874 @tab @code{BEGIN|END <command id>}
875 @tab Sent to the current client before and after the @code{BULK} command
876 (@pxref{BULK}) runs each command. The @var{<command id>} is the same that was
877 associated with the command in the s-expression syntax.
878 @end multitable
880 @c    Node,     Next,    Previous, Up 
881 @node Target Attribute, Other Attributes, Status Messages, Top
882 @chapter The @code{target} attribute
883 @cindex target attribute
884 A @emph{case sensitive} attribute named @code{_target} is treated specially
885 when found in each element of an element path. This attribute, like other
886 element attributes, is created or modified with the @code{ATTR} command
887 (@pxref{ATTR}). The value of this attribute is an existing element path
888 somewhere in the document.  If you are familiar with @acronym{XML} entities or
889 maybe the HTML @code{id} or @code{_target} attributes or a symbolic link
890 in a file-system, you may find this attribute behaves similar to any of those.
892 To create a @code{_target} attribute use the following syntax:
894 @example
895 ATTR SET _target element[@code{TAB}child[..]] element[@code{TAB}child[..]]
896 @end example
898 Note the single space between the two element paths. The first element path is
899 where the @code{_target} attribute will be created. If the element path does
900 not exist then it will be created.  This is the only time the @code{ATTR}
901 (@pxref{ATTR}) command will create elements. The attribute is created in the
902 final element of the element path.
904 The second element path is the destination of where you want the first element
905 path to resolve to. When an element path is passed as an argument to a
906 protocol command @command{pwmd} looks for a @code{_target} attribute when
907 resolving each element and, if found, "jumps" to the attribute value and
908 continues resolving any remaining elements a commands element path.
910 When an element of a element path is removed that a @code{_target} attribute
911 resolves to then an error will occur when trying to access that element. You
912 may need to either update the @code{_target} attribute value with a new element
913 path or remove the attribute entirely.
915 Clients should be careful of creating @code{_target} loops, or targets that
916 resolve to themselves. See the @var{recursion_depth} (@pxref{Configuration})
917 configuration parameter for details.
919 The @code{REALPATH} command (@pxref{REALPATH}) can be used to show the element
920 path after resolving all @code{_target} attributes.
922 @emph{Note that when setting this attribute any children of the element will
923 be removed.}
926 @c    Node,     Next,    Previous, Up 
927 @node Other Attributes, Key Expiration, Target Attribute, Top
928 @chapter Other special attributes
929 @cindex special attributes
930 In addition to the @code{_target} attribute (@pxref{Target Attribute}), there
931 are a few other attributes that are specially handled by @command{pwmd}. The
932 first is the @code{_ctime} attribute which is set to the current time when an
933 element is created. Next is the @code{_mtime} attribute which is created when
934 an element is created and also updated when an element is modified. Neither of
935 these attributes may be modified by the client. The @code{_acl} attribute
936 controls access to the element, beit modifying or accessing element content,
937 or descending into child elements.  @xref{Access Control} for details. The
938 @code{_name} attribute contains the name of an element.
940 The above mentioned attributes are considered reserved attribute names.
941 Reserved attributes are treated specially when a @code{_target} attribute is
942 found for the current element. The @code{ATTR LIST} command will show these
943 attribute values for the current element and not the attribute values for the
944 resolved @code{_target} element. All other non-reserved attributes for the
945 resolved @code{_target} are appended to the @code{ATTR LIST} command output.
946 Other @code{ATTR} commands (@pxref{ATTR}) behave as usual. You can, for
947 example, @code{ATTR DELETE} a non-reserved attribute for an element that
948 contains a @code{_target} attribute. The resolved target elements' attribute
949 will be removed rather than the element containing the @code{_target}
950 attribute.
952 Another specially handled attribute is the @code{_expire} attribute. This
953 attribute value, like the @code{_ctime} and @code{_mtime} attributes, is a
954 timestamp. But this timestamp is usually in the future and for use with the
955 @code{GET} (@pxref{GET}) and @code{STORE} (@pxref{STORE}) commands. When the
956 @code{GET} command is issued, it checks for an @code{_expire} attribute an
957 compares its' value with the current time. If the @code{_expire} timestamp is
958 in the past then a status message is sent (@pxref{Status Messages}) to inform
959 the client that the element content should be updated.  When the content for
960 an element containing an @code{_expire} attribute is set when using the
961 @code{STORE} command, the value of the @code{_age} attribute is added to the
962 current time and the @code{_expire} attribute value is updated.  When no
963 @code{_age} attribute is found, no modification is done of the @code{_expire}
964 attribute.
967 @c    Node,     Next,    Previous, Up 
968 @node Key Expiration, Signals, Other Attributes, Top
969 @chapter Key Expiration
970 @cindex key expiration
971 When a key used for signing a data file has expired there is no indication
972 until the next @code{SAVE} command is sent. The command will fail since one
973 cannot sign the data file with an expired key. The client will need to either
974 use a different key for signing by either specifying an existing non-expired
975 key, generate a new key, or change the expire time of the existing key with
976 @command{gpg}.
978 To change the expiration of the currently used signing key with @command{gpg},
979 use the @code{KEYINFO} command (@pxref{KEYINFO}) to obtain the fingerprint of
980 the signing key of the current data file, then change the expire time with
981 @command{gpg}:
983 @example
984 gpg --homedir ~/.pwmd/.gnupg --edit-key <fingerprint>
985 @end example
987 Then use the @code{expire} command to set the new key expire date. When
988 finished, use the @code{save} command to save your changes.
991 @c    Node,     Next,    Previous, Up
992 @node Signals, Concept Index, Key Expiration, Top
993 @chapter Recognized signals
994 @end ifclear
995 @mansect signals
996 Sending the @emph{SIGHUP} signal to a @command{pwmd} process will reload the
997 configuration file and sending @emph{SIGUSR1} will clear the entire file
998 cache.
1000 @mansect see also
1001 @ifset manverb
1002 .BR pwmd-dump (1)
1004 .BR gpg-agent (1)
1006 .BR pinentry (1)
1008 .BR gpg (1)
1009 @end ifset
1011 @ifclear isman
1012 @c    Node,     Next,    Previous, Up 
1013 @node Concept Index, , Signals, Top 
1014 @unnumbered Concept Index
1017 @c @printindex cp
1018 @shortcontents 
1019 @contents 
1020 @end ifclear
1021 @bye