.\" .\" written by Andrew Main .\" .TH CAP_FROM_TEXT 3 "2025-03-19" "" "Linux Programmer's Manual" .SH NAME cap_from_text, cap_to_text, cap_to_name, cap_from_name \- capability state textual representation translation .SH SYNOPSIS .nf #include cap_t cap_from_text(const char *buf_p); char *cap_to_text(cap_t caps, ssize_t *len_p); int cap_from_name(const char *name, cap_value_t *cap_p); char *cap_to_name(cap_value_t cap); .fi .sp Link with \fI\-lcap\fP. .SH DESCRIPTION These functions translate a capability state between an internal representation and a textual one. The internal representation is managed by the capability functions in working storage. The textual representation is a structured, human-readable string suitable for display. .PP .BR cap_from_text () allocates and initializes a capability state in working storage. It then sets the contents of this newly created capability state to the state represented by a human-readable, nul-terminated character string pointed to by .IR buf_p . It returns a pointer to the newly created capability state. When the capability state in working storage is no longer required, the caller should free any releasable memory by calling .BR cap_free () with .I cap_t as an argument. The function returns an error if it cannot parse the contents of the string pointed to by .I buf_p or does not recognize any .I capability_name or flag character as valid. The function also returns an error if any flag is both set and cleared within a single clause. .PP .BR cap_to_text () converts the capability state in working storage identified by .I caps into a nul-terminated human-readable string. This function allocates any memory necessary to contain the string, and returns a pointer to the string. If the pointer .I len_p is not NULL, the function shall also return the full length of the string (not including the nul terminator) in the location pointed to by .IR len_p . The capability state in working storage, identified by .IR caps , is completely represented in the character string. When the capability state in working storage is no longer required, the caller should free any releasable memory by calling .BR cap_free () with the returned string pointer as an argument. .PP .BR cap_from_name () converts a text representation of a capability, such as "cap_chown", to its numerical representation .RB ( CAP_CHOWN=0 ), writing the decoded value into .IR *cap_p . If .I cap_p is NULL no result is written, but the return code of the function indicates whether or not the specified capability can be represented by the library. .PP .BR cap_to_name () converts a capability index value, .IR cap , to a libcap-allocated textual string. This string should be deallocated with .BR cap_free (). .SH "TEXTUAL REPRESENTATION" The text format is described in the .BR cap_text_formats (7) man page. .SH "RETURN VALUE" .BR cap_from_text (), .BR cap_to_text () and .BR cap_to_name () return a non-NULL value on success, and NULL on failure. .BR cap_from_name () returns 0 for success, and \-1 on failure (unknown capability). .PP On failure, .I errno is set to .BR EINVAL , or .BR ENOMEM . .SH "CONFORMING TO" .BR cap_from_text () and .BR cap_to_text () are specified by the withdrawn POSIX.1e draft specification. .BR cap_from_name () and .BR cap_to_name () are Linux extensions. .SH EXAMPLE The example program below demonstrates the use of .BR cap_from_text () and .BR cap_to_text (). The following shell session shows some example runs: .nf $ ./a.out "cap_chown=p cap_chown+e" caps_to_text() returned "cap_chown=ep" $ ./a.out "all=pe cap_chown\-e cap_kill\-pe" caps_to_text() returned "=ep cap_chown\-e cap_kill\-ep" .fi The source code of the program is as follows: .nf #include #include #include #define handle_error(msg) \\ do { perror(msg); exit(EXIT_FAILURE); } while (0) int main(int argc, char *argv[]) { cap_t caps; char *txt_caps; if (argc != 2) { fprintf(stderr, "%s \\n", argv[0]); exit(EXIT_FAILURE); } caps = cap_from_text(argv[1]); if (caps == NULL) handle_error("cap_from_text"); txt_caps = cap_to_text(caps, NULL); if (txt_caps == NULL) handle_error("cap_to_text"); printf("caps_to_text() returned \\"%s\\"\\n", txt_caps); if (cap_free(txt_caps) != 0 || cap_free(caps) != 0) handle_error("cap_free"); exit(EXIT_SUCCESS); } .fi .SH "SEE ALSO" .BR libcap (3), .BR cap_clear (3), .BR cap_copy_ext (3), .BR cap_get_file (3), .BR cap_get_proc (3), .BR cap_init (3), .BR cap_text_formats (7), .BR capabilities (7)