.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.40) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} .rm #[ #] #H #V #F C .\" ======================================================================== .\" .IX Title "aa_features 3" .TH aa_features 3 "2021-04-03" "AppArmor 2.13.6" "AppArmor" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" aa_features \- an opaque object representing a set of AppArmor kernel features .PP aa_features_new \- create a new aa_features object based on a path .PP aa_features_new_from_string \- create a new aa_features object based on a string .PP aa_features_new_from_kernel \- create a new aa_features object based on the current kernel .PP aa_features_ref \- increments the ref count of an aa_features object .PP aa_features_unref \- decrements the ref count and frees the aa_features object when 0 .PP aa_features_write_to_file \- write a string representation of an aa_features object to a file .PP aa_features_is_equal \- equality test for two aa_features objects .PP aa_features_supports \- provides aa_features object support status .PP aa_features_id \- provides unique identifier for an aa_features object .SH "SYNOPSIS" .IX Header "SYNOPSIS" \&\fB#include \fR .PP \&\fBtypedef struct aa_features aa_features;\fR .PP \&\fBint aa_features_new(aa_features **features, int dirfd, const char *path);\fR .PP \&\fBint aa_features_new_from_string(aa_features **features, const char *string, size_t size);\fR .PP \&\fBint aa_features_new_from_kernel(aa_features **features);\fR .PP \&\fBaa_features *aa_features_ref(aa_features *features);\fR .PP \&\fBvoid aa_features_unref(aa_features *features);\fR .PP \&\fBint aa_features_write_to_file(aa_features *features, int dirfd, const char *path);\fR .PP \&\fBbool aa_features_is_equal(aa_features *features1, aa_features *features2);\fR .PP \&\fBbool aa_features_supports(aa_features *features, const char *str);\fR .PP \&\fBchar *aa_features_id(aa_features *features);\fR .PP Link with \fB\-lapparmor\fR when compiling. .SH "DESCRIPTION" .IX Header "DESCRIPTION" The \fIaa_features\fR object contains information about the AppArmor features supported by a kernel. The feature support information is based upon the files AppArmor represents in securityfs, which is typically found at /sys/kernel/security/apparmor/features/. That information may be parsed and turned into a string or flat file in order to represent a set of features of a kernel that is not currently running. .PP The \fBaa_features_new()\fR function creates an \fIaa_features\fR object based upon a directory file descriptor and path. The \fIpath\fR can point to a file or directory. See the \fBopenat\fR\|(2) man page for examples of \fIdirfd\fR and \fIpath\fR. The allocated \fIfeatures\fR object must be freed using \fBaa_features_unref()\fR. .PP The \fBaa_features_new_from_string()\fR function is similar except that it accepts a NUL-terminated string representation of the AppArmor features as the \fIstring\fR argument. The length of the features string, not counting the NUL-terminator, must be specified as the \fIsize\fR argument. The allocated \fIfeatures\fR object must be freed using \fBaa_features_unref()\fR. .PP The \fBaa_features_new_from_kernel()\fR function creates an \fIaa_features\fR object from the current running kernel. The allocated \fIfeatures\fR object must be freed using \fBaa_features_unref()\fR. .PP \&\fBaa_features_ref()\fR increments the reference count on the \fIfeatures\fR object. .PP \&\fBaa_features_unref()\fR decrements the reference count on the \fIfeatures\fR object and releases all corresponding resources when the reference count reaches zero. .PP The \fBaa_features_write_to_file()\fR function writes a string representation of the \&\fIfeatures\fR object to the file specified by the \fIdirfd\fR and \fIpath\fR combination. .PP \&\fBaa_features_is_equal()\fR can be used to detect if the \fIfeatures1\fR and \&\fIfeatures2\fR objects are equal. The definition of equality is private to libapparmor and may be changed in ways that do not break backward compatibility. .PP The \fBaa_features_supports()\fR function can be used to query the \fIfeatures\fR object to determine if a feature is supported. The \fIstr\fR argument should be equal to the path, relative to the \*(L"apparmor/features/\*(R" directory of securityfs, of the feature to query. For example, to test if policy version 6 is supported, \fIstr\fR would be \*(L"policy/versions/v6\*(R". .PP The \fBaa_features_id()\fR function returns a string representation of an identifier that can be used to uniquely identify an \fIaa_features\fR object. The mechanism for generating the string representation is internal to libapparmor and subject to change but an example implementation is applying a hash function to the features string. .SH "RETURN VALUE" .IX Header "RETURN VALUE" The \fBaa_features_new()\fR family of functions return 0 on success and \fI*features\fR will point to an \fIaa_features\fR object that must be freed by \&\fBaa_features_unref()\fR. \-1 is returned on error, with errno set appropriately, and \&\fI*features\fR will be set to \s-1NULL.\s0 .PP \&\fBaa_features_ref()\fR returns the value of \fIfeatures\fR. .PP \&\fBaa_features_write_to_file()\fR returns 0 on success. \-1 is returned on error, with errno set appropriately. .PP \&\fBaa_features_is_equal()\fR returns true if \fIfeatures1\fR and \fIfeatures2\fR are equal and false if they are not equal. .PP \&\fBaa_features_supports()\fR returns true if the feature represented by \fIstr\fR is supported and false if it is not supported. .PP \&\fBaa_features_id()\fR returns a string identifying \fIfeatures\fR which must be freed by the caller. \s-1NULL\s0 is returned on error, with errno set appropriately. .SH "ERRORS" .IX Header "ERRORS" The errno value will be set according to the underlying error in the \&\fIaa_features\fR family of functions that return \-1 or \s-1NULL\s0 on error. .SH "NOTES" .IX Header "NOTES" The \fBaa_features_id()\fR function can be found in libapparmor version 2.13. All the other aa_feature functions described above are present in libapparmor version 2.10. .PP \&\fBaa_features_unref()\fR saves the value of errno when called and restores errno before exiting in libapparmor version 2.12 and newer. .SH "BUGS" .IX Header "BUGS" None known. If you find any, please report them at . .SH "SEE ALSO" .IX Header "SEE ALSO" \&\fBopenat\fR\|(2) and .