linux/security/apparmor/include/apparmorfs.h
<<
>>
Prefs
   1/*
   2 * AppArmor security module
   3 *
   4 * This file contains AppArmor filesystem definitions.
   5 *
   6 * Copyright (C) 1998-2008 Novell/SUSE
   7 * Copyright 2009-2010 Canonical Ltd.
   8 *
   9 * This program is free software; you can redistribute it and/or
  10 * modify it under the terms of the GNU General Public License as
  11 * published by the Free Software Foundation, version 2 of the
  12 * License.
  13 */
  14
  15#ifndef __AA_APPARMORFS_H
  16#define __AA_APPARMORFS_H
  17
  18enum aa_fs_type {
  19        AA_FS_TYPE_BOOLEAN,
  20        AA_FS_TYPE_STRING,
  21        AA_FS_TYPE_U64,
  22        AA_FS_TYPE_FOPS,
  23        AA_FS_TYPE_DIR,
  24};
  25
  26struct aa_fs_entry;
  27
  28struct aa_fs_entry {
  29        const char *name;
  30        struct dentry *dentry;
  31        umode_t mode;
  32        enum aa_fs_type v_type;
  33        union {
  34                bool boolean;
  35                char *string;
  36                unsigned long u64;
  37                struct aa_fs_entry *files;
  38        } v;
  39        const struct file_operations *file_ops;
  40};
  41
  42extern const struct file_operations aa_fs_seq_file_ops;
  43
  44#define AA_FS_FILE_BOOLEAN(_name, _value) \
  45        { .name = (_name), .mode = 0444, \
  46          .v_type = AA_FS_TYPE_BOOLEAN, .v.boolean = (_value), \
  47          .file_ops = &aa_fs_seq_file_ops }
  48#define AA_FS_FILE_STRING(_name, _value) \
  49        { .name = (_name), .mode = 0444, \
  50          .v_type = AA_FS_TYPE_STRING, .v.string = (_value), \
  51          .file_ops = &aa_fs_seq_file_ops }
  52#define AA_FS_FILE_U64(_name, _value) \
  53        { .name = (_name), .mode = 0444, \
  54          .v_type = AA_FS_TYPE_U64, .v.u64 = (_value), \
  55          .file_ops = &aa_fs_seq_file_ops }
  56#define AA_FS_FILE_FOPS(_name, _mode, _fops) \
  57        { .name = (_name), .v_type = AA_FS_TYPE_FOPS, \
  58          .mode = (_mode), .file_ops = (_fops) }
  59#define AA_FS_DIR(_name, _value) \
  60        { .name = (_name), .v_type = AA_FS_TYPE_DIR, .v.files = (_value) }
  61
  62extern void __init aa_destroy_aafs(void);
  63
  64struct aa_profile;
  65struct aa_namespace;
  66
  67enum aafs_ns_type {
  68        AAFS_NS_DIR,
  69        AAFS_NS_PROFS,
  70        AAFS_NS_NS,
  71        AAFS_NS_COUNT,
  72        AAFS_NS_MAX_COUNT,
  73        AAFS_NS_SIZE,
  74        AAFS_NS_MAX_SIZE,
  75        AAFS_NS_OWNER,
  76        AAFS_NS_SIZEOF,
  77};
  78
  79enum aafs_prof_type {
  80        AAFS_PROF_DIR,
  81        AAFS_PROF_PROFS,
  82        AAFS_PROF_NAME,
  83        AAFS_PROF_MODE,
  84        AAFS_PROF_ATTACH,
  85        AAFS_PROF_HASH,
  86        AAFS_PROF_SIZEOF,
  87};
  88
  89#define ns_dir(X) ((X)->dents[AAFS_NS_DIR])
  90#define ns_subns_dir(X) ((X)->dents[AAFS_NS_NS])
  91#define ns_subprofs_dir(X) ((X)->dents[AAFS_NS_PROFS])
  92
  93#define prof_dir(X) ((X)->dents[AAFS_PROF_DIR])
  94#define prof_child_dir(X) ((X)->dents[AAFS_PROF_PROFS])
  95
  96void __aa_fs_profile_rmdir(struct aa_profile *profile);
  97void __aa_fs_profile_migrate_dents(struct aa_profile *old,
  98                                   struct aa_profile *new);
  99int __aa_fs_profile_mkdir(struct aa_profile *profile, struct dentry *parent);
 100void __aa_fs_namespace_rmdir(struct aa_namespace *ns);
 101int __aa_fs_namespace_mkdir(struct aa_namespace *ns, struct dentry *parent,
 102                            const char *name);
 103
 104#endif /* __AA_APPARMORFS_H */
 105