mirror of
https://github.com/tbsdtv/linux_media.git
synced 2025-07-23 12:43:29 +02:00
apparmor: split out shared policy_XXX fns to lib
Signed-off-by: John Johansen <john.johansen@canonical.com>
This commit is contained in:
@@ -91,4 +91,85 @@ static inline bool mediated_filesystem(struct dentry *dentry)
|
||||
return !(dentry->d_sb->s_flags & MS_NOUSER);
|
||||
}
|
||||
|
||||
/* struct aa_policy - common part of both namespaces and profiles
|
||||
* @name: name of the object
|
||||
* @hname - The hierarchical name
|
||||
* @list: list policy object is on
|
||||
* @profiles: head of the profiles list contained in the object
|
||||
*/
|
||||
struct aa_policy {
|
||||
char *name;
|
||||
char *hname;
|
||||
struct list_head list;
|
||||
struct list_head profiles;
|
||||
};
|
||||
|
||||
/**
|
||||
* hname_tail - find the last component of an hname
|
||||
* @name: hname to find the base profile name component of (NOT NULL)
|
||||
*
|
||||
* Returns: the tail (base profile name) name component of an hname
|
||||
*/
|
||||
static inline const char *hname_tail(const char *hname)
|
||||
{
|
||||
char *split;
|
||||
|
||||
hname = strim((char *)hname);
|
||||
for (split = strstr(hname, "//"); split; split = strstr(hname, "//"))
|
||||
hname = split + 2;
|
||||
|
||||
return hname;
|
||||
}
|
||||
|
||||
/**
|
||||
* __policy_find - find a policy by @name on a policy list
|
||||
* @head: list to search (NOT NULL)
|
||||
* @name: name to search for (NOT NULL)
|
||||
*
|
||||
* Requires: rcu_read_lock be held
|
||||
*
|
||||
* Returns: unrefcounted policy that match @name or NULL if not found
|
||||
*/
|
||||
static inline struct aa_policy *__policy_find(struct list_head *head,
|
||||
const char *name)
|
||||
{
|
||||
struct aa_policy *policy;
|
||||
|
||||
list_for_each_entry_rcu(policy, head, list) {
|
||||
if (!strcmp(policy->name, name))
|
||||
return policy;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* __policy_strn_find - find a policy that's name matches @len chars of @str
|
||||
* @head: list to search (NOT NULL)
|
||||
* @str: string to search for (NOT NULL)
|
||||
* @len: length of match required
|
||||
*
|
||||
* Requires: rcu_read_lock be held
|
||||
*
|
||||
* Returns: unrefcounted policy that match @str or NULL if not found
|
||||
*
|
||||
* if @len == strlen(@strlen) then this is equiv to __policy_find
|
||||
* other wise it allows searching for policy by a partial match of name
|
||||
*/
|
||||
static inline struct aa_policy *__policy_strn_find(struct list_head *head,
|
||||
const char *str, int len)
|
||||
{
|
||||
struct aa_policy *policy;
|
||||
|
||||
list_for_each_entry_rcu(policy, head, list) {
|
||||
if (aa_strneq(policy->name, str, len))
|
||||
return policy;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
bool aa_policy_init(struct aa_policy *policy, const char *prefix,
|
||||
const char *name);
|
||||
void aa_policy_destroy(struct aa_policy *policy);
|
||||
|
||||
#endif /* AA_LIB_H */
|
||||
|
Reference in New Issue
Block a user