BULK: Fix size calculation and allow whitespace.
[pwmd.git] / doc / pwmd.texi
blobc487603fb3cd61fa5721d011d22f3dbd8cc945f8
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 univeral 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
70 that is stored in an OpenPGP encrypted XML document. It mimics a
71 filesystem in a lot of ways including per element ACL's, but also has
72 the advantage of remote connections over TLS and a document cache. The
73 document cache is needed for a data file encrypted with keys stored on a
74 smartcard.
76 The server uses the Assuan protocol (@inforef{Implementation,,assuan}) which
77 is the same used by @command{gpg-agent}, @command{pinentry} and
78 @command{scdaemon}. It also uses @cite{libgpg-error} for error reporting with
79 @var{GPG_ERR_SOURCE_USER_1} being the error source.
80 @ifset isman
82 You can import an existing @command{pwmd} version @var{3.0.x} data file by
83 dumping the raw XML data with
84 .BR pwmd-dump(1)
85 to a file, then
86 importing that file by using @command{pwmd}'s @option{--import} command line
87 option. Please
88 see the
89 .BR pwmd-dump(1)
90 manual page for details.
92 It is recommended to read the texinfo documentation of @command{pwmd}
93 since it contains protocol commands and syntax and other details not
94 found here.
95 @end ifset
96 @manpause
98 The XML document uses the following DTD:
100 @example
101     <?xml version="1.0"?>
102     <!DOCTYPE pwmd [
103     <!ELEMENT pwmd (element*)>
104     <!ATTLIST element _name CDATA #REQUIRED>
105     ]>
106 @end example
108 The @code{pwmd} element is the document root node while all other elements
109 of the document have the name @code{element} with an attribute @code{_name}
110 whose value uniquely identifies the element at the current element tree depth.
111 It is done this way to avoid XML parsing errors for commonly used
112 characters.  A URL for example would be an invalid XML element
113 since the URI contains a @samp{:} which is also the XML
114 namespace separator.
116 As mentioned, an element name must be unique for the current element tree
117 depth. You cannot have two elements containing the same @code{_name} attribute
118 value. @command{pwmd} will stop searching for an element of an @emph{element
119 path} at the first match then continue searching for the next element of the
120 element path beginning at the child node of the matched element.
122 An @emph{element path} is a @code{TAB} delimited character string where each
123 @code{TAB} separates each element in the path.  For example, the element path
124 @code{a@code{TAB}b@code{TAB}c} has the following XML document 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 ACL to grant or limit access to directories or
146 files for a specific user or group, @command{pwmd} can limit a local user,
147 group or a TLS connection to a specific element path. This is done by
148 storing an 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 TLS fingerprint hash is prefixed with a
151 @code{#}.
153 Access is denied for all users that are not in the 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 ACL for each element in an element path
156 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 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 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 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 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 do 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.
191 A copy-on-write operation is done for commands that modify the document; the
192 client that invoked the command will work on a copy of the in-memory document.
193 The first client to @code{SAVE} the changes to disk will require other clients
194 to reopen the data file do to the checksum being updated.
196 @c    Node,     Next,    Previous, Up 
197 @node Invoking, Configuration, Cache Control, Top 
198 @chapter Invoking @command{pwmd} 
200 @mansect options
201 @command{pwmd} uses GpgME for encryption, decryption and signing of the
202 OpenPGP data file. GpgME itself makes use of @command{gpg} for these
203 operations so some configuration of @command{gpg} may be needed.  Pwmd spawns
204 a separate @command{gpg-agent} process when @var{gpg_homedir}
205 (@pxref{Configuration}) is not set to an instance of an already running
206 gpg-agent. Any @command{gpg} configuration options that you need set should be
207 put in @var{~/.pwmd/.gnupg/gpg.conf} or the @var{gpg.conf} file located in
208 @var{gpg_homedir}. The same is true for the @var{gpg-agent.conf} file to set
209 any required @command{gpg-agent} options.
211 It is recommended to pass the @option{--allow-preset-passphrase}
212 option to @command{gpg-agent}. Doing so allows @command{pwmd}
213 cache pushing on startup. It is also recommended to pass the
214 @option{--allow-loopback-pinentry} to @command{gpg-agent} (this is the default
215 as of gnupg-2.1.15). This option allows a passphrase to be inquired from
216 @command{pwmd} when a @command{pinentry} is unavailable to the client
217 (@pxref{TLS}).
219 If you would like to use a keypair from your default gnupg keyring located in
220 ~/.gnupg, but would still like to use a separate gpg-agent process (the
221 default), you would need to first export the public key from the default
222 keyring then import it into the keyring that pwmd uses. You can do this by
223 first exporting the public key, then use the @option{--homedir ~/.pwmd/.gnupg}
224 option of @command{gpg} to import it into the new keyring. For private keys,
225 you would need to copy the private key associated with the exported public key
226 to @var{~/.pwmd/.gnupg/private-keys-v1.d}. If the private key is stored on
227 a smartcard you can also use the @code{KEYINFO --learn} command
228 (@pxref{KEYINFO}).
230 @cindex Running @command{pwmd} 
231 @command{pwmd} is executed as follows: 
233 @example 
234 pwmd @var{options} [ file1 ] [ @dots{} ]
235 @end example
237 Non-option arguments are data files to cache upon startup. When the data file
238 requires a passphrase for decryption a @command{pinentry} will prompt either
239 on the current TTY or from an X11 window when the @env{DISPLAY}
240 environment variable is set. @xref{Pinentry}.
242 @cindex Options 
243 @cindex Arguments 
244 The following command line options are supported:
246 @cindex Getting help 
247 @table @samp 
248 @item --debug protocol:level[,protocol:level]
249 Enable debugging output. This option can output sensitive information such as
250 passphrases and secret keys so care should be taken where the output gets
251 written to. The @var{protocol} is a single character representing the protocol
252 to log. Use @code{a} for @code{libassuan} with @var{level} being one or more
253 character flags: @code{i} for init, @code{x} for context, @code{e} for engine,
254 @code{d} for data, @code{s} for system IO or @code{c} for control.  To debug
255 @code{gpgme} use @code{g} as the @var{protocol} with @var{level} being an
256 integer from @code{1} to @code{9}. To enable @acronym{TLS} debugging output
257 use @code{t} as the @var{protocol} with @var{level} being an integer from
258 @code{1} to @code{9}. A value over @code{10} will enable all @acronym{TLS}
259 debugging output with @code{1} being the default.
261 @item --homedir directory
262 The root directory where pwmd will store its data and temporary files.  The
263 default is @file{~/.pwmd}.
265 @item --rcfile, -f rcfile
266 Specify an alternate configuration file. The default is
267 @file{~/.pwmd/config}.
269 @item --kill
270 Terminate an existing instance of pwmd. The process to terminate is determined
271 from the @option{--homedir} and @option{--rcfile} options.
273 @item --import, -I filename|-
274 Imports the XML @var{filename}. When @var{filename} is @code{-} the
275 XML is read from stdin. The XML file should be in conformance to
276 the @command{pwmd} DTD (@pxref{Introduction}). You will be prompted for
277 a passphrase to encrypt with.  The output is written to the filename specified
278 with @option{--outfile}. To make use of the imported data, place the output
279 file in @file{~/.pwmd/data}.
281 @item --output, -o filename|-
282 When importing, write the encrypted data file to @var{filename}. When
283 @var{filename} is @code{-} output will be written to stdout.
285 @item --passphrase-file, -k filename"
286 Obtain the passphrase to use when importing from the specified @var{filename}.
288 @item --keyid fingerprint[,fingerprint]
289 Specifies the fingerprint of the encryption key to use as a recipient when
290 importing. When not specified a new key-pair will be created.
292 @item --sign-keyid fingerprint
293 Specifies the fingerprint of the signing key to use for signing of the data
294 file when importing.  When not specified the signing key of the generated
295 key-pair or the signing key of the @option{--keyid} option will be used.
297 @item --symmetric, -s
298 Use symmetric or conventional encryption rather than pubic key encryption when
299 importing.  Signing is still possible by using the @option{--sign-keyid}
300 option. By default no signing is done when specifying this option.
302 @item --userid string
303 When importing, the user id used to identify the generated key. This should be
304 in the form @code{First Last <email>}.
306 @item --algo string
307 When importing, the algorithm to use when generating the new key pair. The
308 default is determined by @command{gpg}.
310 @item --expire seconds
311 When importing, the time, in seconds since epoch, when the generated key will
312 expire. Specifying @code{0} will never expire the key. The default is three
313 years.
315 @item --no-passphrase
316 When importing, don't require a passphrase for the generated key.
318 @item --disable-dump
319 Disable the @code{XPATH}, @code{XPATHATTR}, @code{LIST} and @code{DUMP}
320 protocol commands (@pxref{Commands}). This overrides any
321 @var{disable_list_and_dump} configuration parameter (@pxref{Configuration}).
323 @item --no-fork, -n
324 Run as a foreground process and do not fork into the background.
326 @item --ignore, --force
327 Ignore cache pushing failures on startup. By default, @command{pwmd} will exit
328 if an error occurred do to an invalid passphrase or other error.
330 @item --version
331 Show the version, copyright and compile time features and exit.
333 @item --help 
334 Print a summary of options.
335 @end table
336 @manpause
338 @c    Node,     Next,    Previous, Up 
339 @node Configuration, TLS, Invoking, Top 
340 @chapter @command{pwmd} configuration file options
341 @mancont
342 @mansect configuration file
343 If no configuration file is specified with the @command{pwmd} @option{-f}
344 command line option, @command{pwmd} will read @file{~/.pwmd/config} if it
345 exists, and if not, will use defaults.  Blank lines and lines beginning with
346 @samp{#} are ignored. Some parameters may have data file specific settings by
347 placing them in a file section. A file section is declared by surrounding the
348 filename with braces (i.e., @samp{[filename]}).  Global options may be
349 specified in the @code{global} section @samp{e.g., [global]} and are the
350 default options for new or unspecified file sections.
352 A tilde @code{~} will be expanded to the home directory of the user starting
353 @command{pwmd} when contained in a parameter whose value is a filename.
355 @cindex Reloading the configuration file
356 The configuration file can be reloaded by sending the @emph{SIGHUP} signal to
357 a @command{pwmd} process. Some security sensitive settings may not be changed
358 until @command{pwmd} is restarted.
360 @cindex Global configuration options
361 The following options are only for use in the @code{[global]} section:
363 @table @samp 
364 @item socket_path = /path/to/socket
365 Listen on the specified socket. The default is @file{~/.pwmd/socket}.
367 @item socket_perms = octal_mode
368 Permissions to set after creating the socket. This will override any
369 @cite{umask(2)} setting.
371 @item backlog = integer
372 The number of connections to queue. When this limit is reached then new
373 connections will be refused. The default is @code{128}.
375 @item invoking_user = [-!]user,[-!]@@group,[-!]#SHA-256,...
376 This parameter is not to be confused with setuid or setguid upon startup. It's
377 syntax is the same as the @code{allowed} parameter except that it is a list of
378 local usernames, group names and TLS fingerprint hashes that may use the
379 @command{XPATH}, @command{XPATHATTR} and @command{DUMP} commands (except when
380 disabled with the @code{disable_list_and_dump} option) and also who may modify
381 elements that have no @code{_acl} attribute or is not listed in an
382 @code{_acl}. It is similar to the system administrator root account but for a
383 data file and element paths (@pxref{Access Control}). The default is the user
384 the executes @command{pwmd}.
386 @item invoking_file = filename
387 A file containing one entry per line. An entry has the same syntax as the
388 @code{invoking_user} parameter. When both this parameter and the
389 @code{invoking_user} parameter are specified then the @code{invoking_user}
390 parameter will behave as if the @code{invoking_file} entries have been
391 appended to the @code{invoking_user} parameter value.
393 @item strict_open = boolean
394 When @code{true}, disallow creation of a new data file when the current client
395 is not an @code{invoking_user}. The default is @code{false}.
397 @item strict_kill = boolean
398 When @code{false}, the @code{KILL} command (@pxref{KILL}) will allow killing
399 another client that is not of the same @code{UID} or TLS fingerprint of
400 the current client and when not an @code{invoking_user}. The default us
401 @code{false}.
403 @item allowed = [-!]user,[-!]@@group,[+,][-!]#SHA-256,...
404 A comma separated list of local user names, group names or TLS
405 fingerprint SHA-256 hashes (in the case of a remote client) who are
406 allowed to connect.  Groups should be prefixed with a @samp{@@}. When not
407 specified only the user who started @command{pwmd} may connect. A username,
408 group name or hash may also be prefixed with a @code{-} or @code{!} to prevent
409 access to a specific user or group in the list. The order of the list is
410 important since a user may be a member of multiple groups.
412 This parameter may also be specified in a filename section to allow or deny a
413 client to @code{OPEN} (@pxref{OPEN}) a data file. It also affects the cache
414 commands @code{CLEARCACHE} (@pxref{CLEARCACHE}) and @code{CACHETIMEOUT}
415 (@pxref{CACHETIMEOUT}). When not specified in a file section, any user that
416 can connect may also open any filename (provided they can decrypt it).
418 The following example would deny all users in group @code{primary} but
419 allow @code{username} who may be a member of @code{primary}. It will also
420 allow any TLS client except for the client with TLS fingerprint hash
421 @code{#ABCDEF}:
423 @example
424 allowed=-@@primary,username,+,!#ABCDEF
425 @end example
427 @item allowed_file = filename
428 A file containing one entry per line. An entry has the same syntax as the
429 @code{allowed} parameter. When both this parameter and the @code{allowed}
430 parameter are specified then the @code{allowed_file} entries will be appended
431 to the @code{allowed} parameter value.
433 @item encrypt_to = boolean
434 When @code{true} and @command{SAVE}'ing a data file, allow @command{gpg} to
435 append it's configured key to the list of recipients. The default is
436 @code{false} meaning that only keys specified with @command{SAVE}
437 @option{--keyid} are recipients.
439 @item always_trust = boolean
440 When @code{true}, allow encrypting to untrusted recipients or public
441 encryption keys. The default is @code{false}.
443 @item gpg_homedir = path
444 The location where @command{gpg} will store its public and private keys and
445 configuration. The default is @file{HOMEDIR/.gnupg} where @var{HOMEDIR} is the
446 default (@file{~/.pwmd}) or the value specified on the command line with the
447 @option{--homedir} command line option (@pxref{Invoking}). If you want to use
448 your standard @command{gpg} keyring then set this to @file{~/.gnupg}. Note
449 that a new instance of @command{gpg-agent} will be started when @emph{not}
450 using the standard keyring and that any configuration options for
451 @command{gpg-agent} will need to placed in
452 @file{HOMEDIR/.gnupg/gpg-agent.conf}.
454 @item disable_mlockall = boolean
455 When set to @code{false}, @cite{mlockall(2)} will be called on startup.  This
456 will use more physical memory but may also be more secure since no swapping to
457 disk will occur. The default is @var{true}. If possible, use an encrypted swap
458 file or partition and leave this set to @var{true}.
460 @item log_path = /path/to/logfile
461 Logs informational messages to the specified file. The default is
462 @file{~/.pwmd/log}.
464 @item enable_logging = boolean
465 Enable or disable logging to @var{log_path}. The default is @code{false}.
467 @item log_keepopen = boolean
468 When set to @code{false}, the log file specified with @var{log_path} will be
469 closed after writing each line. The default is @code{true}.
471 @item syslog = boolean
472 Enable logging to @cite{syslog(8)} with facility @emph{LOG_DAEMON} and priority
473 @emph{LOG_INFO}. The default is @code{false}.
475 @item log_level = level
476 When @code{0}, only connections and errors are logged. When @code{1}, data
477 file recipients and signers are logged during @code{OPEN} (@pxref{OPEN}) and
478 @code{SAVE} (@pxref{SAVE}). When @code{2}, client commands are also logged.
479 The default is @code{0}.
481 @item kill_scd = boolean
482 Attempt to kill @command{scdaemon} after a client disconnects.  The default is
483 @code{false}.
485 @item disable_list_and_dump = boolean
486 When @code{true}, the @code{XPATH}, @code{XPATHATTR}, @code{LIST} and
487 @code{DUMP} protocol commands (@pxref{Commands}) will be disabled.
489 @item cache_push = file1,file2
490 A comma separated list of filenames that will be pushed into the file cache
491 upon startup. @command{pwmd} will prompt for the passphrase for each file
492 unless specified with @var{passphrase_file} parameter in a matching file
493 section.
495 @item priority = integer
496 The priority, or niceness, of the server. The default is inherited from the
497 parent process.
499 @item lock_timeout = integer
500 The default timeout in tenths of a second before giving up waiting for a file
501 lock and returning an error. The default is @code{50}.
503 @end table
505 @cindex Data file configuration options
506 @ifset manverb
508 @end ifset
509 The following options are defaults for new files when specified in the
510 @samp{global} section. When placed in a data file section they are options
511 specific to that data file only.
513 @table @samp 
514 @item require_save_key = boolean
515 Require the passphrase needed for signing before writing changes of the
516 document to disk reguardless of the key cache status. The default is
517 @code{true}. This option compliments @command{gpg-agent} option
518 @option{--ignore-cache-for-signing} and is used as a fail-safe.
520 @item backup = boolean
521 Whether to create a backup of the data file when saving. The backup filename
522 has the @file{.backup} extension appended to the opened file. The default is
523 @code{true}. 
525 @item cache_timeout = seconds
526 The number of seconds to keep the cache entry for this file. If @code{-1}, the
527 cache entry is kept forever. If @code{0}, each time an encrypted file is
528 @code{OPEN}ed (@pxref{OPEN}) a passphrase will be required. The default
529 is @code{600} or 10 minutes.
531 @item passphrase_file = /path/to/filename
532 Obtain the passphrase to open the data file from @var{filename}. If specified
533 in the @samp{global} section then the @var{passphrase_file} is a default for
534 all data files. Note that if a client changes the passphrase for this data
535 file then the @var{passphrase_file} will need to be updated with the new
536 passphrase.
538 @item recursion_depth = integer
539 The maximum number of times to resolve a @code{target} attribute for an
540 element in an element path (@pxref{Target Attribute}). An error is returned
541 when this value is exceeded.  The default is @code{100} but can be disabled by
542 setting to @code{0} (@emph{not recommended}).
544 @item allowed = [-]user,[-]@@group,[!]#TLSFINGERPRINT,...
545 Same parameter value as the @code{allowed} parameter mentioned above in
546 the @samp{[global]} section but grants or denies a client from opening a
547 specific data file. The default is to allow any client that is allowed to
548 connect.
550 @end table
551 @menu
552 * TLS::                   Remote connections over TLS.
553 * Pinentry::              Configuration file and defaults.
554 @end menu
556 @node TLS, Pinentry, Configuration, Configuration
557 @chapter Configuring remote connections over TLS.
558 @ifset manverb
560 @end ifset
561 Remote connections can also be made to @command{pwmd} over TLS.
562 Authentication is done by using X.509 client certificates that are signed with
563 the same Certificate Authority (CA) as the server certificate.
565 The CA certificate is expected to be found in
566 @file{~/.pwmd/ca-cert.pem} while the @command{pwmd} server certificate and key
567 file should be put in @file{~/.pwmd/server-cert.pem} and
568 @file{~/.pwmd/server-key.pem}, respectively.
570 See the documentation of @command{certtool} or @command{openssl} for details
571 about creating self-signed certificates.
573 The following TLS configuration options are available:
575 @table @samp 
576 @item enable_tcp = boolean
577 Whether to enable TCP/TLS server support. If enabled, both TCP and the local
578 unix domain socket will listen for connections. The default is
579 @code{false}.
581 @item tcp_port = integer
582 The TCP port to listen on when @var{enable_tcp} is @code{true}. The default is
583 @code{6466}.
585 @item tcp_bind = string
586 The internet protocol to listen with. Must be one of @code{ipv4}, @code{ipv6}
587 or @code{any} to listen for both IPv4 and IPv6 connections. The default is
588 @code{any}.
590 @item tcp_interface = string
591 Only useful if running as root.
593 @item tls_timeout = seconds
594 The number of seconds to wait for a read() or write() call on a
595 TLS client file descriptor to complete before returning an
596 error. The default is @var{300}.
598 @item keepalive_interval = seconds
599 Send a keepalive status message to an idle remote client.  An idle
600 client is one that is not in a command. The purpose of this status
601 message is to disconnect a hung remote client and release any file mutex
602 locks so another client may open the same data file. The default is @code{60}.
604 @item tcp_require_key = boolean
605 When @code{true}, require the remote client to provide the passphrase to open
606 a data file even if the file is cached.  This option is a default for all
607 files when specified in the @samp{[global]} section. The default is
608 @code{false}.
610 @item tls_cipher_suite = string
611 The GnuTLS cipher suite and protocol to use. See the GnuTLS documentation for
612 information about the format of this string. The default is
613 @code{SECURE256:SECURE192:SECURE128:-VERS-SSL3.0:-VERS-TLS1.0}.
615 @item tls_dh_params_file = filename
616 The PEM encoded filename containing DH parameters. If not specified
617 then DH algorithms will not be available to the client. See the
618 @command{openssl dhparam} or @command{certtool} manual pages for details about
619 generating this file.
621 Note that SIGHUP will not reload this file once TLS support has been enabled.
622 You will need to restart @command{pwmd} for changes to take effect.
624 @item tls_use_crl = boolean
625 When @code{true}, enabling reading of @file{~/.pwmd/crl.pem}. This
626 file is an X.509 Certificate Revocation List and can be used to deny clients
627 by adding client certificates to it. The default is @code{false}.
628 @command{pwmd} will need to be restarted to recognize any changes to this
629 file.
630 @end table
632 @node Pinentry, Commands, TLS, Configuration
633 @chapter Pinentry configuration
634 @mansect Pinentry
635 The @command{pinentry} program is used to prompt the user for passphrase
636 input or as a confirmation dialog; it needs to know where to prompt for
637 the input, beit from a terminal or an X11 display.
639 It is the responsibility of the client to tell @command{pinentry} about the
640 terminal or X11 display before requiring the input. This is done with the
641 @command{OPTION} command (@pxref{OPTION}) to either set or unset needed
642 @command{pwmd} environment variables and by using the
643 @command{gpg-connect-agent} program. Please read it's documentation about the
644 @emph{UPDATESTARTUPTTY} command.
646 @ifclear isman
647 @c    Node,     Next,    Previous, Up
648 @node Commands, Bulk Commands, Pinentry, Top
649 @chapter Protocol commands and their syntax
650 @include menu.texi
651 @include commands.texi
653 @c    Node,     Next,    Previous, Up
654 @node Bulk Commands, Status Messages, Commands, Top
655 @chapter Running multiple commands in sequence
656 Multiple commands may be run in sequence by using the @code{BULK} command
657 (@pxref{BULK}). Using this feature may speed up remote connections since less
658 socket IO is needed. The @code{BULK} command uses an @emph{INQUIRE} to obtain
659 an canonical s-expression of commands to be run. The s-expression syntax is as
660 follows:
662 @example
663 (2:id<I>:<id> <P>:<prot><D>:[<data>] [2:rc<R>:<code>(2:id...) | 2:id...])
664 @end example
666 Each token is prefixed with an unsigned integer that specifies the length of
667 the token, followed by a colon '@code{:}', followed by the token itself. Pwmd
668 uses token pairs to create a @emph{name=value} relationship. Whitespace is
669 allowed between token pairs. For example, the following is valid:
671 @example
672 ( 2:id 7:FirstID 4:LIST0: 2:rc 1:0 (2:id6:Second 7:GETINFO7:version))
673 @end example
675 The @code{id} token begins a new command and requires an @var{<id>} token
676 of length @var{<I>} to uniquely identify this command. The next token pair is
677 the protocol command name @code{<prot>} of length @var{<P>} to run and without
678 any command arguments, followed by a colon '@code{:}', followed by the length
679 @var{<D>} of both command arguments and data, followed by a colon '@code{:}'
680 and finally the @var{<data>} itself.  If no arguments or data are needed for
681 the command, set the length of the data @var{<D>} to @code{0} and append the
682 required colon '@code{:}'.
684 A new command enclosed in parentheses may be run when the previous command
685 returns an error code that matches the @var{<code>} token of length @var{<R>}
686 by appending @var{rc} tokens to the end of the previous commands @var{<data>}
687 token. You may also test another return code for the previous command by
688 placing the next @var{rc} token at the end of the closing parentheses of the
689 previous return code command.
691 If another command is to be run after the previous and does not specify an
692 @var{rc} token, the return value is ignored for the previous command and the
693 next command is run.  There is no limit on the number of commands or
694 sub-commands except for system memory.
696 After inquiring the commands to be run, @code{BULK} will run each command with
697 @var{<data>} as its argument and store the result code and data of the command
698 in a @code{bulk-result} canonical s-expression of the syntax:
700 @example
701 (11:bulk-result2:id<I>:<id>2:rc<R>:<code><D>:[<data>][2:id...])
702 @end example
704 The @code{11:bulk-result} token begins the result of all commands. The
705 @var{<id>} token of length @var{<I>} is the same that was associated with the
706 command from the @emph{INQUIRE}'d syntax and is prefixed with @code{2:id}. The
707 return code of the command is prefixed with @code{2:rc} followed by the length
708 @var{<R>} of the unsigned integer @var{<code>} then the return @var{<code>}
709 itself.  If the command returned any @var{<data>}, it is prefixed with a
710 length @var{<D>} and immediately following the return @var{<code>}. Otherwise,
711 @var{<D>} will be @code{0} and followed by a colon '@code{:}'.
714 @c    Node,     Next,    Previous, Up 
715 @node Status Messages, Target Attribute, Bulk Commands, Top
716 @chapter Status messages and their meanings
717 Some commands send status messages to inform the client about certain
718 operations or as a progress indicator.  Status messages begin with a
719 @code{KEYWORD} followed by a status description for status messages that
720 require it. What status messages are sent, when, and how often may depend on
721 configuration settings (@pxref{Configuration}).
723 @multitable @columnfractions .20 .25 .55
724 @headitem Message @tab Parameters @tab Description
725 @item CACHE
726 @cindex CACHE
727 @tab @code{<integer>}
728 @tab The number of cached documents. Sent to each client after connecting
729 (@pxref{GETINFO}) and after every cache modification.
731 @item CLIENTS
732 @cindex CLIENTS
733 @tab @code{<integer>}
734 @tab The number of connected clients (@pxref{GETINFO}). Sent to each client
735 when another client either connects or disconnects.
737 @item DECRYPT
738 @cindex DECRYPT
739 @tab
740 @tab Sent to the current client during a decrypt operation. How often this
741 status message is sent is determined by the @code{keepalive_interval}
742 (@pxref{Configuration}) setting.
744 @item ENCRYPT
745 @cindex ENCRYPT
746 @tab
747 @tab Sent to the current client during an encrypt operation. How often this
748 status message is sent is determined by the @code{keepalive_interval}
749 (@pxref{Configuration}) setting.
751 @item GENKEY
752 @cindex GENKEY
753 @tab @code{[<sigkey_fpr> <pubkey_fpr>]}
754 @tab Sent to the current client during key generation. How often this
755 status message is sent is determined by the @code{keepalive_interval}
756 (@pxref{Configuration}) setting. The @var{sigkey_fpr} and @var{pubkey_fpr}
757 parameters are added when key generation has completed.
759 @item INQUIRE_MAXLEN
760 @cindex INQUIRE_MAXLEN
761 @tab @code{<bytes>}
762 @tab Sent to the client from @command{gpg-agent} when inquiring data. This
763 specifies the maximum number of bytes allowed for the client to send and
764 should not be exceeded.
766 @item KEEPALIVE
767 @cindex KEEPALIVE
768 @tab
769 @tab Sent to each idle client every @var{keepalive_interval}
770 (@pxref{Configuration}) seconds.
772 @item LOCKED
773 @cindex LOCKED
774 @tab
775 @tab Sent to the current client when another client is holding the lock for
776 the mutex associated with a file. How often this status message is sent is
777 determined by the @code{keepalive_interval} (@pxref{Configuration}) setting.
779 @item NEWFILE
780 @cindex NEWFILE
781 @tab
782 @tab Sent to the current client when the opened (@pxref{OPEN}) file does not
783 exist on the file-system.
785 @item XFER
786 @cindex XFER
787 @tab @code{<sent> <total>}
788 @tab Sent to the current client when transferring data. It has two space
789 delimited arguments. The first being the current amount of bytes transferred
790 and the other being the total bytes to be transferred. Note that since version
791 @code{3.1.1} of @command{pwmd} this status message is sent only once and
792 before the transfer begins with the @var{total} argument set to the size of the
793 data and the @var{sent} argument set to @code{0} leaving it to the client to
794 determine the progress of the transfer as the data is received.
796 @item STATE
797 @cindex STATE
798 @tab @code{<client_id> <state>}
799 @tab Sent to each client to indicate that @var{client_id} has changed to
800 @var{state} (@pxref{GETINFO} for client states). For a client to receive
801 another clients state the option @var{CLIENT-STATE} must be set.
802 @xref{OPTION} command.
804 @item EXPIRE
805 @cindex EXPIRE
806 @tab @code{<epoch_seconds> <epoch_future>|0}
807 @tab Sent to the current client when @code{GET} (@pxref{GET}) encounters an
808 @code{expire} (@pxref{Other Attributes}) attribute that is in the past or when
809 @code{STORE} (@pxref{STORE}) updates the @code{expire} attribute from the
810 @code{expire_increment} attribute value. The second field will be @code{0}
811 when @code{GET} sends this status message.  Otherwise the second field is the
812 time the next expiry will be.
814 @item PASSPHRASE_HINT
815 @cindex PASSPHRASE_HINT
816 @tab <keyid> <userid>
817 @tab Forwarded from @code{GpgME}. Contains information that is useful in a
818 @command{pinentry}. Only sent when pinentry is disabled (@pxref{OPTION}).
820 @item PASSPHRASE_INFO
821 @cindex PASSPHRASE_INFO
822 @tab <flags> ...
823 @tab Forwarded from @code{GpgME}. Contains information that is useful in a
824 @command{pinentry}. Only sent when pinentry is disabled (@pxref{OPTION}).
826 @item REHANDSHAKE
827 @cindex REHANDSHAKE
828 @tab
829 @tab Sent to each TLS client just before performing a cipher renegotiation
830 after a SIGHUP signal was received.
832 @item BULK
833 @cindex BULK
834 @tab @code{BEGIN|END <command id>}
835 @tab Sent to the current client before and after the @code{BULK} command
836 (@pxref{BULK}) runs each command. The @var{<command id>} is the same that was
837 associated with the command in the s-expression syntax.
838 @end multitable
840 @c    Node,     Next,    Previous, Up 
841 @node Target Attribute, Other Attributes, Status Messages, Top
842 @chapter The @code{target} attribute
843 @cindex target attribute
844 A @emph{case sensitive} attribute named @code{target} is treated specially
845 when found in each element of an element path. This attribute, like other
846 element attributes, is created or modified with the @code{ATTR} command
847 (@pxref{ATTR}). The value of this attribute is an existing element path
848 somewhere in the document.  If you are familiar with XML entities or
849 maybe the HTML @code{id} or @code{target} attributes or a symbolic link
850 in a file-system, you may find this attribute behaves similar to any of those.
852 To create a @code{target} attribute use the following syntax:
854 @example
855 ATTR SET target element[@code{TAB}child[..]] element[@code{TAB}child[..]]
856 @end example
858 Note the single space between the two element paths. The first element path is
859 where the @code{target} attribute will be created. If the element path does
860 not exist then it will be created.  This is the only time the @code{ATTR}
861 (@pxref{ATTR}) command will create elements. The attribute is created in the
862 final element of the element path.
864 The second element path is the destination of where you want the first element
865 path to resolve to. When an element path is passed as an argument to a
866 protocol command @command{pwmd} looks for a @code{target} attribute when
867 resolving each element and, if found, "jumps" to the attribute value and
868 continues resolving any remaining elements a commands element path.
870 When an element of a element path is removed that a @code{target} attribute
871 resolves to then an error will occur when trying to access that element. You
872 may need to either update the @code{target} attribute value with a new element
873 path or remove the attribute entirely.
875 Clients should be careful of creating @code{target} loops, or targets that
876 resolve to themselves. See the @var{recursion_depth} (@pxref{Configuration})
877 configuration parameter for details.
879 The @code{REALPATH} command (@pxref{REALPATH}) can be used to show the element
880 path after resolving all @code{target} attributes.
882 @emph{Note that when setting this attribute any children of the element will
883 be removed.}
886 @c    Node,     Next,    Previous, Up 
887 @node Other Attributes, Key Expiration, Target Attribute, Top
888 @chapter Other special attributes
889 @cindex special attributes
890 In addition to the @code{target} attribute (@pxref{Target Attribute}), there
891 are a few other attributes that are specially handled by @command{pwmd}. The
892 first is the @code{_ctime} attribute which is set to the current time when an
893 element is created. Next is the @code{_mtime} attribute which is created when
894 an element is created and also updated when an element is modified. Both of
895 these attributes may be removed but the @code{_mtime} attribute is
896 automatically added again since removing an attribute is considered modifying
897 an element. The @code{_acl} attribute controls access to the element, beit
898 modifying or accessing element content, or descending into child elements.
899 @xref{Access Control} for details. The @code{_name} attribute contains the
900 name of an element.
902 The above mentioned attributes are considered reserved attribute names.
903 Reserved attributes are treated specially when a @code{target} attribute is
904 found for the current element. The @code{ATTR LIST} command will show these
905 attribute values for the current element and not the attribute values for the
906 resolved @code{target} element. All other non-reserved attributes for the
907 resolved @code{target} are appended to the @code{ATTR LIST} command output.
908 Other @code{ATTR} commands (@pxref{ATTR}) behave as usual. You can, for example, @code{ATTR
909 DELETE} a non-reserved attribute for an element that contains a @code{target}
910 attribute. The resolved target elements' attribute will be removed rather than
911 the element containing the @code{target} attribute.
913 Another specially handled attribute is the @code{expire} attribute. This
914 attribute value, like the @code{_ctime} and @code{_mtime} attributes, is a
915 timestamp. But this timestamp is usually in the future and for use with the
916 @code{GET} (@pxref{GET}) and @code{STORE} (@pxref{STORE}) commands. When the
917 @code{GET} command is issued, it checks for an @code{expire} attribute an
918 compares its' value with the current time. If the @code{expire} timestamp is in
919 the past then a status message is sent (@pxref{Status Messages}) to inform the
920 client that the element content should be updated.  When the content for an
921 element containing an @code{expire} attribute is set when using the
922 @code{STORE} command, the value of the @code{expire_increment} attribute is
923 added to the current time and the @code{expire} attribute value is updated.
924 When no @code{expire_increment} attribute is found, no modification is done of
925 the @code{expire} attribute.
928 @c    Node,     Next,    Previous, Up 
929 @node Key Expiration, Signals, Other Attributes, Top
930 @chapter Key Expiration
931 @cindex key expiration
932 When a key used for signing a data file has expired there is no indication
933 until the next @code{SAVE} command is sent. The command will fail since one
934 cannot sign the data file with an expired key. The client will need to either
935 use a different key for signing by either specifying an existing non-expired
936 key, generate a new key, or change the expire time of the existing key with
937 @command{gpg}.
939 To change the expiration of the currently used signing key with @command{gpg},
940 use the @code{KEYINFO} command (@pxref{KEYINFO}) to obtain the fingerprint of
941 the signing key of the current data file, then change the expire time with
942 @command{gpg}:
944 @example
945 gpg --homedir ~/.pwmd/.gnupg --edit-key <fingerprint>
946 @end example
948 Then use the @code{expire} command to set the new key expire date. When
949 finished, use the @code{save} command to save your changes.
952 @c    Node,     Next,    Previous, Up
953 @node Signals, Concept Index, Key Expiration, Top
954 @chapter Recognized signals
955 @end ifclear
956 @mansect signals
957 Sending the @emph{SIGHUP} signal to a @command{pwmd} process will reload the
958 configuration file and sending @emph{SIGUSR1} will clear the entire file
959 cache.
961 @mansect see also
962 @ifset manverb
963 .BR pwmd-dump (1)
965 .BR gpg-agent (1)
967 .BR pinentry (1)
969 .BR gpg (1)
970 @end ifset
972 @ifclear isman
973 @c    Node,     Next,    Previous, Up 
974 @node Concept Index, , Signals, Top 
975 @unnumbered Concept Index
978 @c @printindex cp
979 @shortcontents 
980 @contents 
981 @end ifclear
982 @bye