Access control for the _acl attribute.
[pwmd.git] / doc / pwmd.texi
blobb04e97740a2fc3c639f985db92185b23edf1d6e8
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.0 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 * Signals::               Signals known to pwmd.
44 * Concept Index::         Index of concepts.
45 @end menu
47 @c    Node,     Next,    Previous, Up 
48 @node Introduction, Access Control,        , Top 
49 @chapter Overview of @command{pwmd} 
51 @manpage pwmd.1
52 @ifset manverb
53 .B pwmd
54 \- a univeral data server
55 @end ifset
57 @mansect synopsis
58 @ifset manverb
59 .B pwmd
60 [options] [file1] [...]
61 @end ifset
63 @mansect description
64 @command{pwmd} or @dfn{Password Manager Daemon} is a server that
65 applications connect to and send commands to store and retrieve data
66 that is saved in an encrypted @abbr{XML} document.
68 The server uses the Assuan protocol (@inforef{Implementation,,assuan}) which
69 is the same used by @command{gpg-agent}, @command{pinentry} and
70 @command{scdaemon}. It also uses @cite{libgpg-error} for error reporting with
71 the error source set as @var{GPG_ERR_SOURCE_USER_1}.
72 @ifset isman
74 It is recommended to read the texinfo documentation of @command{pwmd}
75 since it contains protocol commands and syntax and other details not
76 found here.
77 @end ifset
78 @manpause
80 The @abbr{XML} document uses the following @abbr{DTD}:
82 @example
83     <?xml version="1.0"?>
84     <!DOCTYPE pwmd [
85     <!ELEMENT pwmd (element*)>
86     <!ATTLIST element _name CDATA #REQUIRED>
87     ]>
88 @end example
90 The @code{pwmd} element is the document root node while all other elements
91 of the document have the name @code{element} with an attribute @code{_name}
92 whose value uniquely identifies the element at the current element tree depth.
93 It is done this way to avoid @abbr{XML} parsing errors for commonly used
94 characters.  A @abbr{URL} for example would be an invalid @abbr{XML} element
95 since the @abbr{URI} contains a @samp{:} which is also the @abbr{XML}
96 namespace separator.
98 As mentioned, an element name must be unique for the current element tree
99 depth. You cannot have two elements containing the same @code{_name} attribute
100 value. @command{pwmd} will stop searching for an element of an @emph{element
101 path} at the first match then continue searching for the next element of the
102 element path beginning at the child node of the matched element.
104 An @emph{element path} is a @key{TAB} delimited character string where each
105 @key{TAB} separates each element in the path.  For example, the element path
106 @code{a@key{TAB}b@key{TAB}c} has the following @abbr{XML} document structure:
108 @example
109         <pwmd>
110             <element _name="a">
111                 <element _name="b">
112                     <element _name="c">
113                         [... element value or content ...]
114                     </element>
115                 </element>
116             </element>
117         </pwmd>
118 @end example
120 The only restriction of an element name is that it contain no whitespace
121 characters. It also cannot begin with a @samp{!} since this character is
122 reserved for the @code{target} attribute. @xref{Target Attribute}.
124 @c    Node,     Next,    Previous, Up 
125 @node Access Control, Invoking, Introduction, Top 
126 @chapter Access Control
128 Like a filesystem has an @abbr{ACL} to grant or limit access to directories or
129 files for a specific user or group, @command{pwmd} can limit a local user,
130 group or a TLS connection to a specific element path. This is done by storing
131 an ACL in the element attribute @var{_acl}. Its syntax is similar to the
132 @var{allowed} configuration parameter (@pxref{Configuration}) with the
133 exception that a TLS fingerprint hash is prefixed with a @key{#}.
135 Access is denied for all users that are not in the @abbr{ACL} of an element
136 with the exception of the invoking user (see the @var{invoking_user} and
137 @var{invoking_tls} configuration parameters (@pxref{Configuration})). The
138 connected client must be in the @abbr{ACL} for each element in an element path
139 otherwise an error is returned.  As an example:
141 @example
142 <element _name="test" _acl="username,-@@wheel,root">
143         <element _name="child"/>
144 </element>
145 @end example
147 The user @code{username} would be allowed access to the @code{test} element
148 but not if it is a member of the @code{wheel} group. Although the @code{root}
149 user, who may be a member of the @code{wheel} group, is allowed. No users
150 other than the @var{invoking_user} is allowed access to the @code{child}
151 element.
153 The first user listed in the @abbr{ACL} is considered the owner of the
154 element. This determines which clients may modify an @var{_acl} attribute.
155 The @var{invoking_user} may always modify an @abbr{ACL}.
157 @c    Node,     Next,    Previous, Up 
158 @node Invoking, Configuration, Access Control, Top 
159 @chapter Invoking @command{pwmd} 
161 @mancont
162 @mansect options
163 When @command{pwmd} is started with the @option{--use-agent} command
164 line option then @command{pwmd} will use @command{gpg-agent} for key
165 generation, decryption, signing and caching of passphrases as the
166 default rather than symmetrically encrypted data files.
167 @command{gpg-agent} must be running prior to @command{pwmd} startup when
168 this option is enabled. The @env{GPG_AGENT_INFO} environment variable is
169 set by @command{gpg-agent} and @command{pwmd} uses this variable to
170 determine where the @command{gpg-agent} socket is listening for
171 connections.
173 It is recommended to pass the @option{--allow-preset-passphrase}
174 command line option to @command{gpg-agent}. Doing so allows @command{pwmd}
175 cache pushing on startup. It is also recommended to pass the
176 @option{--allow-loopback-pinentry} to @command{gpg-agent}. This option allows
177 a passphrase to be inquired from @command{pwmd} when a @command{pinentry} is
178 unavailable to the client.
180 @cindex Running @command{pwmd} 
181 @command{pwmd} is executed as follows: 
183 @example 
184 pwmd @var{options} [ file1 ] [ @dots{} ]
185 @end example
187 Non-option arguments are data files to cache on startup. When the data file
188 requires a passphrase for decryption a @command{pinentry} will prompt either
189 on the current @abbr{TTY} or from an X11 window when the @env{DISPLAY}
190 environment variable is set.
192 @cindex Options 
193 @cindex Arguments 
194 The following command line options are supported:
196 @cindex Getting help 
197 @table @samp 
198 @item --homedir directory
199 The root directory where pwmd will store its data and temporary files.  The
200 default is @file{~/.pwmd}.
202 @item --rcfile, -f rcfile
203 Specify an alternate configuration file. The default is
204 @file{~/.pwmd/config}.
206 @item --use-agent
207 Enable the use of @command{gpg-agent} and add support for data files
208 encrypted with a keypair. Files previously handled by
209 @command{gpg-agent} when this option is not specified will no longer be
210 able to be opened and new data files are symmetrically or conventionally
211 encrypted and without a public and private key. If
212 specified, both data file types are supported.
214 @item --import, -I filename
215 Imports an @abbr{XML} file. The @abbr{XML} file should be in conformance to
216 the @command{pwmd} @abbr{DTD} (@pxref{Introduction}). You
217 will be prompted for a passphrase to encrypt with.  The output is written to
218 the filename specified with @option{--outfile}. To make use of the imported
219 data, place the output file in @file{~/.pwmd/data}.
221 @item --keyparam S-expression
222 The key parameters to use when generating a new key pair while importing an
223 @abbr{XML} file or when converting a @emph{version 2} data file. The argument
224 must be a valid S-expression (@inforef{S-expressions,, gcrypt}).
226 @item --keygrip hexstring
227 Specifies the hexadecimal encoded public key-grip to use for encryption when
228 importing or converting. When not specified a new key-pair will be created.
230 @item --sign-keygrip hexstring
231 Specifies the hexadecimal encoded public key-grip to use for signing of the
232 data file when importing or converting. When not specified the generated
233 public key or the key specified with the @option{--keygrip} option will be
234 used.
236 @item --passphrase-file, -k filename"
237 Obtain the passphrase from the specified filename.
239 @item --s2k-count iterations
240 The number of times to hash the passphrase when importing or converting.  The
241 default is the gpg-agent calibrated value of the machine. When less than
242 @samp{65536} the default will be used.
244 @item --cipher-iterations iterations
245 The number of symmetric encryption iterations. The value is actually N+1. The
246 default is 0+1.
248 @item --cipher algo
249 When importing, the cipher to use for data encryption.  See the @var{cipher}
250 configuration parameter (@pxref{Configuration}) for available ciphers. The
251 default is @samp{aes256}.
253 @item --convert, -C filename
254 Converts a @command{pwmd} @emph{version 2} data file to a @emph{version 3}
255 data file. If encrypted, you will be prompted for a passphrase to use for
256 decryption unless @option{--passphrase-file} was specified. The converted data
257 file will be saved to the filename specified with @option{--outfile}. All
258 @option{--import} related options may also be used when converting.
260 @item --disable-dump, -D
261 Disable the @code{XPATH}, @code{XPATHATTR}, @code{LIST} and @code{DUMP}
262 protocol commands (@pxref{Commands}). This overrides any
263 @var{disable_list_and_dump} configuration parameter (@pxref{Configuration}).
265 @item --no-fork, -n
266 Run as a foreground process and do not fork into the background.
268 @item --ignore, --force
269 Ignore cache pushing failures on startup. By default, @command{pwmd} will exit
270 if an error occurred do to an invalid passphrase or other error.
272 @item --debug-level keyword,keyword,...
273 Output libassuan @inforef{Top,,assuan} protocol IO with the comma
274 separated list of output keywords.  Valid keywords are: @code{init},
275 @code{ctx}, @code{engine}, @code{data}, @code{sysio} and @code{control}.
277 @item --version
278 Show the version, copyright and compile time features and exit.
280 @item --help 
281 Print a summary of options.
282 @end table
283 @manpause
285 @c    Node,     Next,    Previous, Up 
286 @node Configuration, TLS, Invoking, Top 
287 @chapter @command{pwmd} configuration file options
288 @mancont
289 @mansect configuration file
290 If no configuration file is specified with the @command{pwmd} @option{-f}
291 command line option, @command{pwmd} will read @file{~/.pwmd/config} if it
292 exists, and if not, will use defaults.  Blank lines and lines beginning with
293 @samp{#} are ignored. Some parameters may have data file specific settings by
294 placing them in a file section. A file section is declared by surrounding the
295 filename with braces (i.e., @samp{[filename]}).  Global options may be
296 specified in a @samp{[global]} section and are the default options for new or
297 unspecified files.
299 A tilde @key{~} will be expanded to the home directory of the invoking user
300 when contained in a parameter whose value is a filename.
302 @cindex Reloading the configuration file
303 The configuration file can be reloaded by sending the @emph{SIGHUP} signal to
304 a @command{pwmd} process.
306 @cindex Global configuration options
307 The following options are only for use in the @samp{global} section:
309 @table @samp 
310 @item socket_path = /path/to/socket
311 Listen on the specified socket. The default is @file{~/.pwmd/socket}.
313 @item socket_perms = octal_mode
314 Permissions to set after creating the socket. This will override any
315 @cite{umask(2)} setting.
317 @item invoking_user = username
318 This parameter is not to be confused with setuid or setguid upon startup. It
319 is the local username that may use the @command{XPATH}, @command{XPATHATTR}
320 and @command{DUMP} commands (except when disabled with the
321 @code{disable_list_and_dump} option). Other users are denied access to these
322 commands. This also specifies the user that may access any elements that lack
323 an @code{_acl} attribute (@pxref{Access Control}). The default is the current
324 user.
326 @item invoking_tls = hash
327 Like @code{invoking_user}, but is a hash of a TLS certificate fingerprint.
329 @item allowed = [-]user,[-]@@group,...
330 A comma separated list of local user names or group names allowed to connect
331 to the socket. Groups should be prefixed with a @samp{@@}. When not specified
332 only the invoking user may connect. A username or group name may also be
333 prefixed with a @key{-} to prevent access to a specific user or group
334 in the list. The order of the list is important since a user may be of
335 multiple groups.
337 This parameter may also be specified in a filename section to allow or
338 deny a local user to @code{OPEN} (@pxref{OPEN}) a data file and has the
339 same default to allow only the invoking user.
341 The following example would deny all users in group @code{primary} but
342 allow @code{username} who is a member of @code{primary}:
344 @example
345 allowed=-@@primary,username
346 @end example
348 @item disable_mlockall = boolean
349 When set to @code{false}, @cite{mlockall(2)} will be called on startup.  This
350 will use more physical memory but may also be more secure since no swapping to
351 disk will occur. The default is @var{true}.
353 @item log_path = /path/to/logfile
354 Logs informational messages to the specified file. The default is
355 @file{~/.pwmd/log}.
357 @item enable_logging = boolean
358 Enable or disable logging to @var{log_path}. The default is @code{false}.
360 @item log_keepopen = boolean
361 When set to @code{false}, the log file specified with @var{log_path} will be
362 closed after writing each line. The default is @code{true}.
364 @item syslog = boolean
365 Enable logging to @cite{syslog(8)} with facility @emph{LOG_DAEMON} and priority
366 @emph{LOG_INFO}. The default is @code{false}.
368 @item log_level = level
369 When @code{0}, only connections and errors are logged. When @code{1}, client
370 commands are also logged. When @code{2}, the command arguments are also logged.
371 The default is @code{0}.
373 @item use_agent = boolean
374 When true, enable @command{gpg-agent} support (@pxref{Invoking}).
376 @item agent_env_file = filename
377 A file containing the @env{GPG_AGENT_INFO} environment variable and value as
378 output by the @command{gpg-agent} @option{--write-env-file} command line
379 option.
381 @item kill_scd = boolean
382 Kill @command{scdaemon} after each @code{OPEN} (@pxref{OPEN}) or @code{SAVE}
383 (@pxref{SAVE}) command.
385 @item require_save_key = boolean
386 Require the passphrase needed to open a data file before writing changes
387 of the documment to disk reguardless of the key cache status.
389 @item disable_list_and_dump = boolean
390 When @code{true}, the @code{XPATH}, @code{XPATHATTR}, @code{LIST} and
391 @code{DUMP} protocol commands (@pxref{Commands}) will be disabled.
393 @item cache_push = file1,file2
394 A comma separated list of filenames that will be pushed into the file cache
395 upon startup. @command{pwmd} will prompt for the passphrase for each file unless
396 specified with the @var{passphrase} or @var{passphrase_file} parameters in a
397 matching file section.
399 @item priority = integer
400 The priority, or niceness, of the server. The default is inherited from the
401 parent process.
403 @item cipher = algorithm
404 The default cipher to use for data encryption. The algorithm must be one of:
405 @code{aes128}, @code{aes192}, @code{aes256}, @code{serpent128},
406 @code{serpent192}, @code{serpent256}, @code{camellia128},
407 @code{camellia192}, @code{camellia256}, @code{3des}, @code{cast5},
408 @code{blowfish}, @code{twofish128} or @code{twofish256}. The default is
409 @code{aes256}.
411 @item cipher_iterations = integer
412 The number of times to encrypt the XML data. This differs from the
413 @var{s2k_count} parameter which specifies the number of times to hash the
414 passphrase used to encrypt the data. The default is 0 although 1 iteration is
415 still done.
417 @item cipher_progress = integer
418 Send a progress message to the client after the specified amount of encryption
419 or decryption iterations have been done. The default is 2000.
421 @item keyparam = s-expression
422 The default key paramaters to use when generating a new key-pair. The
423 default is RSA with 2048 bits. Note that only RSA as the encryption
424 algorithm is supported at the moment. Both RSA and DSA keys may be used
425 for signing.
427 @item pinentry_path = /path/to/pinentry
428 The location of the @command{pinentry} binary. This program is used to
429 prompt for a passphrase when not using @command{gpg-agent}. The default
430 is specified at compile time.
432 @item pinentry_timeout = seconds
433 The number of seconds to wait for a pinentry before giving up and
434 returning an error. This timeout value is used for both waiting for
435 another pinentry to complete and for the pinentry waiting for user input.
436 @end table
438 @cindex Data file configuration options
439 The following options are defaults for new files when specified in the
440 @samp{global} section. When placed in a data file section they are options
441 specific to that data file only.
443 @table @samp 
444 @item backup = boolean
445 Whether to create a backup of the data file when saving. The backup filename
446 has the @file{.backup} extension appended to the opened file. The default is
447 @code{true}. 
449 @item cache_timeout = seconds
450 The number of seconds to keep the cache entry for this file. If @code{-1}, the
451 cache entry is kept forever. If @code{0}, each time an encrypted file is
452 @code{OPEN}ed (@pxref{OPEN}) a passphrase will be required. The default
453 is @code{600} or 10 minutes.
455 @item xfer_progress = bytes
456 Commands that send data lines to the client will also send the @code{XFER}
457 status message (@pxref{Status Messages}) after the specified number of bytes
458 have been sent. The number of bytes is rounded to @var{ASSUAN_LINELENGTH} or
459 @code{1002} bytes. The default is @code{8196}.
461 @item passphrase = string
462 The passphrase to use for this file. If specified in the @samp{global} section
463 then @samp{global} is treated as a data filename and not a default for other
464 files. Note that if a client changes the passphrase for this data file then
465 this value is not modified and will need to be updated.
467 @item passphrase_file = /path/to/file
468 Same as the @var{passphrase} parameter above but obtains the passphrase from
469 the specified filename.
471 @item recursion_depth = integer
472 The maximum number of times to resolve a @code{target} attribute for an
473 element in an element path (@pxref{Target Attribute}). An error is returned
474 when this value is exceeded.  The default is @code{100} but can be disabled by
475 setting to @code{0} (@emph{not recommended}).
477 @item allowed = [-]user,[-]@@group,...
478 Same parameter value as the @code{allowed} parameter mentioned above in
479 the @samp{global} section but grants or denies a local user from opening
480 a specific data file. The default is to allow only the invoking user.
482 @end table
483 @menu
484 * TLS::                   Remote connections over TLS.
485 * Pinentry::              Configuration file and defaults.
486 @end menu
488 @node TLS, Pinentry, Configuration, Configuration
489 @chapter Configuring remote connections over TLS.
490 @ifset manverb
492 @end ifset
493 Remote connections can also be made to @command{pwmd} over @abbr{TLS}.
494 Authentication is done by using X509 client certificates that are signed with
495 the same Certificate Authority (@abbr{CA}) as the server certificate.
497 The @abbr{CA} certificate is expected to be found in
498 @file{~/.pwmd/ca-cert.pem} while the @command{pwmd} server certificate and key
499 file should be put in @file{~/.pwmd/server-cert.pem} and
500 @file{~/.pwmd/server-key.pem}, respectively.
502 See the documentation of @command{certtool} or @command{openssl} for details
503 on creating self-signed certificates.
505 The following TLS configuration options are available:
507 @table @samp 
508 @item enable_tcp = boolean
509 Whether to enable TCP/TLS server support. If enabled, both TCP and the local
510 unix domain socket will listen for connections. The default is
511 @code{false}.
513 @item tcp_port = integer
514 The TCP port to listen on when @var{enable_tcp} is @code{true}. The default is
515 @code{6466}.
517 @item tcp_bind = string
518 The internet protocol to listen with. Must be one of @code{ipv4}, @code{ipv6}
519 or @code{any} to listen for both IPv4 and IPv6 connections.
521 @item tcp_interface = string
522 Only useful if running as root.
524 @item tls_timeout = seconds
525 The number of seconds to wait for a read() or write() call on a
526 @abbr{TLS} client file descriptor to complete before returning an
527 error. The default is @var{300}.
529 Note that the @code{SAVE} command (@pxref{SAVE}) may take a longer time
530 to complete than other commands since key generation may need to be done
531 or do to a large @option{--cipher-iterations} setting.
533 @item keepalive_interval = seconds
534 Send a keepalive status message to an idle remote client.  An idle
535 client is one who is not in a command. The purpose of this status
536 message is to disconnect a hung remote client and release any file mutex
537 locks so another client may open the same data file. The default is @code{60}.
539 @item tls_access = [+][!-]string[,[!-]string,...]
540 A comma separated list of client X509 certificate fingerprints in SHA-1
541 format that will be allowed to connect or open a file. If prefixed with
542 @code{!} or @code{-} then access is denied for the fingerprint. When
543 @code{!} or @code{-} is found by itself in the list it is treated as a
544 default for remaining fingerprints in the list. The @code{+} prefix
545 behaves the same but allows access. The order of the list is important
546 meaning that if one or more fingerprints is of the same SHA-1 hash, only
547 the final in the list is considered.
549 The access control is two fold: when the client connects its SHA-1
550 fingerprint is matched against the list of allowed fingerprints in the
551 @samp{global} section. When allowed in the @samp{global} section the
552 connection is established and the client may proceed to @code{OPEN}
553 (@pxref{OPEN}) a data file. During the @code{OPEN}, @code{CLEARCACHE}
554 and @code{CACHETIMEOUT} commands, the
555 fingerprint is checked again in a @samp{filename} section. When this
556 parameter is not found in a @samp{filename} section then access is
557 granted.
559 @item tcp_require_key = boolean
560 When @code{true}, require the remote client to provide the key or passphrase
561 to open a data file even if the file is cached. Note that the cache entry is
562 cleared during the @pxref{OPEN} command and the passphrase will be retrieved
563 from the client via a server @emph{INQUIRE}. This option is a default
564 for all files when specified in the @samp{global} section. The default
565 is @code{false}.
567 @item tcp_wait = integer
568 The time in tenths of a second to wait between TCP connections.  Setting to 0
569 will disable waiting. The default is @code{3}.
571 @item tls_cipher_suite = string
572 The GnuTLS cipher suite and protocol to use. See the GnuTLS documentation for
573 information about the format of this string. The default is @code{SECURE256}.
574 @end table
576 @node Pinentry, Commands, TLS, Configuration
577 @chapter Pinentry configuration
578 @mansect Pinentry
579 The @command{pinentry} program is used to prompt the user for passphrase
580 input or as a confirmation dialog; it needs to know where to prompt for
581 the input, beit from a terminal or an X11 display.
583 It is the responsibility of the client to tell @command{pinentry} about
584 the terminal or X11 display before requiring the input. This is done by
585 using the @command{pwmd} @code{OPTION} (@pxref{OPTION}) protocol command. It
586 need be done only once per client connection. To avoid the use of
587 @command{pinentry} entirely, use the @code{OPTION} (@pxref{OPTION})
588 @option{--disable-pinentry} protocol command.
590 @ifclear isman
591 @c    Node,     Next,    Previous, Up
592 @node Commands, Status Messages, Pinentry, Top
593 @chapter Protocol commands and their syntax
594 @include menu.texi
595 @include commands.texi
597 @c    Node,     Next,    Previous, Up 
598 @node Status Messages, Target Attribute, Commands, Top 
599 @chapter Status messages and their meanings
600 Some commands send status messages to inform the client about certain
601 operations or as a progress indicator.  Status messages begin with a
602 @code{KEYWORD} followed by a status description for status messages that
603 require it. What status messages are sent, when, and how often may depend on
604 configuration settings (@pxref{Configuration}). A status message sent from
605 @command{gpg-agent} (@inforef{Invoking GPG-AGENT,,gnupg}) is also forwarded to
606 the client.
608 @multitable @columnfractions .20 .25 .55
609 @headitem Message @tab Parameters @tab Description
610 @item CACHE
611 @cindex CACHE
612 @tab @code{<integer>}
613 @tab The number of cached documents. Sent to each client after connecting
614 (@pxref{GETINFO}) and after every cache modification.
616 @item CLIENTS
617 @cindex CLIENTS
618 @tab @code{<integer>}
619 @tab The number of connected clients (@pxref{GETINFO}). Sent to each client
620 when another client either connects or disconnects.
622 @item DECRYPT
623 @cindex DECRYPT
624 @tab @code{<current>} @code{<total>}
625 @tab Sent to the current client during a decrypt operation. How often this
626 status message is sent is determined by the @code{cipher_progress}
627 (@pxref{Configuration}) setting.
629 @item ENCRYPT
630 @cindex ENCRYPT
631 @tab @code{<current>} @code{<total>}
632 @tab Sent to the current client during an  encrypt operation. How often this
633 status message is sent is determined by the @code{cipher_progress}
634 (@pxref{Configuration}) setting.
636 @item GENKEY
637 @cindex GENKEY
638 @tab
639 @tab Sent once to the current client just before generating a new key-pair.
641 @item INQUIRE_MAXLEN
642 @cindex INQUIRE_MAXLEN
643 @tab @code{<bytes>}
644 @tab Sent to the client from @command{gpg-agent} when inquiring data. This
645 specifies the maximum number of bytes allowed for the client to send and
646 should not be exceeded.
648 @item KEEPALIVE
649 @cindex KEEPALIVE
650 @tab
651 @tab Sent to each idle client every @var{keepalive_interval}
652 (@pxref{Configuration}) seconds.
654 @item LOCKED
655 @cindex LOCKED
656 @tab
657 @tab Sent to the current client when another client is holding the lock for
658 the mutex associated with a file.
660 @item NEWFILE
661 @cindex NEWFILE
662 @tab
663 @tab Sent to the current client when the opened (@pxref{OPEN}) file does not
664 exist on the file-system.
666 @item XFER
667 @cindex XFER
668 @tab @code{<sent> <total>}
669 @tab Sent to the current client when transferring data. It has two space
670 delimited arguments. The first being the current amount of bytes transferred
671 and the other being the total bytes to be transferred.
672 @end multitable
674 @c    Node,     Next,    Previous, Up 
675 @node Target Attribute, Signals, Status Messages, Top 
676 @chapter The @code{target} attribute
677 @cindex target attribute
678 A @emph{case sensitive} attribute named @code{target} is treated specially
679 when found in each element of an element path. This attribute, like other
680 element attributes, is created or modified with the @code{ATTR} command
681 (@pxref{ATTR}). The value of this attribute is an existing element path
682 somewhere in the document.  If you are familiar with @abbr{XML} entities or
683 maybe the @abbr{HTML} @code{id} or @code{target} attributes or a symbolic link
684 in a file-system, you may find this attribute behaves similar to any of those.
686 To create a @code{target} attribute use the following syntax:
688 @example
689 ATTR SET target [!]element[@key{TAB}[!]child[..]] [!]element[@key{TAB}[!]child[..]]
690 @end example
692 Note the single space between the two element paths. The first element path is
693 where the @code{target} attribute will be created. If the element path does
694 not exist then it will be created.  This is the only time the @code{ATTR}
695 (@pxref{ATTR}) command will create elements. The attribute is created in the
696 final element of the first element path.
698 The second element path is the destination of where you want the first element
699 path to resolve to. When an element path is passed as an argument to a
700 protocol command @command{pwmd} looks for a @code{target} attribute when
701 resolving each element and, if found, "jumps" to the attribute value and
702 continues resolving any remaining elements.  When you want to avoid the
703 @code{target} attribute for any element of an element path then prefix the
704 element with the literal element character @samp{!}.
706 When an element of a element path is removed that a @code{target} attribute
707 resolves to then an error will occur when trying to access that element. You
708 may need to either update the @code{target} attribute value with a new element
709 path or remove the attribute entirely. Remember that since the element
710 contains the @code{target} attribute it will need to be prefixed with the
711 literal element character @samp{!} when specifying the element path to prevent
712 @command{pwmd} from trying to resolve the @code{target} attribute. For
713 example, to remove a @code{target} attribute for an element containing it:
715 @example
716 ATTR DELETE target path@key{TAB}to@key{TAB}!element
717 @end example
719 Clients should be careful of creating @code{target} loops, or targets that
720 resolve to themselves. See the @var{recursion_depth} (@pxref{Configuration})
721 configuration parameter for details.
723 The @code{REALPATH} command (@pxref{REALPATH}) can be used to show the element
724 path after resolving all @code{target} attributes.
727 @c    Node,     Next,    Previous, Up 
728 @node Signals, Concept Index, Target Attribute, Top
729 @chapter Recognized signals
730 @end ifclear
731 @mansect signals
732 Sending the @emph{SIGHUP} signal to a @command{pwmd} process will reload the
733 configuration file and sending @emph{SIGUSR1} will clear the entire file
734 cache.
736 @mansect see also
737 @ifset manverb
738 .BR gpg-agent (1), pinentry (1)
739 @end ifset
741 @ifclear isman
742 @c    Node,     Next,    Previous, Up 
743 @node Concept Index, , Signals, Top 
744 @unnumbered Concept Index
747 @c @printindex cp
748 @shortcontents 
749 @contents 
750 @end ifclear
751 @bye