struct aa_perms {
u32 allow;
u32 deny; /* explicit deny, or conflict if allow also set */
u32 subtree; /* allow perm on full subtree only when allow is set */
u32 cond; /* set only when ~allow and ~deny */
u32 kill; /* set only when ~allow | deny */
u32 complain; /* accumulates only used when ~allow & ~deny */
u32 prompt; /* accumulates only used when ~allow & ~deny */
u32 audit; /* set only when allow is set */
u32 quiet; /* set only when ~allow | deny */
u32 hide; /* set only when ~allow | deny */
u32 xindex;
u32 tag; /* tag string index, if present */
u32 label; /* label string index, if present */
};
/* * Indexes are broken into a 24 bit index and 8 bit flag. * For the index to be valid there must be a value in the flag
*/ #define AA_INDEX_MASK 0x00ffffff #define AA_INDEX_FLAG_MASK 0xff000000 #define AA_INDEX_NONE 0
if (!accum->xindex)
accum->xindex = addend->xindex; if (!accum->tag)
accum->tag = addend->tag; if (!accum->label)
accum->label = addend->label;
}
#define xcheck(FN1, FN2) \
({ \ int e, error = FN1; \
e = FN2; \ if (e) \
error = e; \
error; \
})
/* * TODO: update for labels pointing to labels instead of profiles * TODO: optimize the walk, currently does subwalk of L2 for each P in L1 * gah this doesn't allow for label compound check!!!!
*/ #define xcheck_ns_profile_profile(P1, P2, FN, args...) \
({ \ int ____e = 0; \ if (P1->ns == P2->ns) \
____e = FN((P1), (P2), args); \
(____e); \
})
/* Do the cross check but applying FN at the profiles level */ #define xcheck_labels_profiles(L1, L2, FN, args...) \
xcheck_ns_labels((L1), (L2), xcheck_ns_profile_label, (FN), args)
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.