CONTRACT(5)            File Formats and Configurations           CONTRACT(5)
NAME
       contract - the contract file system
SYNOPSIS
       /system/contractDESCRIPTION
       The 
/system/contract file system acts as the primary interface to the
       contract subsystem. There is a subdirectory of 
/system/contract for
       each available contract type.       
/system/contract can be mounted on any mount point, in addition to
       the standard 
/system/contract mount point, and can be mounted several
       places at once. Such additional mounts are allowed in order to
       facilitate the confinement of processes to subtrees of the file
       system using 
chroot(8) and yet allow such processes to continue to
       use contract commands and interfaces.
       A combination of standard system calls (for example, 
open(2),       
close(2), and 
poll(2)) and calls to 
libcontract(3LIB) access       
/system/contract files.
       Consumers of the contract file system must be large file aware. See       
largefile(7) and 
lfcompile64(7).
   DIRECTORY STRUCTURE
       At the top level, the 
/system/contract directory contains
       subdirectories named with each available contract type, and one
       special directory, 
all.  Each of these directories is world-readable
       and world-searchable.   
STRUCTURE OF /system/contract/type       Each 
/system/contract/type directory contains a fixed number of
       files. It also contains a variable number of subdirectories
       corresponding to existing contracts of type 
type and named with the
       decimal representation of the contracts' IDs.
       The following files are in a 
/system/contract/type directory:       
template                   Opening this file returns a file descriptor for a new                   
type contract template.
                   You can use the following 
libcontract(3LIB) calls on a
                   template file descriptor:
                     >
                      ct_tmpl_activate(3contract)
                      ct_tmpl_clear(3contract)
                      ct_tmpl_create(3contract)
                   See TERMS for additional template functions.       
latest                   Opening this file returns a file descriptor for the
                   status file of the last 
type contract written by the
                   opening LWP. See 
STRUCTURE OF /system/contract/type/
id.
                   If the opening LWP has not created a 
type contract,
                   opening latest fails with 
ESRCH.       
bundle                   Opening this file returns a file descriptor for an event
                   endpoint which receives events from all 
type contracts on
                   the system. No privileges are required to open a type
                   bundle event endpoint. Events sent by contracts owned and
                   written by users other than the reader's effective user
                   id are invisible, that is, they are silently skipped,
                   unless the reader has 
{PRIV_CONTRACT_OBSERVER} in its
                   effective set. See 
EVENTS.       
pbundle                   Opening this file returns a file descriptor for an event
                   endpoint which receives events from all 
type contracts
                   held by the opening process. See 
EVENTS.   
STRUCTURE OF /system/contract/all       The 
/system/contract/all directory contains a numerically named file
       for each contract in the system. Each file is a symbolic link to the
       type-specific directory for that contract, that is       
/system/contract/all/id points to 
/system/contract/type/
id.   
STRUCTURE OF /system/contract/type/
id       Each 
/system/contract/type/
id directory contains the following files:       
ctl                 Opening this file returns a file descriptor for contract                 
id's control file. The open fails if the opening process
                 does not hold contract 
id and the contract has not been
                 inherited by the process contract of which the opening
                 process is a member. See 
process(5).
                 The following 
libcontract(3LIB) calls can be made on a 
ctl                 file descriptor if the contract is owned by the caller:
                   ct_ctl_abandon(3contract)
                   ct_ctl_newct(3contract)
                   ct_ctl_ack(3contract)
                   ct_ctl_qack(3contract)
                 The following 
libcontract(3LIB) call can be made on a ctl
                 file descriptor if the contract doesn't have an owner:
                   ct_ctl_adopt(3contract)       
status                 Opening this file returns a file descriptor for contract                 
id's status file. The following 
libcontract(3LIB) calls can
                 be made on a status file descriptor:
                 ct_status_read(3contract)
                  See STATUS.       
events                 Opening this file returns a file descriptor for an event
                 endpoint which receives events from contract 
id. See                 
EVENTS.
                 Only a process which has the same effective user ID as the
                 process owning the contract, the same effective user ID as
                 the contract's author, or has 
{PRIV_CONTRACT_OBSERVER} in
                 its effective set can open the event endpoint for a
                 contract.
   TERMS
       The following terms are defined for all contracts:       
cookie                                Specifies a 64-bit quantity that the
                                contract author can use to identify the
                                contract. Use 
ct_tmpl_set_cookie(3CONTRACT)                                to set this term.       
informative event set                                Selects which events are delivered as
                                informative events. Use                                
ct_tmpl_set_informative(3CONTRACT) to set
                                this term.       
critical event set                                Selects which events are delivered as
                                critical events. Use                                
ct_tmpl_set_critical(3CONTRACT) to set this
                                term.
   STATUS
       A status object returned by 
ct_status_read(3CONTRACT) contains the
       following pieces of information:       
contract ID           The numeric ID of the contract. Use 
ct_status_get_id(3CONTRACT)           to obtain this information.       
contract type           The type of the contract, specified as a string. Obtained using           
ct_status_get_type(3CONTRACT). The contract type is the same as
           its subdirectory name under 
/system/contract.       
creator's zone ID           The zone ID of the process which created the contract. Obtained
           using 
ct_status_get_zoneid(3CONTRACT).       
ownership state           The state of the contract, specified as 
CTS_OWNED, 
CTS_INHERITED,           
CTS_ORPHAN, or 
CTS_DEAD. Use 
ct_status_get_state(3CONTRACT) to
           obtain this information.       
contract holder           If the contract's state is 
CTS_OWNED, the ID of the process which
           owns the contract. If the contract's state is 
CTS_INHERITED, the
           ID of the contract which is acting as regent. If the contract's
           state is 
CTS_ORPHAN or 
CTS_DEAD, this is undefined. Use           
ct_status_get_holder(3CONTRACT) to obtain this information.       
number of critical events           The number of unacknowledged critical events pending on the
           contract's event queue. Use 
ct_status_get_nevents(3CONTRACT) to
           obtain this information.       
negotiation time           The time remaining before the current synchronous negotiation
           times out. Use 
ct_status_get_ntime(3CONTRACT) to obtain this
           information.       
negotiation quantum time           The time remaining before the current negotiation quantum runs
           out. Use 
ct_status_get_qtime(3CONTRACT) to obtain this
           information.       
negotiation event ID           The ID of the event which initiated the negotiation timeout. Use           
ct_status_get_nevid(3CONTRACT) to obtain this information.       
cookie (term)           The contract's cookie term. Use 
ct_status_get_cookie(3CONTRACT)           to obtain this information.       
Informative event set (term)           The contract's informative event set. Use           
ct_status_get_informative(3CONTRACT) to obtain this information.       
Critical event set (term)           The contract's critical event set. Use           
ct_status_get_critical(3CONTRACT) to obtain this information.
   EVENTS
       All three event endpoints, 
/system/contract/type/bundle,       
/system/contract/type/pbundle, and 
/system/contract/type/
id/events,
       are accessed in the same manner.
       The following 
libcontract(3LIB) interfaces are used with an event
       endpoint file descriptor:
         ct_event_read(3contract)
         ct_event_read_critical(3contract)
         ct_event_reset(3contract)
       To facilitate processes watching multiple event endpoints, it is
       possible to 
poll(2) on event endpoints. When it is possible to
       receive on an endpoint file descriptor, POLLIN is set for that
       descriptor.
       An event object returned by 
ct_event_read(3CONTRACT) contains the
       following information:       
contract ID                                   The ID of the contract that generated the
                                   event. Use 
ct_event_read(3CONTRACT) to
                                   obtain this information.       
event ID                                   The ID of the contract event.Use                                   
ct_event_get_evid(3CONTRACT).       
flags                                   A bit vector possibly including 
CT_ACK                                   and 
CTE_INFO. Use                                   
ct_event_get_flags(3CONTRACT) to obtain
                                   this information.       
event type                                   The type of event, equal to one of the
                                   constants specified in the contract
                                   type's manual page or 
CT_EV_NEGEND. Use                                   
ct_event_get_type(3CONTRACT) to obtain
                                   this information.
   EVENT TYPES
       The following event types are defined:       
CT_EV_NEGEND                       Some time after an exit negotiation is initiated, the                       
CT_EV_NEGEND event is sent. This indicates that the
                       negotiation ended. This might be because the
                       operation was cancelled, or because the operation was
                       successful. If successful, and the owner requested
                       that a new contract be written, this contains the ID
                       of that contract.                       
CT_EV_NEGEND cannot be included in a contract's
                       informative or critical event set. It is always
                       delivered and always critical. If 
CT_EV_NEGEND                       indicates that the operation was successful, no
                       further events are sent. The contract's owner should
                       use 
ct_ctl_abandon(3CONTRACT) to abandon the
                       contract.
                       A 
CT_EV_NEGEND event contains:                       
negotiation ID                                          The ID of the negotiation which
                                          ended. Use                                          
ct_event_get_nevid(3CONTRACT) to
                                          obain this information.                       
new contract ID                                          The ID of the newly created
                                          contract. This value is 0 if no
                                          contract was created, or the ID of
                                          the existing contract if the
                                          operation was not completed.  Use                                          
ct_event_get_newct(3CONTRACT) to
                                          obtain this information.
FILES
       /system/contract           List of all contract types       
/system/contract/all           Directory of all contract IDs       
/system/contract/all/id           Symbolic link to the type-specific directory of contract 
id       /system/contract/type           Specific type directory       
/system/contract/type/template
           Template for the contract type       
/system/contract/type/bundle
           Listening point for all contracts of that type       
/system/contract/type/pbundle
           Listening point for all contracts of that type for the opening
           process       
/system/contract/type /latest
           Status of most recent 
type contract created by the opening LWP       
/system/contract/type/
ID           Directory for contract id       
/system/contract/type/
ID/events
           Listening point for contract id's events       
/system/contract/type/
ID/ctl
           Control file for contract ID       
/system/contract/type/
ID/status
           Status info for contract ID
SEE ALSO
       ctrun(1), 
ctstat(1), 
ctwatch(1), 
close(2), 
ioctl(2), 
open(2),       
poll(2), 
ct_ctl_abandon(3CONTRACT), 
ct_event_get_evid(3CONTRACT),       
ct_event_get_flags(3CONTRACT), 
ct_event_get_nevid(3CONTRACT),       
ct_event_get_newct(3CONTRACT), 
ct_event_get_type(3CONTRACT),       
ct_event_read(3CONTRACT), 
ct_status_get_cookie(3CONTRACT),       
ct_status_get_critical(3CONTRACT), 
ct_status_get_holder(3CONTRACT),       
ct_status_get_id(3CONTRACT), 
ct_status_get_informative(3CONTRACT),       
ct_status_get_nevents(3CONTRACT), 
ct_status_get_nevid(3CONTRACT),       
ct_status_get_ntime(3CONTRACT), 
ct_status_get_qtime(3CONTRACT),       
ct_status_get_state(3CONTRACT), 
ct_status_get_type(3CONTRACT),       
ct_status_read(3CONTRACT), 
ct_tmpl_set_cookie(3CONTRACT),       
ct_tmpl_set_critical(3CONTRACT), 
ct_tmpl_set_informative(3CONTRACT),       
libcontract(3LIB), 
process(5), 
largefile(7), 
lfcompile(7),       
privileges(7), 
chroot(8)                              November 26, 2017                  CONTRACT(5)