| .\" -*- nroff -*- | 
 | .\" Copyright (C) 2005 Red Hat, Inc. All Rights Reserved. | 
 | .\" Written by David Howells (dhowells@redhat.com) | 
 | .\" | 
 | .\" This program is free software; you can redistribute it and/or | 
 | .\" modify it under the terms of the GNU General Public License | 
 | .\" as published by the Free Software Foundation; either version | 
 | .\" 2 of the License, or (at your option) any later version. | 
 | .\" | 
 | .TH REQUEST-KEY.CONF 5 "15 November 2011" Linux "Linux Key Management Utilities" | 
 | .SH NAME | 
 | request-key.conf - Instantiation handler configuration file | 
 | .SH DESCRIPTION | 
 | .P | 
 | This file and its associated key-type specific variants are used by the | 
 | /sbin/request-key program to determine which program it should run to | 
 | instantiate a key. | 
 | .P | 
 | request-key looks first in /etc/request-key.d/ for a file of the key type name | 
 | plus ".conf" that it can use.  If that is not found, it will fall back to | 
 | /etc/request-key.conf. | 
 | .P | 
 | request-key scans through the chosen file one line at a time until it | 
 | finds a match, which it will then use. If it doesn't find a match, it'll return | 
 | an error and the kernel will automatically negate the key. | 
 | .P | 
 | Any blank line or line beginning with a hash mark '#' is considered to be a | 
 | comment and ignored. | 
 | .P | 
 | All other lines are assumed to be command lines with a number of white space | 
 | separated fields: | 
 | .P | 
 | <op> <type> <description> <callout-info> <prog> <arg1> <arg2> ... | 
 | .P | 
 | The first four fields are used to match the parameters passed to request-key by | 
 | the kernel. \fIop\fR is the operation type; currently the only supported | 
 | operation is "create". | 
 | .P | 
 | \fItype\fR, \fIdescription\fR and \fIcallout-info\fR match the three parameters | 
 | passed to \fBkeyctl request2\fR or the \fBrequest_key()\fR system call. Each of | 
 | these may contain one or more asterisk '*' characters as wildcards anywhere | 
 | within the string. | 
 | .P | 
 | Should a match be made, the program specified by <prog> will be exec'd. This | 
 | must have a fully qualified path name. argv[0] will be set from the part of the | 
 | program name that follows the last slash '/' character. | 
 | .P | 
 | If the program name is prefixed with a pipe bar character '|', then the program | 
 | will be forked and exec'd attached to three pipes. The callout information will | 
 | be piped to it on it's stdin and the intended payload data will be retrieved | 
 | from its stdout. Anything sent to stderr will be posted in syslog. If the | 
 | program exits 0, then /sbin/request-key will attempt to instantiate the key | 
 | with the data read from stdout. If it fails in any other way, then request-key | 
 | will attempt to execute the appropriate 'negate' operation command. | 
 | .P | 
 | The program arguments can be substituted with various macros. Only complete | 
 | argument substitution is supported - macro substitutions can't be embedded. All | 
 | macros begin with a percent character '%'. An argument beginning with two | 
 | percent characters will have one of them discarded. | 
 | .P | 
 | The following macros are supported: | 
 | .P | 
 | .RS | 
 | %o    Operation type | 
 | .br | 
 | %k    Key ID | 
 | .br | 
 | %t    Key type | 
 | .br | 
 | %d    Key description | 
 | .br | 
 | %c    Callout information | 
 | .br | 
 | %u    Key UID | 
 | .br | 
 | %g    Key GID | 
 | .br | 
 | %T    Requestor's thread keyring | 
 | .br | 
 | %P    Requestor's process keyring | 
 | .br | 
 | %S    Requestor's session keyring | 
 | .RE | 
 | .P | 
 | There's another macro substitution too that permits the interpolation of the | 
 | contents of a key: | 
 | .P | 
 | .RS | 
 | %{<type>:<description>} | 
 | .RE | 
 | .P | 
 | This performs a lookup for a key of the given type and description on the | 
 | requestor's keyrings, and if found, substitutes the contents for the macro. If | 
 | not found an error will be logged and the key under construction will be | 
 | negated. | 
 | .SH EXAMPLE | 
 | .P | 
 | A basic file will be installed in the /etc. This will contain two debugging | 
 | lines that can be used to test the installation: | 
 | .P | 
 | .RS | 
 | create user debug:* negate /bin/keyctl negate %k 30 %S | 
 | .br | 
 | create user debug:loop:* * |/bin/cat | 
 | .br | 
 | create user debug:* * /usr/share/keyutils/request-key-debug.sh %k %d %c %S | 
 | .br | 
 | negate * * * /bin/keyctl negate %k 30 %S | 
 | .RE | 
 | .P | 
 | This is set up so that something like: | 
 | .P | 
 | .RS | 
 | keyctl request2 user debug:xxxx negate | 
 | .RE | 
 | .P | 
 | will create a negative user-defined key, something like: | 
 | .P | 
 | .RS | 
 | keyctl request2 user debug:yyyy spoon | 
 | .RE | 
 | .P | 
 | will create an instantiated user-defined key with "Debug spoon" as the payload, | 
 | and something like: | 
 | .P | 
 | .RS | 
 | keyctl request2 user debug:loop:zzzz abcdefghijkl | 
 | .RE | 
 | .P | 
 | will create an instantiated user-defined key with the callout information as | 
 | the payload. | 
 | .SH FILES | 
 | .ul | 
 | /etc/request-key.conf | 
 | .ul 0 | 
 | .br | 
 | .ul | 
 | /etc/request-key.d/<keytype>.conf | 
 | .ul 0 | 
 | .SH SEE ALSO | 
 | \fBkeyctl\fR(1), \fBrequest-key.conf\fR(5) |