| .TH CAP_COPY_EXT 3 "2008-05-11" "" "Linux Programmer's Manual" |
| .SH NAME |
| cap_copy_ext, cap_size, cap_copy_int \- capability state |
| external representation translation |
| .SH SYNOPSIS |
| .B #include <sys/capability.h> |
| .sp |
| .BI "ssize_t cap_size(cap_t " cap_p ); |
| .sp |
| .BI "ssize_t cap_copy_ext(void *" ext_p ", cap_t " cap_p ", ssize_t " size ); |
| .sp |
| .BI "cap_t cap_copy_int(const void *" ext_p ); |
| .sp |
| Link with \fI-lcap\fP. |
| .SH DESCRIPTION |
| These functions translate between internal and external |
| representations of a capability state. The external representation is |
| an exportable, contiguous, persistent representation of a capability |
| state in user-managed space. The internal representation is managed |
| by the capability functions in working storage. |
| .PP |
| .BR cap_size () |
| returns the total length (in bytes) that the capability state in working |
| storage identified by |
| .I cap_p |
| would require when converted by |
| .BR cap_copy_ext (). |
| This function is used primarily to determine the amount of buffer space that |
| must be provided to the |
| .BR cap_copy_ext () |
| function in order to hold the capability data record created from |
| .IR cap_p . |
| .PP |
| .BR cap_copy_ext () |
| copies a capability state in working storage, identified by |
| .IR cap_p , |
| from system managed space to user-managed space (pointed to by |
| .IR ext_p ) |
| and returns the length of the resulting data record. The size parameter |
| represents the maximum size, in bytes, of the resulting data record. The |
| .BR cap_copy_ext () |
| function will do any conversions necessary to convert the capability |
| state from the undefined internal format to an exportable, contiguous, |
| persistent data record. It is the responsibility of the user to |
| allocate a buffer large enough to hold the copied data. The buffer |
| length required to hold the copied data may be obtained by a call to |
| the |
| .BR cap_size () |
| function. |
| .PP |
| .BR cap_copy_int () |
| copies a capability state from a capability data record in user-managed |
| space to a new capability state in working storage, allocating any |
| memory necessary, and returning a pointer to the newly created capability |
| state. The function initializes the capability state and then copies |
| the capability state from the record pointed to by |
| .I ext_p |
| into the capability state, converting, if necessary, the data from a |
| contiguous, persistent format to an undefined, internal format. Once |
| copied into internal format, the object can be manipulated by the capability |
| state manipulation functions (see |
| .BR cap_clear (3)). |
| Note that the record pointed to by |
| .I ext_p |
| must have been obtained from a previous, successful call to |
| .BR cap_copy_ext () |
| for this function to work successfully. The caller should free any |
| releasable memory, when the capability state in working storage is no |
| longer required, by calling |
| .BR cap_free () |
| with the |
| .I cap_t |
| as an argument. |
| .SH "RETURN VALUE" |
| .BR cap_size () |
| returns the length required to hold a capability data record on success, |
| and -1 on failure. |
| .PP |
| .BR cap_copy_ext () |
| returns the number of bytes placed in the user managed space pointed to by |
| .I ext_p |
| on success, and -1 on failure. |
| .PP |
| .BR cap_copy_int () |
| returns a pointer to the newly created capability state in working storage |
| on success, and NULL on failure. |
| .PP |
| On failure, |
| .BR errno |
| is set to |
| .BR EINVAL , |
| .BR ENOMEM , |
| or |
| .BR ERANGE . |
| .SH "CONFORMING TO" |
| These functions are specified in the withdrawn POSIX.1e draft specification. |
| .SH "SEE ALSO" |
| .BR libcap (3), |
| .BR cap_clear (3), |
| .BR cap_from_text (3), |
| .BR cap_get_file (3), |
| .BR cap_get_proc (3), |
| .BR cap_init (3), |
| .BR capabilities (7) |