Add --userid, --algo, --expire and --no-passphrase.
[pwmd.git] / doc / pwmd.texi
bloba7e3218265cc9ca382b23cb2974b816e135fb92e
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 * Invoking::              Command line options.
39 * Configuration::         Configuration file options.
40 * Commands::              Protocol commands.
41 * Status Messages::       Status lines and their meaning.
42 * Target Attribute::      A kind of symbolic link.
43 * Other Attributes::      Other attributes specially handled by pwmd.
44 * Signals::               Signals known to pwmd.
45 * Concept Index::         Index of concepts.
46 @end menu
48 @c    Node,     Next,    Previous, Up 
49 @node Introduction, Access Control,        , Top 
50 @chapter Overview of @command{pwmd} 
52 @manpage pwmd.1
53 @ifset manverb
54 .B pwmd
55 \- a univeral data server
56 @end ifset
58 @mansect synopsis
59 @ifset manverb
60 .B pwmd
61 [options] [file1] [...]
62 @end ifset
64 @mansect description
65 @dfn{Password Manager Daemon} (or @command{pwmd}) is a server that
66 applications connect to and send commands to put and get data
67 that is stored in an OpenPGP encrypted XML document. It mimics a
68 filesystem in a lot of ways including per element ACL's, but also has
69 the advantage of remote connections over TLS and a document cache. The
70 document cache is needed for a data file encrypted with keys stored on a
71 smartcard.
73 The server uses the Assuan protocol (@inforef{Implementation,,assuan}) which
74 is the same used by @command{gpg-agent}, @command{pinentry} and
75 @command{scdaemon}. It also uses @cite{libgpg-error} for error reporting with
76 @var{GPG_ERR_SOURCE_USER_1} being the error source.
77 @ifset isman
79 You can import an existing @command{pwmd} version @var{3.0.x} data file by
80 dumping the raw XML data with
81 .BR pwmd-dump(1)
82 to a file, then
83 importing that file by using @command{pwmd}'s @option{--import} command line
84 option. Please
85 see the
86 .BR pwmd-dump(1)
87 manual page for details.
89 It is recommended to read the texinfo documentation of @command{pwmd}
90 since it contains protocol commands and syntax and other details not
91 found here.
92 @end ifset
93 @manpause
95 The XML document uses the following DTD:
97 @example
98     <?xml version="1.0"?>
99     <!DOCTYPE pwmd [
100     <!ELEMENT pwmd (element*)>
101     <!ATTLIST element _name CDATA #REQUIRED>
102     ]>
103 @end example
105 The @code{pwmd} element is the document root node while all other elements
106 of the document have the name @code{element} with an attribute @code{_name}
107 whose value uniquely identifies the element at the current element tree depth.
108 It is done this way to avoid XML parsing errors for commonly used
109 characters.  A URL for example would be an invalid XML element
110 since the URI contains a @samp{:} which is also the XML
111 namespace separator.
113 As mentioned, an element name must be unique for the current element tree
114 depth. You cannot have two elements containing the same @code{_name} attribute
115 value. @command{pwmd} will stop searching for an element of an @emph{element
116 path} at the first match then continue searching for the next element of the
117 element path beginning at the child node of the matched element.
119 An @emph{element path} is a @code{TAB} delimited character string where each
120 @code{TAB} separates each element in the path.  For example, the element path
121 @code{a@code{TAB}b@code{TAB}c} has the following XML document structure:
123 @example
124         <pwmd>
125             <element _name="a">
126                 <element _name="b">
127                     <element _name="c">
128                         [... element value or content ...]
129                     </element>
130                 </element>
131             </element>
132         </pwmd>
133 @end example
135 The only restriction of an element name is that it contain no whitespace
136 characters.
138 @c    Node,     Next,    Previous, Up 
139 @node Access Control, Invoking, Introduction, Top 
140 @chapter Access Control
142 Like a filesystem has an ACL to grant or limit access to directories or
143 files for a specific user or group, @command{pwmd} can limit a local user,
144 group or a TLS connection to a specific element path. This is done by
145 storing an ACL in the element attribute @var{_acl}. Its syntax is
146 similar to the @var{allowed} configuration parameter (@pxref{Configuration})
147 with the exception that a TLS fingerprint hash is prefixed with a
148 @code{#}.
150 Access is denied for all users that are not in the ACL of an element
151 with the exception of an invoking user (see the @var{invoking_user}). The
152 connected client must be in the ACL for each element in an element path
153 otherwise an error is returned.  As an example:
155 @example
156 <element _name="test" _acl="username,-@@wheel,root,#ABCDEF">
157         <element _name="child"/>
158 </element>
159 @end example
161 The user @code{username} would be allowed access to the @code{test} element
162 but not if it is a member of the @code{wheel} group although, the @code{root}
163 user, who may be a member of the @code{wheel} group, is allowed. The SHA-256
164 TLS fingerprint hash @code{#ABCDEF} is also allowed.  No users other than an
165 @var{invoking_user} are allowed access to the @code{child} element.
167 The first user listed in the ACL is considered the owner of the
168 element. This determines which clients may modify an @var{_acl} attribute and
169 store content for an element. An @var{invoking_user} may always modify an 
170 ACL.
172 @c    Node,     Next,    Previous, Up 
173 @node Invoking, Configuration, Access Control, Top 
174 @chapter Invoking @command{pwmd} 
176 @mancont
177 @mansect options
178 @command{pwmd} uses GpgME for encryption, decryption and signing of the
179 OpenPGP data file. GpgME itself makes use of @command{gpg} for these
180 operations so some configuration of @command{gpg} may be needed.  Pwmd spawns
181 a separate @command{gpg-agent} process when @var{gpg_homedir}
182 (@pxref{Configuration}) is not set to an instance of an already running
183 gpg-agent. Any @command{gpg} configuration options that you need set should be
184 put in @var{~/.pwmd/.gnupg/gpg.conf} or the @var{gpg.conf} file located in
185 @var{gpg_homedir}. The same is true for the @var{gpg-agent.conf} file to set
186 any required @command{gpg-agent} options.
188 It is recommended to pass the @option{--allow-preset-passphrase}
189 option to @command{gpg-agent}. Doing so allows @command{pwmd}
190 cache pushing on startup. It is also recommended to pass the
191 @option{--allow-loopback-pinentry} to @command{gpg-agent} (this is the default
192 as of gnupg-2.1.15). This option allows a passphrase to be inquired from
193 @command{pwmd} when a @command{pinentry} is unavailable to the client
194 (@pxref{TLS}).
196 While @command{pwmd} has its own cache settings for an XML document,
197 @command{gpg-agent} has cache settings for the keys used for crypto operations
198 of a data file. Specifically the @option{ignore-cache-for-signing},
199 @option{default-cache-ttl} and @option{max-cache-ttl} options. These gpg-agent
200 options may need to be adjusted depending on your usage needs. For example,
201 the @code{OPEN} command may not require a passphrase to open a data file do to
202 the gpg-agent having a cached key even though the @code{ISCACHED} command
203 returns an error indicating the data file is not cached; which usually means a
204 passphrase would be required.
206 If you would like to use a keypair from your default gnupg keyring located in
207 ~/.gnupg, but would still like to use a separate gpg-agent process (the
208 default), you would need to first export the public key from the default
209 keyring then import it into the keyring that pwmd uses. You can do this by
210 first exporting the public key, then use the @option{--homedir ~/.pwmd/.gnupg}
211 option of @command{gpg} to import it into the new keyring. For private keys,
212 you would need to copy the private key associated with the exported public key
213 to @var{~/.pwmd/.gnupg/private-keys-v1.d}. If the private key is stored on
214 a smartcard you can also use the @code{KEYINFO --learn} command
215 (@pxref{KEYINFO}).
217 @cindex Running @command{pwmd} 
218 @command{pwmd} is executed as follows: 
220 @example 
221 pwmd @var{options} [ file1 ] [ @dots{} ]
222 @end example
224 Non-option arguments are data files to cache upon startup. When the data file
225 requires a passphrase for decryption a @command{pinentry} will prompt either
226 on the current TTY or from an X11 window when the @env{DISPLAY}
227 environment variable is set. @xref{Pinentry}.
229 @cindex Options 
230 @cindex Arguments 
231 The following command line options are supported:
233 @cindex Getting help 
234 @table @samp 
235 @item --debug protocol:level[,protocol:level]
236 Enable debugging output. This option can output sensitive information such as
237 passphrases and secret keys so care should be taken where the output gets
238 written to. The @var{protocol} is a single character representing the protocol
239 to log. Use @code{a} for @code{libassuan} with @var{level} being one or more
240 character flags: @code{i} for init, @code{x} for context, @code{e} for engine,
241 @code{d} for data, @code{s} for system IO or @code{c} for control.  To debug
242 @code{gpgme} use @code{g} as the @var{protocol} with @var{level} being an
243 integer from @code{1} to @code{9}. To enable @acronym{TLS} debugging output
244 use @code{t} as the @var{protocol} with @var{level} being an integer from
245 @code{1} to @code{9}. A value over @code{10} will enable all @acronym{TLS}
246 debugging output with @code{1} being the default.
248 @item --homedir directory
249 The root directory where pwmd will store its data and temporary files.  The
250 default is @file{~/.pwmd}.
252 @item --rcfile, -f rcfile
253 Specify an alternate configuration file. The default is
254 @file{~/.pwmd/config}.
256 @item --kill
257 Terminate an existing instance of pwmd. The process to terminate is determined
258 from the @option{--homedir} and @option{--rcfile} options.
260 @item --import, -I filename|-
261 Imports the XML @var{filename}. When @var{filename} is @code{-} the
262 XML is read from stdin. The XML file should be in conformance to
263 the @command{pwmd} DTD (@pxref{Introduction}). You will be prompted for
264 a passphrase to encrypt with.  The output is written to the filename specified
265 with @option{--outfile}. To make use of the imported data, place the output
266 file in @file{~/.pwmd/data}.
268 @item --output, -o filename|-
269 When importing, write the encrypted data file to @var{filename}. When
270 @var{filename} is @code{-} output will be written to stdout.
272 @item --passphrase-file, -k filename"
273 Obtain the passphrase to use when importing from the specified @var{filename}.
275 @item --keyid fingerprint[,fingerprint]
276 Specifies the fingerprint of the encryption key to use as a recipient when
277 importing. When not specified a new key-pair will be created.
279 @item --sign-keyid fingerprint
280 Specifies the fingerprint of the signing key to use for signing of the data
281 file when importing.  When not specified the signing key of the generated
282 key-pair or the signing key of the @option{--keyid} option will be used.
284 @item --symmetric, -s
285 Use symmetric or conventional encryption rather than pubic key encryption when
286 importing.  Signing is still possible by using the @option{--sign-keyid}
287 option. By default no signing is done when specifying this option.
289 @item --userid string
290 When importing, the user id used to identify the generated key. This should be
291 in the form @code{First Last <email>}.
293 @item --algo string
294 When importing, the algorithm to use when generating the new key pair. The
295 default is determined by @command{gpg}.
297 @item --expire seconds
298 When importing, the time, in seconds since epoch, when the generated key will
299 expire. Specifying @code{0} will never expire the key. The default is three
300 years.
302 @item --no-passphrase
303 When importing, don't require a passphrase for the generated key.
305 @item --disable-dump
306 Disable the @code{XPATH}, @code{XPATHATTR}, @code{LIST} and @code{DUMP}
307 protocol commands (@pxref{Commands}). This overrides any
308 @var{disable_list_and_dump} configuration parameter (@pxref{Configuration}).
310 @item --no-fork, -n
311 Run as a foreground process and do not fork into the background.
313 @item --ignore, --force
314 Ignore cache pushing failures on startup. By default, @command{pwmd} will exit
315 if an error occurred do to an invalid passphrase or other error.
317 @item --version
318 Show the version, copyright and compile time features and exit.
320 @item --help 
321 Print a summary of options.
322 @end table
323 @manpause
325 @c    Node,     Next,    Previous, Up 
326 @node Configuration, TLS, Invoking, Top 
327 @chapter @command{pwmd} configuration file options
328 @mancont
329 @mansect configuration file
330 If no configuration file is specified with the @command{pwmd} @option{-f}
331 command line option, @command{pwmd} will read @file{~/.pwmd/config} if it
332 exists, and if not, will use defaults.  Blank lines and lines beginning with
333 @samp{#} are ignored. Some parameters may have data file specific settings by
334 placing them in a file section. A file section is declared by surrounding the
335 filename with braces (i.e., @samp{[filename]}).  Global options may be
336 specified in the @code{global} section @samp{e.g., [global]} and are the
337 default options for new or unspecified file sections.
339 A tilde @code{~} will be expanded to the home directory of the user starting
340 @command{pwmd} when contained in a parameter whose value is a filename.
342 @cindex Reloading the configuration file
343 The configuration file can be reloaded by sending the @emph{SIGHUP} signal to
344 a @command{pwmd} process. Some security sensitive settings may not be changed
345 until @command{pwmd} is restarted.
347 @cindex Global configuration options
348 The following options are only for use in the @code{[global]} section:
350 @table @samp 
351 @item socket_path = /path/to/socket
352 Listen on the specified socket. The default is @file{~/.pwmd/socket}.
354 @item socket_perms = octal_mode
355 Permissions to set after creating the socket. This will override any
356 @cite{umask(2)} setting.
358 @item backlog = integer
359 The number of connections to queue. When this limit is reached then new
360 connections will be refused. The default is @code{128}.
362 @item invoking_user = [-!]user,[-!]@@group,[-!]#SHA-256,...
363 This parameter is not to be confused with setuid or setguid upon startup. It's
364 syntax is the same as the @code{allowed} parameter except that it is a list of
365 local usernames, group names and TLS fingerprint hashes that may use the
366 @command{XPATH}, @command{XPATHATTR} and @command{DUMP} commands (except when
367 disabled with the @code{disable_list_and_dump} option) and also who may modify
368 elements that have no @code{_acl} attribute or is not listed in an
369 @code{_acl}. It is similar to the system administrator root account but for a
370 data file and element paths (@pxref{Access Control}). The default is the user
371 the executes @command{pwmd}.
373 @item invoking_file = filename
374 A file containing one entry per line. An entry has the same syntax as the
375 @code{invoking_user} parameter. When both this parameter and the
376 @code{invoking_user} parameter are specified then the @code{invoking_user}
377 parameter will behave as if the @code{invoking_file} entries have been
378 appended to the @code{invoking_user} parameter value.
380 @item strict_open = boolean
381 When @code{true}, disallow creation of a new data file when the current client
382 is not an @code{invoking_user}. The default is @code{false}.
384 @item strict_kill = boolean
385 When @code{false}, the @code{KILL} command (@pxref{KILL}) will allow killing
386 another client that is not of the same @code{UID} or TLS fingerprint of
387 the current client and when not an @code{invoking_user}. The default us
388 @code{false}.
390 @item allowed = [-!]user,[-!]@@group,[+,][-!]#SHA-256,...
391 A comma separated list of local user names, group names or TLS
392 fingerprint SHA-256 hashes (in the case of a remote client) who are
393 allowed to connect.  Groups should be prefixed with a @samp{@@}. When not
394 specified only the user who started @command{pwmd} may connect. A username,
395 group name or hash may also be prefixed with a @code{-} or @code{!} to prevent
396 access to a specific user or group in the list. The order of the list is
397 important since a user may be a member of multiple groups.
399 This parameter may also be specified in a filename section to allow or deny a
400 client to @code{OPEN} (@pxref{OPEN}) a data file. It also affects the cache
401 commands @code{CLEARCACHE} (@pxref{CLEARCACHE}) and @code{CACHETIMEOUT}
402 (@pxref{CACHETIMEOUT}). When not specified in a file section, any user that
403 can connect may also open any filename (provided they can decrypt it).
405 The following example would deny all users in group @code{primary} but
406 allow @code{username} who may be a member of @code{primary}. It will also
407 allow any TLS client except for the client with TLS fingerprint hash
408 @code{#ABCDEF}:
410 @example
411 allowed=-@@primary,username,+,!#ABCDEF
412 @end example
414 @item allowed_file = filename
415 A file containing one entry per line. An entry has the same syntax as the
416 @code{allowed} parameter. When both this parameter and the @code{allowed}
417 parameter are specified then the @code{allowed_file} entries will be appended
418 to the @code{allowed} parameter value.
420 @item encrypt_to = boolean
421 When @code{true} and @command{SAVE}'ing a data file, allow @command{gpg} to
422 append it's configured key to the list of recipients. The default is
423 @code{false} meaning that only keys specified with @command{SAVE}
424 @option{--keyid} are recipients.
426 @item always_trust = boolean
427 When @code{true}, allow encrypting to untrusted recipients or public
428 encryption keys. The default is @code{false}.
430 @item gpg_homedir = path
431 The location where @command{gpg} will store its public and private keys and
432 configuration. The default is @file{HOMEDIR/.gnupg} where @var{HOMEDIR} is the
433 default (@file{~/.pwmd}) or the value specified on the command line with the
434 @option{--homedir} command line option (@pxref{Invoking}). If you want to use
435 your standard @command{gpg} keyring then set this to @file{~/.gnupg}. Note
436 that a new instance of @command{gpg-agent} will be started when @emph{not}
437 using the standard keyring and that any configuration options for
438 @command{gpg-agent} will need to placed in
439 @file{HOMEDIR/.gnupg/gpg-agent.conf}.
441 @item disable_mlockall = boolean
442 When set to @code{false}, @cite{mlockall(2)} will be called on startup.  This
443 will use more physical memory but may also be more secure since no swapping to
444 disk will occur. The default is @var{true}. If possible, use an encrypted swap
445 file or partition and leave this set to @var{true}.
447 @item log_path = /path/to/logfile
448 Logs informational messages to the specified file. The default is
449 @file{~/.pwmd/log}.
451 @item enable_logging = boolean
452 Enable or disable logging to @var{log_path}. The default is @code{false}.
454 @item log_keepopen = boolean
455 When set to @code{false}, the log file specified with @var{log_path} will be
456 closed after writing each line. The default is @code{true}.
458 @item syslog = boolean
459 Enable logging to @cite{syslog(8)} with facility @emph{LOG_DAEMON} and priority
460 @emph{LOG_INFO}. The default is @code{false}.
462 @item log_level = level
463 When @code{0}, only connections and errors are logged. When @code{1}, data
464 file recipients and signers are logged during @code{OPEN} (@pxref{OPEN}) and
465 @code{SAVE} (@pxref{SAVE}). When @code{2}, client commands are also logged.
466 The default is @code{0}.
468 @item kill_scd = boolean
469 Kill @command{scdaemon} after each @code{OPEN} (@pxref{OPEN}),
470 @code{SAVE} (@pxref{SAVE}) or @code{PASSWD} (@pxref{PASSWD}) command. The
471 default is @code{false}.
473 @item disable_list_and_dump = boolean
474 When @code{true}, the @code{XPATH}, @code{XPATHATTR}, @code{LIST} and
475 @code{DUMP} protocol commands (@pxref{Commands}) will be disabled.
477 @item cache_push = file1,file2
478 A comma separated list of filenames that will be pushed into the file cache
479 upon startup. @command{pwmd} will prompt for the passphrase for each file
480 unless specified with @var{passphrase_file} parameter in a matching file
481 section.
483 @item priority = integer
484 The priority, or niceness, of the server. The default is inherited from the
485 parent process.
487 @item lock_timeout = integer
488 The default timeout in tenths of a second before giving up waiting for a file
489 lock and returning an error. The default is @code{50}.
491 @end table
493 @cindex Data file configuration options
494 @ifset manverb
496 @end ifset
497 The following options are defaults for new files when specified in the
498 @samp{global} section. When placed in a data file section they are options
499 specific to that data file only.
501 @table @samp 
502 @item require_save_key = boolean
503 Require the passphrase needed for signing before writing changes of the
504 document to disk reguardless of the key cache status. The default is
505 @code{true}. This option compliments @command{gpg-agent} option
506 @option{--ignore-cache-for-signing} and is used as a fail-safe.
508 @item backup = boolean
509 Whether to create a backup of the data file when saving. The backup filename
510 has the @file{.backup} extension appended to the opened file. The default is
511 @code{true}. 
513 @item cache_timeout = seconds
514 The number of seconds to keep the cache entry for this file. If @code{-1}, the
515 cache entry is kept forever. If @code{0}, each time an encrypted file is
516 @code{OPEN}ed (@pxref{OPEN}) a passphrase will be required. The default
517 is @code{600} or 10 minutes.
519 @item xfer_progress = bytes
520 Commands that send data lines to the client will also send the @code{XFER}
521 status message (@pxref{Status Messages}) after the specified number of bytes
522 have been sent. The number of bytes is rounded to @var{ASSUAN_LINELENGTH} or
523 @code{1002} bytes. The default is @code{8196}.
525 @item passphrase_file = /path/to/filename
526 Obtain the passphrase to open the data file from @var{filename}. If specified
527 in the @samp{global} section then the @var{passphrase_file} is a default for
528 all data files. Note that if a client changes the passphrase for this data
529 file then the @var{passphrase_file} will need to be updated with the new
530 passphrase.
532 @item recursion_depth = integer
533 The maximum number of times to resolve a @code{target} attribute for an
534 element in an element path (@pxref{Target Attribute}). An error is returned
535 when this value is exceeded.  The default is @code{100} but can be disabled by
536 setting to @code{0} (@emph{not recommended}).
538 @item allowed = [-]user,[-]@@group,[!]#TLSFINGERPRINT,...
539 Same parameter value as the @code{allowed} parameter mentioned above in
540 the @samp{[global]} section but grants or denies a client from opening a
541 specific data file. The default is to allow any client that is allowed to
542 connect.
544 @end table
545 @menu
546 * TLS::                   Remote connections over TLS.
547 * Pinentry::              Configuration file and defaults.
548 @end menu
550 @node TLS, Pinentry, Configuration, Configuration
551 @chapter Configuring remote connections over TLS.
552 @ifset manverb
554 @end ifset
555 Remote connections can also be made to @command{pwmd} over TLS.
556 Authentication is done by using X.509 client certificates that are signed with
557 the same Certificate Authority (CA) as the server certificate.
559 The CA certificate is expected to be found in
560 @file{~/.pwmd/ca-cert.pem} while the @command{pwmd} server certificate and key
561 file should be put in @file{~/.pwmd/server-cert.pem} and
562 @file{~/.pwmd/server-key.pem}, respectively.
564 See the documentation of @command{certtool} or @command{openssl} for details
565 about creating self-signed certificates.
567 The following TLS configuration options are available:
569 @table @samp 
570 @item enable_tcp = boolean
571 Whether to enable TCP/TLS server support. If enabled, both TCP and the local
572 unix domain socket will listen for connections. The default is
573 @code{false}.
575 @item tcp_port = integer
576 The TCP port to listen on when @var{enable_tcp} is @code{true}. The default is
577 @code{6466}.
579 @item tcp_bind = string
580 The internet protocol to listen with. Must be one of @code{ipv4}, @code{ipv6}
581 or @code{any} to listen for both IPv4 and IPv6 connections. The default is
582 @code{any}.
584 @item tcp_interface = string
585 Only useful if running as root.
587 @item tls_timeout = seconds
588 The number of seconds to wait for a read() or write() call on a
589 TLS client file descriptor to complete before returning an
590 error. The default is @var{300}.
592 @item keepalive_interval = seconds
593 Send a keepalive status message to an idle remote client.  An idle
594 client is one that is not in a command. The purpose of this status
595 message is to disconnect a hung remote client and release any file mutex
596 locks so another client may open the same data file. The default is @code{60}.
598 @item tcp_require_key = boolean
599 When @code{true}, require the remote client to provide the passphrase to open
600 a data file even if the file is cached.  This option is a default for all
601 files when specified in the @samp{[global]} section. The default is
602 @code{false}.
604 @item tls_cipher_suite = string
605 The GnuTLS cipher suite and protocol to use. See the GnuTLS documentation for
606 information about the format of this string. The default is
607 @code{SECURE256:SECURE192:SECURE128:-VERS-SSL3.0:-VERS-TLS1.0}.
609 @item tls_dh_params_file = filename
610 The PEM encoded filename containing DH parameters. If not specified
611 then DH algorithms will not be available to the client. See the
612 @command{openssl dhparam} or @command{certtool} manual pages for details about
613 generating this file.
615 Note that SIGHUP will not reload this file once TLS support has been enabled.
616 You will need to restart @command{pwmd} for changes to take effect.
617 @end table
619 @node Pinentry, Commands, TLS, Configuration
620 @chapter Pinentry configuration
621 @mansect Pinentry
622 The @command{pinentry} program is used to prompt the user for passphrase
623 input or as a confirmation dialog; it needs to know where to prompt for
624 the input, beit from a terminal or an X11 display.
626 It is the responsibility of the client to tell @command{pinentry} about the
627 terminal or X11 display before requiring the input. This is done with the
628 @command{OPTION} command (@pxref{OPTION}) to either set or unset needed
629 @command{pwmd} environment variables and by using the
630 @command{gpg-connect-agent} program. Please read it's documentation about the
631 @emph{UPDATESTARTUPTTY} command.
633 @ifclear isman
634 @c    Node,     Next,    Previous, Up
635 @node Commands, Status Messages, Pinentry, Top
636 @chapter Protocol commands and their syntax
637 @include menu.texi
638 @include commands.texi
640 @c    Node,     Next,    Previous, Up 
641 @node Status Messages, Target Attribute, Commands, Top 
642 @chapter Status messages and their meanings
643 Some commands send status messages to inform the client about certain
644 operations or as a progress indicator.  Status messages begin with a
645 @code{KEYWORD} followed by a status description for status messages that
646 require it. What status messages are sent, when, and how often may depend on
647 configuration settings (@pxref{Configuration}).
649 @multitable @columnfractions .20 .25 .55
650 @headitem Message @tab Parameters @tab Description
651 @item CACHE
652 @cindex CACHE
653 @tab @code{<integer>}
654 @tab The number of cached documents. Sent to each client after connecting
655 (@pxref{GETINFO}) and after every cache modification.
657 @item CLIENTS
658 @cindex CLIENTS
659 @tab @code{<integer>}
660 @tab The number of connected clients (@pxref{GETINFO}). Sent to each client
661 when another client either connects or disconnects.
663 @item DECRYPT
664 @cindex DECRYPT
665 @tab
666 @tab Sent to the current client during a decrypt operation. How often this
667 status message is sent is determined by the @code{keepalive_interval}
668 (@pxref{Configuration}) setting.
670 @item ENCRYPT
671 @cindex ENCRYPT
672 @tab
673 @tab Sent to the current client during an encrypt operation. How often this
674 status message is sent is determined by the @code{keepalive_interval}
675 (@pxref{Configuration}) setting.
677 @item GENKEY
678 @cindex GENKEY
679 @tab @code{[<sigkey_fpr> <pubkey_fpr>]}
680 @tab Sent to the current client during key generation. How often this
681 status message is sent is determined by the @code{keepalive_interval}
682 (@pxref{Configuration}) setting. The @var{sigkey_fpr} and @var{pubkey_fpr}
683 parameters are added when key generation has completed.
685 @item INQUIRE_MAXLEN
686 @cindex INQUIRE_MAXLEN
687 @tab @code{<bytes>}
688 @tab Sent to the client from @command{gpg-agent} when inquiring data. This
689 specifies the maximum number of bytes allowed for the client to send and
690 should not be exceeded.
692 @item KEEPALIVE
693 @cindex KEEPALIVE
694 @tab
695 @tab Sent to each idle client every @var{keepalive_interval}
696 (@pxref{Configuration}) seconds.
698 @item LOCKED
699 @cindex LOCKED
700 @tab
701 @tab Sent to the current client when another client is holding the lock for
702 the mutex associated with a file. How often this status message is sent is
703 determined by the @code{keepalive_interval} (@pxref{Configuration}) setting.
705 @item NEWFILE
706 @cindex NEWFILE
707 @tab
708 @tab Sent to the current client when the opened (@pxref{OPEN}) file does not
709 exist on the file-system.
711 @item XFER
712 @cindex XFER
713 @tab @code{<sent> <total>}
714 @tab Sent to the current client when transferring data. It has two space
715 delimited arguments. The first being the current amount of bytes transferred
716 and the other being the total bytes to be transferred.
718 @item STATE
719 @cindex STATE
720 @tab @code{<client_id> <state>}
721 @tab Sent to each client to indicate that @var{client_id} has changed to
722 @var{state} (@pxref{GETINFO} for client states). For a client to receive
723 another clients state the option @var{CLIENT-STATE} must be set.
724 @xref{OPTION} command.
726 @item EXPIRE
727 @cindex EXPIRE
728 @tab @code{<epoch_seconds> <epoch_future>|0}
729 @tab Sent to the current client when @code{GET} (@pxref{GET}) encounters an
730 @code{expire} (@pxref{Other Attributes}) attribute that is in the past or when
731 @code{STORE} (@pxref{STORE}) updates the @code{expire} attribute from the
732 @code{expire_increment} attribute value. The second field will be @code{0}
733 when @code{GET} sends this status message.  Otherwise the second field is the
734 time the next expiry will be.
736 @item PASSPHRASE_HINT
737 @cindex PASSPHRASE_HINT
738 @tab <keyid> <userid>
739 @tab Forwarded from @code{GpgME}. Contains information that is useful in a
740 @command{pinentry}. Only sent when pinentry is disabled (@pxref{OPTION}).
742 @item PASSPHRASE_INFO
743 @cindex PASSPHRASE_INFO
744 @tab <flags> ...
745 @tab Forwarded from @code{GpgME}. Contains information that is useful in a
746 @command{pinentry}. Only sent when pinentry is disabled (@pxref{OPTION}).
748 @item REHANDSHAKE
749 @cindex REHANDSHAKE
750 @tab
751 @tab Sent to each TLS client just before performing a cipher renegotiation
752 after a SIGHUP signal was received.
753 @end multitable
755 @c    Node,     Next,    Previous, Up 
756 @node Target Attribute, Other Attributes, Status Messages, Top
757 @chapter The @code{target} attribute
758 @cindex target attribute
759 A @emph{case sensitive} attribute named @code{target} is treated specially
760 when found in each element of an element path. This attribute, like other
761 element attributes, is created or modified with the @code{ATTR} command
762 (@pxref{ATTR}). The value of this attribute is an existing element path
763 somewhere in the document.  If you are familiar with XML entities or
764 maybe the HTML @code{id} or @code{target} attributes or a symbolic link
765 in a file-system, you may find this attribute behaves similar to any of those.
767 To create a @code{target} attribute use the following syntax:
769 @example
770 ATTR SET target element[@code{TAB}child[..]] element[@code{TAB}child[..]]
771 @end example
773 Note the single space between the two element paths. The first element path is
774 where the @code{target} attribute will be created. If the element path does
775 not exist then it will be created.  This is the only time the @code{ATTR}
776 (@pxref{ATTR}) command will create elements. The attribute is created in the
777 final element of the element path.
779 The second element path is the destination of where you want the first element
780 path to resolve to. When an element path is passed as an argument to a
781 protocol command @command{pwmd} looks for a @code{target} attribute when
782 resolving each element and, if found, "jumps" to the attribute value and
783 continues resolving any remaining elements a commands element path.
785 When an element of a element path is removed that a @code{target} attribute
786 resolves to then an error will occur when trying to access that element. You
787 may need to either update the @code{target} attribute value with a new element
788 path or remove the attribute entirely.
790 Clients should be careful of creating @code{target} loops, or targets that
791 resolve to themselves. See the @var{recursion_depth} (@pxref{Configuration})
792 configuration parameter for details.
794 The @code{REALPATH} command (@pxref{REALPATH}) can be used to show the element
795 path after resolving all @code{target} attributes.
797 @emph{Note that when setting this attribute any children of the element will
798 be removed.}
801 @c    Node,     Next,    Previous, Up 
802 @node Other Attributes, Signals, Target Attribute, Top
803 @chapter Other special attributes
804 @cindex special attributes
805 In addition to the @code{target} attribute (@pxref{Target Attribute}), there
806 are a few other attributes that are specially handled by @command{pwmd}. The
807 first is the @code{_ctime} attribute which is set to the current time when an
808 element is created. Next is the @code{_mtime} attribute which is created when
809 an element is created and also updated when an element is modified. Both of
810 these attributes may be removed but the @code{_mtime} attribute is
811 automatically added again since removing an attribute is considered modifying
812 an element. The @code{_acl} attribute controls access to the element, beit
813 modifying or accessing element content, or descending into child elements.
814 @xref{Access Control} for details. The @code{_name} attribute contains the
815 name of an element.
817 The above mentioned attributes are considered reserved attribute names.
818 Reserved attributes are treated specially when a @code{target} attribute is
819 found for the current element. The @code{ATTR LIST} command will show these
820 attribute values for the current element and not the attribute values for the
821 resolved @code{target} element. All other non-reserved attributes for the
822 resolved @code{target} are appended to the @code{ATTR LIST} command output.
823 Other @code{ATTR} commands (@pxref{ATTR}) behave as usual. You can, for example, @code{ATTR
824 DELETE} a non-reserved attribute for an element that contains a @code{target}
825 attribute. The resolved target elements' attribute will be removed rather than
826 the element containing the @code{target} attribute.
828 Another specially handled attribute is the @code{expire} attribute. This
829 attribute value, like the @code{_ctime} and @code{_mtime} attributes, is a
830 timestamp. But this timestamp is usually in the future and for use with the
831 @code{GET} (@pxref{GET}) and @code{STORE} (@pxref{STORE}) commands. When the
832 @code{GET} command is issued, it checks for an @code{expire} attribute an
833 compares its' value with the current time. If the @code{expire} timestamp is in
834 the past then a status message is sent (@pxref{Status Messages}) to inform the
835 client that the element content should be updated.  When the content for an
836 element containing an @code{expire} attribute is set when using the
837 @code{STORE} command, the value of the @code{expire_increment} attribute is
838 added to the current time and the @code{expire} attribute value is updated.
839 When no @code{expire_increment} attribute is found, no modification is done of
840 the @code{expire} attribute.
843 @c    Node,     Next,    Previous, Up
844 @node Signals, Concept Index, Other Attributes, Top
845 @chapter Recognized signals
846 @end ifclear
847 @mansect signals
848 Sending the @emph{SIGHUP} signal to a @command{pwmd} process will reload the
849 configuration file and sending @emph{SIGUSR1} will clear the entire file
850 cache.
852 @mansect see also
853 @ifset manverb
854 .BR pwmd-dump (1)
856 .BR gpg-agent (1)
858 .BR pinentry (1)
860 .BR gpg2 (1)
861 @end ifset
863 @ifclear isman
864 @c    Node,     Next,    Previous, Up 
865 @node Concept Index, , Signals, Top 
866 @unnumbered Concept Index
869 @c @printindex cp
870 @shortcontents 
871 @contents 
872 @end ifclear
873 @bye